name: Test Coverage

on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - master

jobs:
  test:
    name: Measure Test Coverage
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Polaris
        uses: actions/checkout@v4
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          components: llvm-tools-preview
      - name: Install grcov
        run: cargo install grcov
      - name: Run tests
        run: cargo test --no-fail-fast
        env:
          RUSTFLAGS: "-Cinstrument-coverage"
      - name: Gather coverage results
        run: >
          grcov
          .
          -t lcov
          -o coverage.txt
          --llvm
          --branch
          --ignore-not-existing
          --binary-path ./target/debug/
          --excl-line "#\[derive\("
          --excl-br-line "#\[derive\("
          --excl-start "mod tests \{"
          --excl-br-start "mod tests \{"
      - name: Upload Results
        uses: codecov/codecov-action@v2
        with:
          fail_ci_if_error: true
          verbose: true
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}