From 46dd86beff5dcfd0b6ddf70d37961a98b2b5a9bc Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Thu, 16 Jul 2026 19:58:49 +0300 Subject: [PATCH 1/2] test: reproduce missing SBOM after enabling it --- tests/testsuite/sbom.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/testsuite/sbom.rs b/tests/testsuite/sbom.rs index c3aef615a31..47ff5ed1cb2 100644 --- a/tests/testsuite/sbom.rs +++ b/tests/testsuite/sbom.rs @@ -94,6 +94,39 @@ fn simple() { ); } +#[cargo_test] +fn enabling_sbom_invalidates_fingerprint() { + let p = project() + .file("Cargo.toml", &basic_bin_manifest("foo")) + .file("src/main.rs", r#"fn main() {}"#) + .build(); + + p.cargo("build").run(); + + let file = append_sbom_suffix(&p.bin("foo")); + assert!(!file.exists()); + + p.cargo("build -Zsbom") + .env("CARGO_BUILD_SBOM", "true") + .masquerade_as_nightly_cargo(&["sbom"]) + .with_stderr_data(cargo_test_support::str![[r#" +[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s + +"#]]) + .run(); + + assert!(!file.exists()); + + p.cargo("build -Zsbom") + .env("CARGO_BUILD_SBOM", "true") + .masquerade_as_nightly_cargo(&["sbom"]) + .with_stderr_data(cargo_test_support::str![[r#" +[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s + +"#]]) + .run(); +} + #[cargo_test] fn with_multiple_crate_types() { let p = project() From bd1b85773cf0ed19f6068359b09b64bd5f85a86a Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Thu, 16 Jul 2026 20:01:35 +0300 Subject: [PATCH 2/2] fix: include SBOM outputs in fingerprints --- src/cargo/core/compiler/fingerprint/mod.rs | 7 +------ tests/testsuite/sbom.rs | 3 ++- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/cargo/core/compiler/fingerprint/mod.rs b/src/cargo/core/compiler/fingerprint/mod.rs index deccae65fd5..f10a439c97e 100644 --- a/src/cargo/core/compiler/fingerprint/mod.rs +++ b/src/cargo/core/compiler/fingerprint/mod.rs @@ -1611,12 +1611,7 @@ fn calculate_normal( let outputs = build_runner .outputs(unit)? .iter() - .filter(|output| { - !matches!( - output.flavor, - FileFlavor::DebugInfo | FileFlavor::Auxiliary | FileFlavor::Sbom - ) - }) + .filter(|output| !matches!(output.flavor, FileFlavor::DebugInfo | FileFlavor::Auxiliary)) .map(|output| output.path.clone()) .collect(); diff --git a/tests/testsuite/sbom.rs b/tests/testsuite/sbom.rs index 47ff5ed1cb2..83ed446d71c 100644 --- a/tests/testsuite/sbom.rs +++ b/tests/testsuite/sbom.rs @@ -110,12 +110,13 @@ fn enabling_sbom_invalidates_fingerprint() { .env("CARGO_BUILD_SBOM", "true") .masquerade_as_nightly_cargo(&["sbom"]) .with_stderr_data(cargo_test_support::str![[r#" +[COMPILING] foo v0.5.0 ([ROOT]/foo) [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s "#]]) .run(); - assert!(!file.exists()); + assert!(file.is_file()); p.cargo("build -Zsbom") .env("CARGO_BUILD_SBOM", "true")