on: pull_request: push: branches: - master name: Codecov jobs: test-and-coverage: runs-on: ubuntu-latest env: CARGO_INCREMENTAL: 0 RUSTFLAGS: "-C instrument-coverage" LLVM_PROFILE_FILE: "coverage-%p-%m.profraw" steps: # 1️⃣ Checkout the repo - name: Checkout code uses: actions/checkout@v4 # 2️⃣ Install Rust toolchain (nightly required for coverage) - name: Set up Rust uses: dtolnay/rust-toolchain@stable with: toolchain: nightly components: llvm-tools-preview # 3️⃣ Cache build artifacts for faster CI - name: Cache cargo build uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} # 4️⃣ Build and test with coverage instrumentation - name: Run tests run: | cargo build --all-features cargo test --all-features # 5️⃣ Install grcov - name: Install grcov run: cargo install grcov # 6️⃣ Generate lcov report - name: Generate coverage report run: | mkdir -p coverage grcov . \ --binary-path ./target/debug/ \ -s . \ -t lcov \ --branch \ --ignore-not-existing \ --ignore '../*' \ --ignore "/*" \ -o coverage/tests.lcov # 7️⃣ Upload to Codecov - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} # only needed for private repos files: coverage/tests.lcov fail_ci_if_error: true flags: unittests name: rust-codecov