Change:
Seems like no nightly was released today. That might be related to Unfortunately I don't think I have access to the logs. Cc
Logs are missing on the server, let me start a manual release...
Well that is odd. You wouldn't know what commit is is using? ( file in the tarball, if I recall correctly.)
Is there a way for me to download the "dist" artifacts for better testing? Right now I am manually grabbing a bunch of files from https://s3-us-west- (and we only get dir listing for alt builds there it seems so I am using those). That's not very convenient at all.
Apparently not all commits are pushed to toolstate ( vs ), for example the latest one () is missing in toolstate .
Reverting the cause in the meantime --
Alternatively we could land which will just skip of the toolstate is not found. That installs a toolchain based on these artifacts, but I don't think it gives me access to the tarballs. FTR, for now I did So we are only committing when the toolstate changed? Ouch. That kills my entire approach :(
It should print the URLs it's downloading though, and you can use to avoid it actually downloading stuff.

Discussion:
name = "build-manifest" version = "0.1.0" dependencies = [ <del> "reqwest", </del> "serde", <del> "serde_json", </del> "toml", ]

} fn run(self, builder: &Builder<'_>) { <del> // This gets called by `promote-release` // (https://github.com/rust-lang/rust-central-station/tree/master/promote-release). </del> let mut cmd = builder.tool_cmd(Tool::BuildManifest); if builder.config.dry_run { return;

let addr = builder.config.dist_upload_addr.as_ref().unwrap_or_else(|| { panic!("nnfailed to specify `dist.upload-addr` in `config.toml`nn") }); <del> let pass = if env::var("BUILD_MANIFEST_DISABLE_SIGNING").is_err() { let file = builder.config.dist_gpg_password_file.as_ref().unwrap_or_else(|| { panic!("nnfailed to specify `dist.gpg-password-file` in `config.toml`nn") }); t!(fs::read_to_string(&file)) } else { String::new() }; </del> <ins> let file = builder.config.dist_gpg_password_file.as_ref().unwrap_or_else(|| { panic!("nnfailed to specify `dist.gpg-password-file` in `config.toml`nn") }); let pass = t!(fs::read_to_string(&file)); </ins> let today = output(Command::new("date").arg("+%Y-%m-%d"));

[dependencies] toml = "0.5" serde = { version = "1.0", features = ["derive"] } <del> serde_json = "1.0" reqwest = "0.9" </del>

<del> //! Build a dist manifest, hash and sign everything. //! This gets called by `promote-release` //! (https://github.com/rust-lang/rust-central-station/tree/master/promote-release) //! via `x.py dist hash-and-sign`; the cmdline arguments are set up //! by rustbuild (in `src/bootstrap/dist.rs`). </del> use toml; use serde::Serialize; use std::collections::BTreeMap; use std::env; use std::fs; <del> use std::io::{self, Read, Write, BufRead, BufReader}; </del> <ins> use std::io::{self, Read, Write}; </ins> use std::path::{PathBuf, Path}; use std::process::{Command, Stdio}; <del> use std::collections::HashMap; </del> static HOSTS: &[&str] = &[ "aarch64-unknown-linux-gnu",

"x86_64-pc-windows-gnu", ]; <del> static TOOLSTATE: &str = "https://raw.githubusercontent.com/rust-lang-nursery/rust-toolstate/master/history/linux.tsv"; </del> #[derive(Serialize)] #[serde(rename_all = "kebab-case")] struct Manifest {

// Do not ask for a passphrase while manually testing let mut passphrase = String::new(); if should_sign { <del> // `x.py` passes the passphrase via stdin. </del> t!(io::stdin().read_to_string(&mut passphrase)); }

self.lldb_git_commit_hash = self.git_commit_hash("lldb", "x86_64-unknown-linux-gnu"); self.miri_git_commit_hash = self.git_commit_hash("miri", "x86_64-unknown-linux-gnu"); <del> self.check_toolstate(); </del> self.digest_and_sign(); let manifest = self.build_manifest(); self.write_channel_files(&self.rust_release, &manifest);

} } <del> /// If a tool does not pass its tests, don't ship it. /// Right now, we do this only for Miri. fn check_toolstate(&mut self) { // Get the toolstate for this rust revision. let rev = self.rust_git_commit_hash.as_ref().expect("failed to determine rust git hash"); let toolstates = reqwest::get(TOOLSTATE).expect("failed to get toolstates"); let toolstates = BufReader::new(toolstates); let toolstate = toolstates.lines() .find_map(|line| { let line = line.expect("failed to read toolstate lines"); let mut pieces = line.splitn(2, 't'); let commit = pieces.next().expect("malformed toolstate line"); if commit != rev { // Not the right commit. return None; } // Return the 2nd piece, the JSON. Some(pieces.next().expect("malformed toolstate line").to_owned()) }) .expect("failed to find toolstate for rust commit"); let toolstate: HashMap<String, String> = serde_json::from_str(&toolstate).expect("toolstate is malformed JSON"); // Mark some tools as missing based on toolstate. if toolstate.get("miri").map(|s| &*s as &str) != Some("test-pass") { println!("Miri tests are not passing, removing component"); self.miri_version = None; self.miri_git_commit_hash = None; } } /// Hash all files, compute their signatures, and collect the hashes in `self.digests`. </del> fn digest_and_sign(&mut self) { for file in t!(self.input.read_dir()).map(|e| t!(e).path()) { let filename = file.file_name().unwrap().to_str().unwrap();

.as_ref() .cloned() .map(|version| (version, true)) <del> .unwrap_or_default(); // `is_present` defaults to `false` here. </del> <ins> .unwrap_or_default(); </ins> <del> // Miri is nightly-only; never ship it for other trains. </del> <ins> // miri needs to build std with xargo, which doesn't allow stable/beta: // <https://github.com/japaric/xargo/pull/204#issuecomment-374888868> </ins> if pkgname == "miri-preview" && self.rust_release != "nightly" { <del> is_present = false; // Pretend the component is entirely missing. </del> <ins> is_present = false; // ignore it </ins> } let targets = targets.iter().map(|name| { if is_present { <del> // The component generally exists, but it might still be missing for this target. </del> let filename = self.filename(pkgname, name); let digest = match self.digests.remove(&filename) { Some(digest) => digest, <del> // This component does not exist for this target -- skip it. </del> None => return (name.to_string(), Target::unavailable()), }; let xz_filename = filename.replace(".tar.gz", ".tar.xz");