From d63e982cd924ed4d4fbcbb42b9614fc24a91f211 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Sat, 30 Jul 2022 15:44:37 -0400 Subject: [PATCH 1/1] Discover channel for artifact download When we're downloading based on a CI commit, that can still be -beta- or even -stable-, so we should lookup the channel it was built with. --- src/bootstrap/config.rs | 16 +++++++++++----- src/bootstrap/native.rs | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index c7212ad2c21..4325a237c69 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -1312,6 +1312,13 @@ pub(crate) fn git(&self) -> Command { git } + pub(crate) fn artifact_channel(&self, commit: &str) -> String { + let mut channel = self.git(); + channel.arg("show").arg(format!("{}:src/ci/channel", commit)); + let channel = output(&mut channel); + channel.trim().to_owned() + } + /// Try to find the relative path of `bindir`, otherwise return it in full. pub fn bindir_relative(&self) -> &Path { let bindir = &self.bindir; @@ -1547,8 +1554,7 @@ fn maybe_download_rustfmt(builder: &Builder<'_>) -> Option { fn download_ci_rustc(builder: &Builder<'_>, commit: &str) { builder.verbose(&format!("using downloaded stage2 artifacts from CI (commit {commit})")); - // FIXME: support downloading artifacts from the beta channel - const CHANNEL: &str = "nightly"; + let channel = builder.config.artifact_channel(commit); let host = builder.config.build.triple; let bin_root = builder.out.join(host).join("ci-rustc"); let rustc_stamp = bin_root.join(".rustc-stamp"); @@ -1557,13 +1563,13 @@ fn download_ci_rustc(builder: &Builder<'_>, commit: &str) { if bin_root.exists() { t!(fs::remove_dir_all(&bin_root)); } - let filename = format!("rust-std-{CHANNEL}-{host}.tar.xz"); + let filename = format!("rust-std-{channel}-{host}.tar.xz"); let pattern = format!("rust-std-{host}"); download_ci_component(builder, filename, &pattern, commit); - let filename = format!("rustc-{CHANNEL}-{host}.tar.xz"); + let filename = format!("rustc-{channel}-{host}.tar.xz"); download_ci_component(builder, filename, "rustc", commit); // download-rustc doesn't need its own cargo, it can just use beta's. - let filename = format!("rustc-dev-{CHANNEL}-{host}.tar.xz"); + let filename = format!("rustc-dev-{channel}-{host}.tar.xz"); download_ci_component(builder, filename, "rustc-dev", commit); builder.fix_bin_or_dylib(&bin_root.join("bin").join("rustc")); diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index 01e70b3fb2d..3347246ea8f 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -189,7 +189,8 @@ fn download_ci_llvm(builder: &Builder<'_>, llvm_sha: &str) { } else { &builder.config.stage0_metadata.config.artifacts_server }; - let filename = format!("rust-dev-nightly-{}.tar.xz", builder.build.build.triple); + let channel = builder.config.artifact_channel(llvm_sha); + let filename = format!("rust-dev-{}-{}.tar.xz", channel, builder.build.build.triple); let tarball = rustc_cache.join(&filename); if !tarball.exists() { let help_on_error = "error: failed to download llvm from ci -- 2.44.0