Documentation
name: coverage

on: [push]
jobs:
  test:
    name: coverage
    runs-on: ubuntu-latest
    container:
      image: xd009642/tarpaulin:latest
      options: --security-opt seccomp=unconfined
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Cache cargo
        uses: actions/cache@v4
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-cargo

      - name: Cache cargo build
        uses: actions/cache@v4
        with:
          path: target
          key: ${{ runner.os }}-stable-build-target-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-stable-build-target-

      - name: Generate code coverage
        run: |
          cargo tarpaulin --all-features --workspace --timeout 120 --out xml

      - name: Prepare codecov
        run: git config --global --add safe.directory "$GITHUB_WORKSPACE" # https://github.com/codecov/feedback/issues/263

      - name: Upload to codecov.io
        uses: codecov/codecov-action@v4
        with:
          fail_ci_if_error: true
        env:
          CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}}