diff --git a/.github/workflows/cts.yml b/.github/workflows/cts.yml index 418a46c98..2bc0680cb 100644 --- a/.github/workflows/cts.yml +++ b/.github/workflows/cts.yml @@ -43,10 +43,15 @@ jobs: - name: Install Repo MSRV toolchain run: | - rustup toolchain install ${{ env.MSRV }} --no-self-update --profile=minimal --target ${{ matrix.target }} + rustup toolchain install ${{ env.MSRV }} --no-self-update --profile=minimal --target ${{ matrix.target }} --component llvm-tools rustup override set ${{ env.MSRV }} cargo -V + - name: Install `cargo-llvm-cov` + uses: taiki-e/install-action@v2 + with: + tool: cargo-llvm-cov + - name: caching uses: Swatinem/rust-cache@v2 with: @@ -60,7 +65,7 @@ jobs: mkdir -p .cargo cat <> .cargo/config.toml [profile.dev] - debug = 1 + debug = "line-tables-only" EOF - name: (Windows) Install DXC @@ -71,7 +76,7 @@ jobs: if: matrix.os == 'windows-2022' uses: ./.github/actions/install-warp with: - target-dirs: "target/debug" + target-dirs: "target/llvm-cov-target/debug" - name: (Linux) Install Mesa if: matrix.os == 'ubuntu-24.04' @@ -79,4 +84,20 @@ jobs: - name: run CTS shell: bash - run: cargo xtask cts + run: cargo xtask cts --llvm-cov + + - name: Generate coverage report + id: coverage + shell: bash + continue-on-error: true + run: | + set -e + + cargo llvm-cov report --lcov --output-path lcov.info + + - name: Upload coverage report to Codecov + uses: codecov/codecov-action@v5 + if: steps.coverage.outcome == 'success' + with: + files: lcov.info + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/xtask/src/cts.rs b/xtask/src/cts.rs index 9128181d6..ff3a6cbe8 100644 --- a/xtask/src/cts.rs +++ b/xtask/src/cts.rs @@ -17,6 +17,7 @@ const CTS_DEFAULT_TEST_LIST: &str = "cts_runner/test.lst"; pub fn run_cts(shell: Shell, mut args: Arguments) -> anyhow::Result<()> { let skip_checkout = args.contains("--skip-checkout"); + let llvm_cov = args.contains("--llvm-cov"); let mut list_files = Vec::::new(); while let Some(file) = args.opt_value_from_str("-f")? { @@ -133,12 +134,18 @@ pub fn run_cts(shell: Shell, mut args: Arguments) -> anyhow::Result<()> { log::info!("Skipping CTS checkout because --skip-checkout was specified"); } + let run_flags = if llvm_cov { + &["llvm-cov", "--no-cfg-coverage", "--no-report", "run"][..] + } else { + &["run"][..] + }; + log::info!("Running CTS"); for test in &tests { log::info!("Running {}", test.to_string_lossy()); shell .cmd("cargo") - .args(["run"]) + .args(run_flags) .args(["--manifest-path".as_ref(), wgpu_cargo_toml.as_os_str()]) .args(["-p", "cts_runner"]) .args(["--bin", "cts_runner"])