Skip to content

Commit 9138d3b

Browse files
committed
when Miri tests are not passing, do not add Miri component
1 parent 6c1b220 commit 9138d3b

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

Cargo.lock

+1
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ name = "build-manifest"
208208
version = "0.1.0"
209209
dependencies = [
210210
"serde",
211+
"serde_json",
211212
"toml",
212213
]
213214

src/tools/build-manifest/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ edition = "2018"
77
[dependencies]
88
toml = "0.5"
99
serde = { version = "1.0", features = ["derive"] }
10+
serde_json = "1.0"

src/tools/build-manifest/src/main.rs

+19-1
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ use serde::Serialize;
1111

1212
use std::collections::BTreeMap;
1313
use std::env;
14-
use std::fs;
14+
use std::fs::{self, File};
1515
use std::io::{self, Read, Write};
1616
use std::path::{PathBuf, Path};
1717
use std::process::{Command, Stdio};
18+
use std::collections::HashMap;
1819

1920
static HOSTS: &[&str] = &[
2021
"aarch64-unknown-linux-gnu",
@@ -366,6 +367,7 @@ impl Builder {
366367
self.lldb_git_commit_hash = self.git_commit_hash("lldb", "x86_64-unknown-linux-gnu");
367368
self.miri_git_commit_hash = self.git_commit_hash("miri", "x86_64-unknown-linux-gnu");
368369

370+
self.check_toolstate();
369371
self.digest_and_sign();
370372
let manifest = self.build_manifest();
371373
self.write_channel_files(&self.rust_release, &manifest);
@@ -375,6 +377,22 @@ impl Builder {
375377
}
376378
}
377379

380+
/// If a tool does not pass its tests, don't ship it.
381+
/// Right now, we do this only for Miri.
382+
fn check_toolstate(&mut self) {
383+
// Get the toolstate for this rust revision.
384+
let toolstates = File::open(self.input.join("toolstates-linux.json"))
385+
.expect("failed to open toolstates file");
386+
let toolstates: HashMap<String, String> = serde_json::from_reader(&toolstates)
387+
.expect("toolstates file contains malformed JSON");
388+
// Mark some tools as missing based on toolstate.
389+
if toolstates.get("miri").map(|s| &*s as &str) != Some("test-pass") {
390+
println!("Miri tests are not passing, removing component");
391+
self.miri_version = None;
392+
self.miri_git_commit_hash = None;
393+
}
394+
}
395+
378396
/// Hash all files, compute their signatures, and collect the hashes in `self.digests`.
379397
fn digest_and_sign(&mut self) {
380398
for file in t!(self.input.read_dir()).map(|e| t!(e).path()) {

0 commit comments

Comments
 (0)