keep the same config values in stage0 between invocations
This commit allows users to change the contents of the "config" key in src/stage0.json without having it overridden the next time the bump-stage0 tool is executed.
This commit is contained in:
parent
a0411e2bfe
commit
c1a0f49e9f
3 changed files with 31 additions and 20 deletions
|
@ -1043,7 +1043,7 @@ def bootstrap(help_triggered):
|
||||||
build.checksums_sha256 = data["checksums_sha256"]
|
build.checksums_sha256 = data["checksums_sha256"]
|
||||||
build.stage0_compiler = Stage0Toolchain(data["compiler"])
|
build.stage0_compiler = Stage0Toolchain(data["compiler"])
|
||||||
|
|
||||||
build.set_dist_environment(data["dist_server"])
|
build.set_dist_environment(data["config"]["dist_server"])
|
||||||
|
|
||||||
build.build = args.build or build.build_triple()
|
build.build = args.build or build.build_triple()
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"__comment": "Generated by `./x.py run src/tools/bump-stage0`. Run that command again to update the bootstrap compiler.",
|
"__comment": "Generated by `./x.py run src/tools/bump-stage0`. Run that command again to update the bootstrap compiler.",
|
||||||
"dist_server": "https://static.rust-lang.org",
|
"config": {
|
||||||
|
"dist_server": "https://static.rust-lang.org"
|
||||||
|
},
|
||||||
"compiler": {
|
"compiler": {
|
||||||
"date": "2022-05-20",
|
"date": "2022-05-20",
|
||||||
"version": "beta"
|
"version": "beta"
|
||||||
|
|
|
@ -4,11 +4,12 @@ use indexmap::IndexMap;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
|
|
||||||
const DIST_SERVER: &str = "https://static.rust-lang.org";
|
const PATH: &str = "src/stage0.json";
|
||||||
const COMPILER_COMPONENTS: &[&str] = &["rustc", "rust-std", "cargo"];
|
const COMPILER_COMPONENTS: &[&str] = &["rustc", "rust-std", "cargo"];
|
||||||
const RUSTFMT_COMPONENTS: &[&str] = &["rustfmt-preview"];
|
const RUSTFMT_COMPONENTS: &[&str] = &["rustfmt-preview"];
|
||||||
|
|
||||||
struct Tool {
|
struct Tool {
|
||||||
|
config: Config,
|
||||||
channel: Channel,
|
channel: Channel,
|
||||||
version: [u16; 3],
|
version: [u16; 3],
|
||||||
checksums: IndexMap<String, String>,
|
checksums: IndexMap<String, String>,
|
||||||
|
@ -32,18 +33,20 @@ impl Tool {
|
||||||
.try_into()
|
.try_into()
|
||||||
.map_err(|_| anyhow::anyhow!("failed to parse version"))?;
|
.map_err(|_| anyhow::anyhow!("failed to parse version"))?;
|
||||||
|
|
||||||
Ok(Self { channel, version, checksums: IndexMap::new() })
|
let existing: Stage0 = serde_json::from_slice(&std::fs::read(PATH)?)?;
|
||||||
|
|
||||||
|
Ok(Self { channel, version, config: existing.config, checksums: IndexMap::new() })
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_json(mut self) -> Result<(), Error> {
|
fn update_json(mut self) -> Result<(), Error> {
|
||||||
std::fs::write(
|
std::fs::write(
|
||||||
"src/stage0.json",
|
PATH,
|
||||||
format!(
|
format!(
|
||||||
"{}\n",
|
"{}\n",
|
||||||
serde_json::to_string_pretty(&Stage0 {
|
serde_json::to_string_pretty(&Stage0 {
|
||||||
comment: "Generated by `./x.py run src/tools/bump-stage0`. \
|
comment: "Generated by `./x.py run src/tools/bump-stage0`. \
|
||||||
Run that command again to update the bootstrap compiler.",
|
Run that command again to update the bootstrap compiler."
|
||||||
dist_server: DIST_SERVER.into(),
|
.into(),
|
||||||
compiler: self.detect_compiler()?,
|
compiler: self.detect_compiler()?,
|
||||||
rustfmt: self.detect_rustfmt()?,
|
rustfmt: self.detect_rustfmt()?,
|
||||||
checksums_sha256: {
|
checksums_sha256: {
|
||||||
|
@ -51,7 +54,8 @@ impl Tool {
|
||||||
// are added while filling the other struct fields just above this block.
|
// are added while filling the other struct fields just above this block.
|
||||||
self.checksums.sort_keys();
|
self.checksums.sort_keys();
|
||||||
self.checksums
|
self.checksums
|
||||||
}
|
},
|
||||||
|
config: self.config,
|
||||||
})?
|
})?
|
||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
@ -74,7 +78,7 @@ impl Tool {
|
||||||
Channel::Nightly => "beta".to_string(),
|
Channel::Nightly => "beta".to_string(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let manifest = fetch_manifest(&channel)?;
|
let manifest = fetch_manifest(&self.config, &channel)?;
|
||||||
self.collect_checksums(&manifest, COMPILER_COMPONENTS)?;
|
self.collect_checksums(&manifest, COMPILER_COMPONENTS)?;
|
||||||
Ok(Stage0Toolchain {
|
Ok(Stage0Toolchain {
|
||||||
date: manifest.date,
|
date: manifest.date,
|
||||||
|
@ -100,13 +104,13 @@ impl Tool {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
let manifest = fetch_manifest("nightly")?;
|
let manifest = fetch_manifest(&self.config, "nightly")?;
|
||||||
self.collect_checksums(&manifest, RUSTFMT_COMPONENTS)?;
|
self.collect_checksums(&manifest, RUSTFMT_COMPONENTS)?;
|
||||||
Ok(Some(Stage0Toolchain { date: manifest.date, version: "nightly".into() }))
|
Ok(Some(Stage0Toolchain { date: manifest.date, version: "nightly".into() }))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_checksums(&mut self, manifest: &Manifest, components: &[&str]) -> Result<(), Error> {
|
fn collect_checksums(&mut self, manifest: &Manifest, components: &[&str]) -> Result<(), Error> {
|
||||||
let prefix = format!("{}/", DIST_SERVER);
|
let prefix = format!("{}/", self.config.dist_server);
|
||||||
for component in components {
|
for component in components {
|
||||||
let pkg = manifest
|
let pkg = manifest
|
||||||
.pkg
|
.pkg
|
||||||
|
@ -136,10 +140,10 @@ fn main() -> Result<(), Error> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fetch_manifest(channel: &str) -> Result<Manifest, Error> {
|
fn fetch_manifest(config: &Config, channel: &str) -> Result<Manifest, Error> {
|
||||||
Ok(toml::from_slice(&http_get(&format!(
|
Ok(toml::from_slice(&http_get(&format!(
|
||||||
"{}/dist/channel-rust-{}.toml",
|
"{}/dist/channel-rust-{}.toml",
|
||||||
DIST_SERVER, channel
|
config.dist_server, channel
|
||||||
))?)?)
|
))?)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,35 +170,40 @@ enum Channel {
|
||||||
Nightly,
|
Nightly,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
struct Stage0 {
|
struct Stage0 {
|
||||||
#[serde(rename = "__comment")]
|
#[serde(rename = "__comment")]
|
||||||
comment: &'static str,
|
comment: String,
|
||||||
dist_server: String,
|
config: Config,
|
||||||
compiler: Stage0Toolchain,
|
compiler: Stage0Toolchain,
|
||||||
rustfmt: Option<Stage0Toolchain>,
|
rustfmt: Option<Stage0Toolchain>,
|
||||||
checksums_sha256: IndexMap<String, String>,
|
checksums_sha256: IndexMap<String, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
|
struct Config {
|
||||||
|
dist_server: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
struct Stage0Toolchain {
|
struct Stage0Toolchain {
|
||||||
date: String,
|
date: String,
|
||||||
version: String,
|
version: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
struct Manifest {
|
struct Manifest {
|
||||||
date: String,
|
date: String,
|
||||||
pkg: HashMap<String, ManifestPackage>,
|
pkg: HashMap<String, ManifestPackage>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
struct ManifestPackage {
|
struct ManifestPackage {
|
||||||
version: String,
|
version: String,
|
||||||
target: HashMap<String, ManifestTargetPackage>,
|
target: HashMap<String, ManifestTargetPackage>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
struct ManifestTargetPackage {
|
struct ManifestTargetPackage {
|
||||||
url: Option<String>,
|
url: Option<String>,
|
||||||
hash: Option<String>,
|
hash: Option<String>,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue