Files
anki/tools/coverage/coverage-rust.bat
Abdo 3c9b1daf35 CI: Apply a consistent Cargo profile (#5133)
## Linked issue

Related:
https://github.com/ankitects/anki/pull/5102#issuecomment-4923922894

## Summary / motivation


This adds a new Cargo profile (`ci`) for use in all Rust build commands
on CI. The goal is to reduce unnecessary recompilation of the same
crates in dev/release profiles.

## Steps to reproduce (before)

View the logs of the last CI run on main and notice that some crates are
getting compiled with the `release` profile, e.g. compilation ends with
"Finished `release` profile [optimized]".

## How to test (after)

View the logs of the last CI run in this PR and confirm all Rust
compilation commands end with "Finished `ci` profile [unoptimized]",
indicating that only a single profile is being used.

### Checklist (minimum)

- [x] I ran `./ninja check` or an equivalent relevant check locally.
- [ ] I added or updated tests when the change is non-trivial or
behavior changed.

## Scope

- [x] This PR is focused on one change (no unrelated edits).
2026-08-12 10:17:29 +03:00

46 lines
1.5 KiB
Batchfile

@echo off
setlocal
rem cargo-llvm-cov's llvm-profdata uses the host toolchain, which is incompatible
rem with the profraw files produced when running on Windows ARM64.
if "%PROCESSOR_ARCHITECTURE%"=="ARM64" (
echo Rust coverage is not supported on Windows ARM64 ^(llvm-profdata format mismatch^).
echo Run on Linux or let CI enforce coverage.
exit /b 0
)
set "outdir=out\coverage\rust"
set "LLVMCOVPATH=out\bin"
if not exist %outdir% mkdir %outdir%
if "%CARGO_TARGET_DIR%"=="" set "CARGO_TARGET_DIR=out\rust"
if "%CI%"=="true" (
rem prebuilt binary shouldve been installed earlier
set "CARGO_CMD=cargo"
set PROFILE=ci
) else (
if not exist %LLVMCOVPATH% mkdir %LLVMCOVPATH%
if not exist %LLVMCOVPATH%\cargo-llvm-cov.exe (
cargo install cargo-llvm-cov --version 0.8.4 --locked --root out || exit /b 1
)
if not exist %LLVMCOVPATH%\cargo-nextest.exe (
cargo install cargo-nextest --version 0.9.99 --locked --no-default-features --features default-no-update --root out || exit /b 1
)
set "CARGO_CMD=%LLVMCOVPATH%\cargo-llvm-cov.exe"
set PROFILE=dev
)
set "PATH=%LLVMCOVPATH%;%PATH%"
set "ANKI_TEST_MODE=1"
"%CARGO_CMD%" llvm-cov nextest --workspace --locked ^
--cargo-profile %PROFILE% ^
--json --summary-only ^
--output-path %outdir%\coverage-summary.json --fail-under-lines 64 || exit /b 1
if "%1"=="--html" (
"%CARGO_CMD%" llvm-cov report --profile %PROFILE% --html --output-dir %outdir% || exit /b 1
echo Rust coverage report: %outdir%\html\index.html
)