Add snapshot test for cross-compiled dist without docs

This commit is contained in:
Jakub Beránek 2025-08-26 08:52:04 +02:00
parent d327d651e2
commit 598387bfb5
No known key found for this signature in database
GPG key ID: 909CD0D26483516B
2 changed files with 88 additions and 5 deletions

View file

@ -145,8 +145,7 @@ pub trait Step: 'static + Clone + Debug + PartialEq + Eq + Hash {
}
/// Metadata that describes an executed step, mostly for testing and tracing.
#[allow(unused)]
#[derive(Debug, PartialEq, Eq)]
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct StepMetadata {
name: String,
kind: Kind,

View file

@ -1493,7 +1493,7 @@ mod snapshot {
/// This also serves as an important regression test for <https://github.com/rust-lang/rust/issues/138123>
/// and <https://github.com/rust-lang/rust/issues/138004>.
#[test]
fn dist_all_cross() {
fn dist_all_cross_extended() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx
@ -1571,8 +1571,77 @@ mod snapshot {
");
}
// Enable dist cranelift tarball by default with `x dist` if cranelift is enabled in
// `rust.codegen-backends`.
/// Simulates e.g. the powerpc64 builder, which is fully cross-compiled from x64, but it does
/// not build docs. Crutically, it shouldn't build host stage 2 rustc.
#[test]
fn dist_all_cross_extended_no_docs() {
let ctx = TestCtx::new();
let steps = ctx
.config("dist")
.hosts(&[TEST_TRIPLE_1])
.targets(&[TEST_TRIPLE_1])
.args(&[
"--set",
"rust.channel=nightly",
"--set",
"build.extended=true",
"--set",
"build.docs=false",
])
.get_steps();
// Make sure that we don't build stage2 host rustc
// steps.assert_no_match(|m| {
// m.name == "rustc"
// && m.built_by.map(|b| b.stage) == Some(1)
// && *m.target.triple == host_target()
// });
insta::assert_snapshot!(
steps.render(), @r"
[dist] mingw <target1>
[build] llvm <host>
[build] llvm <target1>
[build] rustc 0 <host> -> rustc 1 <host>
[build] rustc 0 <host> -> WasmComponentLd 1 <host>
[build] rustc 1 <host> -> std 1 <target1>
[build] rustc 1 <host> -> std 1 <host>
[build] rustc 1 <host> -> rustc 2 <target1>
[build] rustc 1 <host> -> WasmComponentLd 2 <target1>
[build] rustdoc 2 <target1>
[build] rustc 1 <host> -> rust-analyzer-proc-macro-srv 2 <target1>
[build] rustc 0 <host> -> GenerateCopyright 1 <host>
[build] rustc 0 <host> -> RustInstaller 1 <host>
[dist] rustc <target1>
[build] rustc 1 <host> -> rustc 2 <host>
[build] rustc 1 <host> -> WasmComponentLd 2 <host>
[build] rustc 2 <host> -> std 2 <target1>
[dist] rustc 2 <host> -> std 2 <target1>
[dist] rustc 1 <host> -> rustc-dev 2 <target1>
[dist] rustc 1 <host> -> analysis 2 <target1>
[dist] src <>
[build] rustc 1 <host> -> cargo 2 <target1>
[dist] rustc 1 <host> -> cargo 2 <target1>
[build] rustc 1 <host> -> rust-analyzer 2 <target1>
[dist] rustc 1 <host> -> rust-analyzer 2 <target1>
[build] rustc 1 <host> -> rustfmt 2 <target1>
[build] rustc 1 <host> -> cargo-fmt 2 <target1>
[dist] rustc 1 <host> -> rustfmt 2 <target1>
[build] rustc 1 <host> -> clippy-driver 2 <target1>
[build] rustc 1 <host> -> cargo-clippy 2 <target1>
[dist] rustc 1 <host> -> clippy 2 <target1>
[build] rustc 1 <host> -> miri 2 <target1>
[build] rustc 1 <host> -> cargo-miri 2 <target1>
[dist] rustc 1 <host> -> miri 2 <target1>
[build] rustc 1 <host> -> LlvmBitcodeLinker 2 <target1>
[dist] rustc 1 <host> -> std 1 <target1>
[dist] rustc 1 <host> -> extended 2 <target1>
[dist] reproducible-artifacts <target1>
");
}
/// Enable dist cranelift tarball by default with `x dist` if cranelift is enabled in
/// `rust.codegen-backends`.
#[test]
fn dist_cranelift_by_default() {
let ctx = TestCtx::new();
@ -2426,6 +2495,21 @@ impl ExecutedSteps {
}
}
/// Make sure that no metadata matches the given `func`.
#[track_caller]
fn assert_no_match<F>(&self, func: F)
where
F: Fn(StepMetadata) -> bool,
{
for metadata in self.steps.iter().filter_map(|s| s.metadata.clone()) {
if func(metadata.clone()) {
panic!(
"Metadata {metadata:?} was found, even though it should have not been present"
);
}
}
}
fn contains(&self, metadata: &StepMetadata) -> bool {
self.steps
.iter()