commit e0e3c897b2919b4c1130bc7cf97d525bd655bff4
parent 38a0c041f4a176810b33f7559a759a1c2f96fc4d
Author: triesap <tyson@radroots.org>
Date: Fri, 13 Mar 2026 00:58:31 +0000
build: fix coverage toolchain for llvm-cov
- add llvm-tools-preview to the nightly coverage toolchain so cargo-llvm-cov can find llvm-cov and llvm-profdata
- preserve blocking coverage failures by emitting a failing gate report when per-crate summary artifacts are missing
- keep the change scoped to the nix coverage lane and its artifact contract without broadening into unrelated workflow cleanup
- verify with cargo check and cargo test for xtask plus git diff --check while narrow dockerized nix evaluation remains slow in this environment
Diffstat:
2 files changed, 54 insertions(+), 3 deletions(-)
diff --git a/nix/common.nix b/nix/common.nix
@@ -244,6 +244,54 @@ EOF
[ -n "''${crate}" ] || continue
safe_crate="''${crate//-/_}"
crate_dir="target/sdk-coverage/''${safe_crate}"
+ crate_status="$(awk -F: -v crate="''${crate}" '$1 == crate { status = $2 } END { print status }' target/sdk-coverage/coverage-report-status.txt)"
+
+ if [ ! -f "''${crate_dir}/coverage-summary.json" ] || [ ! -f "''${crate_dir}/coverage-lcov.info" ]; then
+ fail_reason="missing-coverage-artifacts"
+ if [ -n "''${crate_status}" ] && [ "''${crate_status}" != "ok" ]; then
+ fail_reason="''${crate_status}"
+ fi
+
+ cat > "''${crate_dir}/coverage-gate-blocking.json" <<EOF
+ {
+ "scope": "''${crate}-blocking",
+ "thresholds": {
+ "executable_lines": 100,
+ "functions": 100,
+ "regions": 100,
+ "branches": 100,
+ "branches_required": true
+ },
+ "measured": {
+ "executable_lines_percent": 0,
+ "executable_lines_source": "da",
+ "functions_percent": 0,
+ "branches_percent": null,
+ "branches_available": false,
+ "summary_lines_percent": 0,
+ "summary_regions_percent": 0
+ },
+ "counts": {
+ "executable_lines": {
+ "covered": 0,
+ "total": 0
+ },
+ "branches": {
+ "covered": 0,
+ "total": 0
+ }
+ },
+ "result": {
+ "pass": false,
+ "fail_reasons": [
+ "''${fail_reason}"
+ ]
+ }
+ }
+EOF
+ continue
+ fi
+
cargo run -q -p xtask -- sdk coverage report \
--scope "''${crate}-blocking" \
--summary "''${crate_dir}/coverage-summary.json" \
diff --git a/nix/toolchains.nix b/nix/toolchains.nix
@@ -3,23 +3,26 @@ let
toolchain = builtins.fromTOML (builtins.readFile ../rust-toolchain.toml);
stableVersion = toolchain.toolchain.channel;
stableTargets = toolchain.toolchain.targets or [];
- extensions = [
+ stableExtensions = [
"clippy"
"rust-analyzer"
"rust-src"
"rustfmt"
];
+ coverageExtensions = stableExtensions ++ [
+ "llvm-tools-preview"
+ ];
in
{
stable = pkgs.rust-bin.stable.${stableVersion}.default.override {
- inherit extensions;
+ extensions = stableExtensions;
targets = stableTargets;
};
coverage = pkgs.rust-bin.selectLatestNightlyWith (
nightly:
nightly.default.override {
- inherit extensions;
+ extensions = coverageExtensions;
targets = stableTargets;
}
);