tool, old_state, state
);
} else {
+ // This warning only appears in the logs, which most
+ // people won't read. It's mostly here for testing and
+ // debugging.
eprintln!(
"warning: Tool `{}` is not test-pass (is `{}`), \
this should be fixed before beta is branched.",
);
}
}
+ // `publish_toolstate.py` is responsible for updating
+ // `latest.json` and creating comments/issues warning people
+ // if there is a regression. That all happens in a separate CI
+ // job on the master branch once the PR has passed all tests
+ // on the `auto` branch.
}
}
}
if builder.config.channel == "nightly" && env::var_os("TOOLSTATE_PUBLISH").is_some() {
- commit_toolstate_change(&toolstates, in_beta_week);
+ commit_toolstate_change(&toolstates);
}
}
Err(_) => false,
};
if !success {
- panic!("git config key={} value={} successful (status: {:?})", key, value, status);
+ panic!("git config key={} value={} failed (status: {:?})", key, value, status);
}
}
- // If changing anything here, then please check that src/ci/publish_toolstate.sh is up to date
+ // If changing anything here, then please check that `src/ci/publish_toolstate.sh` is up to date
// as well.
git_config("user.email", "7378925+rust-toolstate-update@users.noreply.github.com");
git_config("user.name", "Rust Toolstate Update");
///
/// * See <https://help.github.com/articles/about-commit-email-addresses/>
/// if a private email by GitHub is wanted.
-fn commit_toolstate_change(current_toolstate: &ToolstateData, in_beta_week: bool) {
- let old_toolstate = read_old_toolstate();
-
+fn commit_toolstate_change(current_toolstate: &ToolstateData) {
let message = format!("({} CI update)", OS.expect("linux/windows only"));
let mut success = false;
for _ in 1..=5 {
- // Update the toolstate results (the new commit-to-toolstate mapping) in the toolstate repo.
- change_toolstate(¤t_toolstate, &old_toolstate, in_beta_week);
+ // Upload the test results (the new commit-to-toolstate mapping) to the toolstate repo.
+ // This does *not* change the "current toolstate"; that only happens post-landing
+ // via `src/ci/docker/publish_toolstate.sh`.
+ publish_test_results(¤t_toolstate);
// `git commit` failing means nothing to commit.
let status = t!(Command::new("git")
}
}
-fn change_toolstate(
- current_toolstate: &ToolstateData,
- old_toolstate: &[RepoState],
- in_beta_week: bool,
-) {
- let mut regressed = false;
- for repo_state in old_toolstate {
- let tool = &repo_state.tool;
- let state = repo_state.state();
- let new_state = current_toolstate[tool.as_str()];
-
- if new_state != state {
- eprintln!("The state of `{}` has changed from `{}` to `{}`", tool, state, new_state);
- if new_state < state {
- if !NIGHTLY_TOOLS.iter().any(|(name, _path)| name == tool) {
- regressed = true;
- }
- }
- }
- }
-
- if regressed && in_beta_week {
- std::process::exit(1);
- }
-
+/// Updates the "history" files with the latest results.
+///
+/// These results will later be promoted to `latest.json` by the
+/// `publish_toolstate.py` script if the PR passes all tests and is merged to
+/// master.
+fn publish_test_results(current_toolstate: &ToolstateData) {
let commit = t!(std::process::Command::new("git").arg("rev-parse").arg("HEAD").output());
let commit = t!(String::from_utf8(commit.stdout));