summaryrefslogtreecommitdiffstats
path: root/src/bootstrap/test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/test.rs')
-rw-r--r--src/bootstrap/test.rs367
1 files changed, 198 insertions, 169 deletions
diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs
index eed7a584b..d0d62db08 100644
--- a/src/bootstrap/test.rs
+++ b/src/bootstrap/test.rs
@@ -4,6 +4,7 @@
//! our CI.
use std::env;
+use std::ffi::OsStr;
use std::ffi::OsString;
use std::fs;
use std::iter;
@@ -48,32 +49,6 @@ const MIR_OPT_BLESS_TARGET_MAPPING: &[(&str, &str)] = &[
// build for, so there is no entry for "aarch64-apple-darwin" here.
];
-fn try_run(builder: &Builder<'_>, cmd: &mut Command) -> Result<(), ()> {
- if !builder.fail_fast {
- if let Err(e) = builder.try_run(cmd) {
- let mut failures = builder.delayed_failures.borrow_mut();
- failures.push(format!("{:?}", cmd));
- return Err(e);
- }
- } else {
- builder.run(cmd);
- }
- Ok(())
-}
-
-fn try_run_quiet(builder: &Builder<'_>, cmd: &mut Command) -> bool {
- if !builder.fail_fast {
- if !builder.try_run_quiet(cmd) {
- let mut failures = builder.delayed_failures.borrow_mut();
- failures.push(format!("{:?}", cmd));
- return false;
- }
- } else {
- builder.run_quiet(cmd);
- }
- true
-}
-
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct CrateBootstrap {
path: Interned<PathBuf>,
@@ -117,14 +92,8 @@ impl Step for CrateBootstrap {
SourceType::InTree,
&[],
);
- builder.info(&format!(
- "{} {} stage0 ({})",
- builder.kind.description(),
- path,
- bootstrap_host,
- ));
let crate_name = path.rsplit_once('/').unwrap().1;
- run_cargo_test(cargo, &[], &[], crate_name, compiler, bootstrap_host, builder);
+ run_cargo_test(cargo, &[], &[], crate_name, crate_name, compiler, bootstrap_host, builder);
}
}
@@ -154,15 +123,16 @@ impl Step for Linkcheck {
if (hosts != targets) && !hosts.is_empty() && !targets.is_empty() {
panic!(
"Linkcheck currently does not support builds with different hosts and targets.
-You can skip linkcheck with --exclude src/tools/linkchecker"
+You can skip linkcheck with --skip src/tools/linkchecker"
);
}
- builder.info(&format!("Linkcheck ({})", host));
+ builder.info(&format!("Linkcheck ({host})"));
// Test the linkchecker itself.
let bootstrap_host = builder.config.build;
let compiler = builder.compiler(0, bootstrap_host);
+
let cargo = tool::prepare_tool_cargo(
builder,
compiler,
@@ -173,7 +143,16 @@ You can skip linkcheck with --exclude src/tools/linkchecker"
SourceType::InTree,
&[],
);
- run_cargo_test(cargo, &[], &[], "linkchecker", compiler, bootstrap_host, builder);
+ run_cargo_test(
+ cargo,
+ &[],
+ &[],
+ "linkchecker",
+ "linkchecker self tests",
+ compiler,
+ bootstrap_host,
+ builder,
+ );
if builder.doc_tests == DocTests::No {
return;
@@ -182,13 +161,14 @@ You can skip linkcheck with --exclude src/tools/linkchecker"
// Build all the default documentation.
builder.default_doc(&[]);
+ // Build the linkchecker before calling `msg`, since GHA doesn't support nested groups.
+ let mut linkchecker = builder.tool_cmd(Tool::Linkchecker);
+
// Run the linkchecker.
+ let _guard =
+ builder.msg(Kind::Test, compiler.stage, "Linkcheck", bootstrap_host, bootstrap_host);
let _time = util::timeit(&builder);
- try_run(
- builder,
- builder.tool_cmd(Tool::Linkchecker).arg(builder.out.join(host.triple).join("doc")),
- )
- .unwrap();
+ builder.run_delaying_failure(linkchecker.arg(builder.out.join(host.triple).join("doc")));
}
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
@@ -241,8 +221,9 @@ impl Step for HtmlCheck {
builder.default_doc(&[]);
builder.ensure(crate::doc::Rustc::new(builder.top_stage, self.target, builder));
- try_run(builder, builder.tool_cmd(Tool::HtmlChecker).arg(builder.doc_out(self.target)))
- .unwrap();
+ builder.run_delaying_failure(
+ builder.tool_cmd(Tool::HtmlChecker).arg(builder.doc_out(self.target)),
+ );
}
}
@@ -281,15 +262,13 @@ impl Step for Cargotest {
let _time = util::timeit(&builder);
let mut cmd = builder.tool_cmd(Tool::CargoTest);
- try_run(
- builder,
+ builder.run_delaying_failure(
cmd.arg(&cargo)
.arg(&out_dir)
.args(builder.config.test_args())
.env("RUSTC", builder.rustc(compiler))
.env("RUSTDOC", builder.rustdoc(compiler)),
- )
- .unwrap();
+ );
}
}
@@ -340,7 +319,7 @@ impl Step for Cargo {
#[cfg(feature = "build-metrics")]
builder.metrics.begin_test_suite(
- crate::metrics::TestSuiteMetadata::CargoPackage {
+ build_helper::metrics::TestSuiteMetadata::CargoPackage {
crates: vec!["cargo".into()],
target: self.host.triple.to_string(),
host: self.host.triple.to_string(),
@@ -409,7 +388,7 @@ impl Step for RustAnalyzer {
cargo.env("SKIP_SLOW_TESTS", "1");
cargo.add_rustc_lib_path(builder, compiler);
- run_cargo_test(cargo, &[], &[], "rust-analyzer", compiler, host, builder);
+ run_cargo_test(cargo, &[], &[], "rust-analyzer", "rust-analyzer", compiler, host, builder);
}
}
@@ -458,7 +437,7 @@ impl Step for Rustfmt {
cargo.add_rustc_lib_path(builder, compiler);
- run_cargo_test(cargo, &[], &[], "rustfmt", compiler, host, builder);
+ run_cargo_test(cargo, &[], &[], "rustfmt", "rustfmt", compiler, host, builder);
}
}
@@ -506,7 +485,16 @@ impl Step for RustDemangler {
cargo.env("RUST_DEMANGLER_DRIVER_PATH", rust_demangler);
cargo.add_rustc_lib_path(builder, compiler);
- run_cargo_test(cargo, &[], &[], "rust-demangler", compiler, host, builder);
+ run_cargo_test(
+ cargo,
+ &[],
+ &[],
+ "rust-demangler",
+ "rust-demangler",
+ compiler,
+ host,
+ builder,
+ );
}
}
@@ -550,6 +538,13 @@ impl Miri {
cargo.env("RUST_BACKTRACE", "1");
let mut cargo = Command::from(cargo);
+ let _guard = builder.msg(
+ Kind::Build,
+ compiler.stage + 1,
+ "miri sysroot",
+ compiler.host,
+ compiler.host,
+ );
builder.run(&mut cargo);
// # Determine where Miri put its sysroot.
@@ -563,7 +558,7 @@ impl Miri {
if builder.config.dry_run() {
String::new()
} else {
- builder.verbose(&format!("running: {:?}", cargo));
+ builder.verbose(&format!("running: {cargo:?}"));
let out =
cargo.output().expect("We already ran `cargo miri setup` before and that worked");
assert!(out.status.success(), "`cargo miri setup` returned with non-0 exit code");
@@ -571,7 +566,7 @@ impl Miri {
let stdout = String::from_utf8(out.stdout)
.expect("`cargo miri setup` stdout is not valid UTF-8");
let sysroot = stdout.trim_end();
- builder.verbose(&format!("`cargo miri setup --print-sysroot` said: {:?}", sysroot));
+ builder.verbose(&format!("`cargo miri setup --print-sysroot` said: {sysroot:?}"));
sysroot.to_owned()
}
}
@@ -627,16 +622,14 @@ impl Step for Miri {
SourceType::InTree,
&[],
);
+ let _guard = builder.msg_sysroot_tool(Kind::Test, compiler.stage, "miri", host, host);
+
cargo.add_rustc_lib_path(builder, compiler);
// miri tests need to know about the stage sysroot
cargo.env("MIRI_SYSROOT", &miri_sysroot);
cargo.env("MIRI_HOST_SYSROOT", sysroot);
cargo.env("MIRI", &miri);
- // propagate --bless
- if builder.config.cmd.bless() {
- cargo.env("MIRI_BLESS", "Gesundheit");
- }
// Set the target.
cargo.env("MIRI_TEST_TARGET", target.rustc_target_arg());
@@ -654,8 +647,8 @@ impl Step for Miri {
cargo.env("MIRIFLAGS", "-O -Zmir-opt-level=4 -Cdebug-assertions=yes");
// Optimizations can change backtraces
cargo.env("MIRI_SKIP_UI_CHECKS", "1");
- // `MIRI_SKIP_UI_CHECKS` and `MIRI_BLESS` are incompatible
- cargo.env_remove("MIRI_BLESS");
+ // `MIRI_SKIP_UI_CHECKS` and `RUSTC_BLESS` are incompatible
+ cargo.env_remove("RUSTC_BLESS");
// Optimizations can change error locations and remove UB so don't run `fail` tests.
cargo.args(&["tests/pass", "tests/panic"]);
@@ -739,7 +732,16 @@ impl Step for CompiletestTest {
&[],
);
cargo.allow_features("test");
- run_cargo_test(cargo, &[], &[], "compiletest", compiler, host, builder);
+ run_cargo_test(
+ cargo,
+ &[],
+ &[],
+ "compiletest",
+ "compiletest self test",
+ compiler,
+ host,
+ builder,
+ );
}
}
@@ -790,18 +792,16 @@ impl Step for Clippy {
cargo.add_rustc_lib_path(builder, compiler);
let mut cargo = prepare_cargo_test(cargo, &[], &[], "clippy", compiler, host, builder);
- // propagate --bless
- if builder.config.cmd.bless() {
- cargo.env("BLESS", "Gesundheit");
- }
+ let _guard = builder.msg_sysroot_tool(Kind::Test, compiler.stage, "clippy", host, host);
- if builder.try_run(&mut cargo).is_ok() {
+ #[allow(deprecated)] // Clippy reports errors if it blessed the outputs
+ if builder.config.try_run(&mut cargo).is_ok() {
// The tests succeeded; nothing to do.
return;
}
if !builder.config.cmd.bless() {
- crate::detail_exit_macro!(1);
+ crate::exit!(1);
}
}
}
@@ -855,7 +855,7 @@ impl Step for RustdocTheme {
util::lld_flag_no_threads(self.compiler.host.contains("windows")),
);
}
- try_run(builder, &mut cmd).unwrap();
+ builder.run_delaying_failure(&mut cmd);
}
}
@@ -870,7 +870,8 @@ impl Step for RustdocJSStd {
const ONLY_HOSTS: bool = true;
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
- run.suite_path("tests/rustdoc-js-std")
+ let default = run.builder.config.nodejs.is_some();
+ run.suite_path("tests/rustdoc-js-std").default_condition(default)
}
fn make_run(run: RunConfig<'_>) {
@@ -878,38 +879,42 @@ impl Step for RustdocJSStd {
}
fn run(self, builder: &Builder<'_>) {
- if let Some(ref nodejs) = builder.config.nodejs {
- let mut command = Command::new(nodejs);
- command
- .arg(builder.src.join("src/tools/rustdoc-js/tester.js"))
- .arg("--crate-name")
- .arg("std")
- .arg("--resource-suffix")
- .arg(&builder.version)
- .arg("--doc-folder")
- .arg(builder.doc_out(self.target))
- .arg("--test-folder")
- .arg(builder.src.join("tests/rustdoc-js-std"));
- for path in &builder.paths {
- if let Some(p) =
- util::is_valid_test_suite_arg(path, "tests/rustdoc-js-std", builder)
- {
- if !p.ends_with(".js") {
- eprintln!("A non-js file was given: `{}`", path.display());
- panic!("Cannot run rustdoc-js-std tests");
- }
- command.arg("--test-file").arg(path);
+ let nodejs =
+ builder.config.nodejs.as_ref().expect("need nodejs to run rustdoc-js-std tests");
+ let mut command = Command::new(nodejs);
+ command
+ .arg(builder.src.join("src/tools/rustdoc-js/tester.js"))
+ .arg("--crate-name")
+ .arg("std")
+ .arg("--resource-suffix")
+ .arg(&builder.version)
+ .arg("--doc-folder")
+ .arg(builder.doc_out(self.target))
+ .arg("--test-folder")
+ .arg(builder.src.join("tests/rustdoc-js-std"));
+ for path in &builder.paths {
+ if let Some(p) = util::is_valid_test_suite_arg(path, "tests/rustdoc-js-std", builder) {
+ if !p.ends_with(".js") {
+ eprintln!("A non-js file was given: `{}`", path.display());
+ panic!("Cannot run rustdoc-js-std tests");
}
+ command.arg("--test-file").arg(path);
}
- builder.ensure(crate::doc::Std::new(
- builder.top_stage,
- self.target,
- DocumentationFormat::HTML,
- ));
- builder.run(&mut command);
- } else {
- builder.info("No nodejs found, skipping \"tests/rustdoc-js-std\" tests");
}
+ builder.ensure(crate::doc::Std::new(
+ builder.top_stage,
+ self.target,
+ builder,
+ DocumentationFormat::HTML,
+ ));
+ let _guard = builder.msg(
+ Kind::Test,
+ builder.top_stage,
+ "rustdoc-js-std",
+ builder.config.build,
+ self.target,
+ );
+ builder.run(&mut command);
}
}
@@ -925,7 +930,8 @@ impl Step for RustdocJSNotStd {
const ONLY_HOSTS: bool = true;
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
- run.suite_path("tests/rustdoc-js")
+ let default = run.builder.config.nodejs.is_some();
+ run.suite_path("tests/rustdoc-js").default_condition(default)
}
fn make_run(run: RunConfig<'_>) {
@@ -934,18 +940,14 @@ impl Step for RustdocJSNotStd {
}
fn run(self, builder: &Builder<'_>) {
- if builder.config.nodejs.is_some() {
- builder.ensure(Compiletest {
- compiler: self.compiler,
- target: self.target,
- mode: "js-doc-test",
- suite: "rustdoc-js",
- path: "tests/rustdoc-js",
- compare_mode: None,
- });
- } else {
- builder.info("No nodejs found, skipping \"tests/rustdoc-js\" tests");
- }
+ builder.ensure(Compiletest {
+ compiler: self.compiler,
+ target: self.target,
+ mode: "js-doc-test",
+ suite: "rustdoc-js",
+ path: "tests/rustdoc-js",
+ compare_mode: None,
+ });
}
}
@@ -1050,6 +1052,13 @@ impl Step for RustdocGUI {
}
let _time = util::timeit(&builder);
+ let _guard = builder.msg_sysroot_tool(
+ Kind::Test,
+ self.compiler.stage,
+ "rustdoc-gui",
+ self.compiler.host,
+ self.target,
+ );
crate::render_tests::try_run_tests(builder, &mut cmd, true);
}
}
@@ -1086,6 +1095,14 @@ impl Step for Tidy {
if builder.config.cmd.bless() {
cmd.arg("--bless");
}
+ if let Some(s) = builder.config.cmd.extra_checks() {
+ cmd.arg(format!("--extra-checks={s}"));
+ }
+ let mut args = std::env::args_os();
+ if let Some(_) = args.find(|arg| arg == OsStr::new("--")) {
+ cmd.arg("--");
+ cmd.args(args);
+ }
if builder.config.channel == "dev" || builder.config.channel == "nightly" {
builder.info("fmt check");
@@ -1096,17 +1113,17 @@ impl Step for Tidy {
error: no `rustfmt` binary found in {PATH}
info: `rust.channel` is currently set to \"{CHAN}\"
help: if you are testing a beta branch, set `rust.channel` to \"beta\" in the `config.toml` file
-help: to skip test's attempt to check tidiness, pass `--exclude src/tools/tidy` to `x.py test`",
+help: to skip test's attempt to check tidiness, pass `--skip src/tools/tidy` to `x.py test`",
PATH = inferred_rustfmt_dir.display(),
CHAN = builder.config.channel,
);
- crate::detail_exit_macro!(1);
+ crate::exit!(1);
}
crate::format::format(&builder, !builder.config.cmd.bless(), &[]);
}
builder.info("tidy check");
- try_run(builder, &mut cmd).unwrap();
+ builder.run_delaying_failure(&mut cmd);
builder.ensure(ExpandYamlAnchors);
@@ -1123,7 +1140,7 @@ help: to skip test's attempt to check tidiness, pass `--exclude src/tools/tidy`
eprintln!(
"x.py completions were changed; run `x.py run generate-completions` to update them"
);
- crate::detail_exit_macro!(1);
+ crate::exit!(1);
}
}
}
@@ -1151,11 +1168,9 @@ impl Step for ExpandYamlAnchors {
/// by the user before committing CI changes.
fn run(self, builder: &Builder<'_>) {
builder.info("Ensuring the YAML anchors in the GitHub Actions config were expanded");
- try_run(
- builder,
+ builder.run_delaying_failure(
&mut builder.tool_cmd(Tool::ExpandYamlAnchors).arg("check").arg(&builder.src),
- )
- .unwrap();
+ );
}
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
@@ -1435,7 +1450,7 @@ help: to test the compiler, use `--stage 1` instead
help: to test the standard library, use `--stage 0 library/std` instead
note: if you're sure you want to do this, please open an issue as to why. In the meantime, you can override this with `COMPILETEST_FORCE_STAGE0=1`."
);
- crate::detail_exit_macro!(1);
+ crate::exit!(1);
}
let mut compiler = self.compiler;
@@ -1572,6 +1587,8 @@ note: if you're sure you want to do this, please open an issue as to why. In the
if let Some(ref nodejs) = builder.config.nodejs {
cmd.arg("--nodejs").arg(nodejs);
+ } else if mode == "js-doc-test" {
+ panic!("need nodejs to run js-doc-test suite");
}
if let Some(ref npm) = builder.config.npm {
cmd.arg("--npm").arg(npm);
@@ -1642,7 +1659,7 @@ note: if you're sure you want to do this, please open an issue as to why. In the
cmd.arg("--run-clang-based-tests-with").arg(clang_exe);
}
- for exclude in &builder.config.exclude {
+ for exclude in &builder.config.skip {
cmd.arg("--skip");
cmd.arg(&exclude);
}
@@ -1827,7 +1844,7 @@ note: if you're sure you want to do this, please open an issue as to why. In the
#[cfg(feature = "build-metrics")]
builder.metrics.begin_test_suite(
- crate::metrics::TestSuiteMetadata::Compiletest {
+ build_helper::metrics::TestSuiteMetadata::Compiletest {
suite: suite.into(),
mode: mode.into(),
compare_mode: None,
@@ -1852,7 +1869,7 @@ note: if you're sure you want to do this, please open an issue as to why. In the
#[cfg(feature = "build-metrics")]
builder.metrics.begin_test_suite(
- crate::metrics::TestSuiteMetadata::Compiletest {
+ build_helper::metrics::TestSuiteMetadata::Compiletest {
suite: suite.into(),
mode: mode.into(),
compare_mode: Some(compare_mode.into()),
@@ -1893,14 +1910,6 @@ impl Step for BookTest {
///
/// This uses the `rustdoc` that sits next to `compiler`.
fn run(self, builder: &Builder<'_>) {
- let host = self.compiler.host;
- let _guard = builder.msg(
- Kind::Test,
- self.compiler.stage,
- &format!("book {}", self.name),
- host,
- host,
- );
// External docs are different from local because:
// - Some books need pre-processing by mdbook before being tested.
// - They need to save their state to toolstate.
@@ -1943,12 +1952,12 @@ impl BookTest {
let _guard = builder.msg(
Kind::Test,
compiler.stage,
- format_args!("rustbook {}", self.path.display()),
+ format_args!("mdbook {}", self.path.display()),
compiler.host,
compiler.host,
);
let _time = util::timeit(&builder);
- let toolstate = if try_run(builder, &mut rustbook_cmd).is_ok() {
+ let toolstate = if builder.run_delaying_failure(&mut rustbook_cmd) {
ToolState::TestPass
} else {
ToolState::TestFail
@@ -1959,8 +1968,12 @@ impl BookTest {
/// This runs `rustdoc --test` on all `.md` files in the path.
fn run_local_doc(self, builder: &Builder<'_>) {
let compiler = self.compiler;
+ let host = self.compiler.host;
- builder.ensure(compile::Std::new(compiler, compiler.host));
+ builder.ensure(compile::Std::new(compiler, host));
+
+ let _guard =
+ builder.msg(Kind::Test, compiler.stage, &format!("book {}", self.name), host, host);
// Do a breadth-first traversal of the `src/doc` directory and just run
// tests for all files that end in `*.md`
@@ -2074,10 +2087,11 @@ impl Step for ErrorIndex {
let mut tool = tool::ErrorIndex::command(builder);
tool.arg("markdown").arg(&output);
- let _guard =
+ let guard =
builder.msg(Kind::Test, compiler.stage, "error-index", compiler.host, compiler.host);
let _time = util::timeit(&builder);
builder.run_quiet(&mut tool);
+ drop(guard);
// The tests themselves need to link to std, so make sure it is
// available.
builder.ensure(compile::Std::new(compiler, compiler.host));
@@ -2106,9 +2120,9 @@ fn markdown_test(builder: &Builder<'_>, compiler: Compiler, markdown: &Path) ->
cmd.arg("--test-args").arg(test_args);
if builder.config.verbose_tests {
- try_run(builder, &mut cmd).is_ok()
+ builder.run_delaying_failure(&mut cmd)
} else {
- try_run_quiet(builder, &mut cmd)
+ builder.run_quiet_delaying_failure(&mut cmd)
}
}
@@ -2134,7 +2148,7 @@ impl Step for RustcGuide {
let src = builder.src.join(relative_path);
let mut rustbook_cmd = builder.tool_cmd(Tool::Rustbook);
- let toolstate = if try_run(builder, rustbook_cmd.arg("linkcheck").arg(&src)).is_ok() {
+ let toolstate = if builder.run_delaying_failure(rustbook_cmd.arg("linkcheck").arg(&src)) {
ToolState::TestPass
} else {
ToolState::TestFail
@@ -2185,11 +2199,12 @@ impl Step for CrateLibrustc {
/// Given a `cargo test` subcommand, add the appropriate flags and run it.
///
/// Returns whether the test succeeded.
-fn run_cargo_test(
+fn run_cargo_test<'a>(
cargo: impl Into<Command>,
libtest_args: &[&str],
crates: &[Interned<String>],
primary_crate: &str,
+ description: impl Into<Option<&'a str>>,
compiler: Compiler,
target: TargetSelection,
builder: &Builder<'_>,
@@ -2197,10 +2212,13 @@ fn run_cargo_test(
let mut cargo =
prepare_cargo_test(cargo, libtest_args, crates, primary_crate, compiler, target, builder);
let _time = util::timeit(&builder);
+ let _group = description.into().and_then(|what| {
+ builder.msg_sysroot_tool(Kind::Test, compiler.stage, what, compiler.host, target)
+ });
#[cfg(feature = "build-metrics")]
builder.metrics.begin_test_suite(
- crate::metrics::TestSuiteMetadata::CargoPackage {
+ build_helper::metrics::TestSuiteMetadata::CargoPackage {
crates: crates.iter().map(|c| c.to_string()).collect(),
target: target.triple.to_string(),
host: compiler.host.triple.to_string(),
@@ -2223,9 +2241,11 @@ fn prepare_cargo_test(
) -> Command {
let mut cargo = cargo.into();
- // If bless is passed, give downstream crates a way to use it
- if builder.config.cmd.bless() {
- cargo.env("RUSTC_BLESS", "1");
+ // Propegate `--bless` if it has not already been set/unset
+ // Any tools that want to use this should bless if `RUSTC_BLESS` is set to
+ // anything other than `0`.
+ if builder.config.cmd.bless() && !cargo.get_envs().any(|v| v.0 == "RUSTC_BLESS") {
+ cargo.env("RUSTC_BLESS", "Gesundheit");
}
// Pass in some standard flags then iterate over the graph we've discovered
@@ -2348,7 +2368,7 @@ impl Step for Crate {
// `std_cargo` actually does the wrong thing: it passes `--sysroot build/host/stage2`,
// but we want to use the force-recompile std we just built in `build/host/stage2-test-sysroot`.
// Override it.
- if builder.download_rustc() {
+ if builder.download_rustc() && compiler.stage > 0 {
let sysroot = builder
.out
.join(compiler.host.triple)
@@ -2362,14 +2382,16 @@ impl Step for Crate {
_ => panic!("can only test libraries"),
};
- let _guard = builder.msg(
- builder.kind,
- compiler.stage,
- crate_description(&self.crates),
- compiler.host,
+ run_cargo_test(
+ cargo,
+ &[],
+ &self.crates,
+ &self.crates[0],
+ &*crate_description(&self.crates),
+ compiler,
target,
+ builder,
);
- run_cargo_test(cargo, &[], &self.crates, &self.crates[0], compiler, target, builder);
}
}
@@ -2462,18 +2484,12 @@ impl Step for CrateRustdoc {
dylib_path.insert(0, PathBuf::from(&*libdir));
cargo.env(dylib_path_var(), env::join_paths(&dylib_path).unwrap());
- let _guard = builder.msg_sysroot_tool(
- builder.kind,
- compiler.stage,
- "rustdoc",
- compiler.host,
- target,
- );
run_cargo_test(
cargo,
&[],
&[INTERNER.intern_str("rustdoc:0.0.0")],
"rustdoc",
+ "rustdoc",
compiler,
target,
builder,
@@ -2529,13 +2545,12 @@ impl Step for CrateRustdocJsonTypes {
&[]
};
- let _guard =
- builder.msg(builder.kind, compiler.stage, "rustdoc-json-types", compiler.host, target);
run_cargo_test(
cargo,
libtest_args,
&[INTERNER.intern_str("rustdoc-json-types")],
"rustdoc-json-types",
+ "rustdoc-json-types",
compiler,
target,
builder,
@@ -2574,7 +2589,7 @@ impl Step for RemoteCopyLibs {
builder.ensure(compile::Std::new(compiler, target));
- builder.info(&format!("REMOTE copy libs to emulator ({})", target));
+ builder.info(&format!("REMOTE copy libs to emulator ({target})"));
let server = builder.ensure(tool::RemoteTestServer { compiler, target });
@@ -2676,6 +2691,10 @@ impl Step for Bootstrap {
/// Tests the build system itself.
fn run(self, builder: &Builder<'_>) {
+ let host = builder.config.build;
+ let compiler = builder.compiler(0, host);
+ let _guard = builder.msg(Kind::Test, 0, "bootstrap", host, host);
+
let mut check_bootstrap = Command::new(&builder.python());
check_bootstrap
.args(["-m", "unittest", "bootstrap_test.py"])
@@ -2684,10 +2703,8 @@ impl Step for Bootstrap {
.current_dir(builder.src.join("src/bootstrap/"));
// NOTE: we intentionally don't pass test_args here because the args for unittest and cargo test are mutually incompatible.
// Use `python -m unittest` manually if you want to pass arguments.
- try_run(builder, &mut check_bootstrap).unwrap();
+ builder.run_delaying_failure(&mut check_bootstrap);
- let host = builder.config.build;
- let compiler = builder.compiler(0, host);
let mut cmd = Command::new(&builder.initial_cargo);
cmd.arg("test")
.current_dir(builder.src.join("src/bootstrap"))
@@ -2704,7 +2721,7 @@ impl Step for Bootstrap {
}
// rustbuild tests are racy on directory creation so just run them one at a time.
// Since there's not many this shouldn't be a problem.
- run_cargo_test(cmd, &["--test-threads=1"], &[], "bootstrap", compiler, host, builder);
+ run_cargo_test(cmd, &["--test-threads=1"], &[], "bootstrap", None, compiler, host, builder);
}
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
@@ -2755,8 +2772,14 @@ impl Step for TierCheck {
cargo.arg("--verbose");
}
- builder.info("platform support check");
- try_run(builder, &mut cargo.into()).unwrap();
+ let _guard = builder.msg(
+ Kind::Test,
+ self.compiler.stage,
+ "platform support check",
+ self.compiler.host,
+ self.compiler.host,
+ );
+ builder.run_delaying_failure(&mut cargo.into());
}
}
@@ -2803,8 +2826,6 @@ impl Step for RustInstaller {
/// Ensure the version placeholder replacement tool builds
fn run(self, builder: &Builder<'_>) {
- builder.info("test rust-installer");
-
let bootstrap_host = builder.config.build;
let compiler = builder.compiler(0, bootstrap_host);
let cargo = tool::prepare_tool_cargo(
@@ -2817,7 +2838,15 @@ impl Step for RustInstaller {
SourceType::InTree,
&[],
);
- run_cargo_test(cargo, &[], &[], "installer", compiler, bootstrap_host, builder);
+
+ let _guard = builder.msg(
+ Kind::Test,
+ compiler.stage,
+ "rust-installer",
+ bootstrap_host,
+ bootstrap_host,
+ );
+ run_cargo_test(cargo, &[], &[], "installer", None, compiler, bootstrap_host, builder);
// We currently don't support running the test.sh script outside linux(?) environments.
// Eventually this should likely migrate to #[test]s in rust-installer proper rather than a
@@ -2836,7 +2865,7 @@ impl Step for RustInstaller {
cmd.env("CARGO", &builder.initial_cargo);
cmd.env("RUSTC", &builder.initial_rustc);
cmd.env("TMP_DIR", &tmpdir);
- try_run(builder, &mut cmd).unwrap();
+ builder.run_delaying_failure(&mut cmd);
}
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {