diff --git a/src/build.rs b/src/build.rs index c76d7bc..9fcb5b3 100644 --- a/src/build.rs +++ b/src/build.rs @@ -38,36 +38,43 @@ impl Display for Toolchain { pub async fn background_builder(db: Db) -> Result<()> { let mut nightly_cache = NightlyCache::default(); loop { - let nightlies = Nightlies::fetch(&mut nightly_cache) - .await - .wrap_err("fetching nightlies")?; - let already_finished = db - .finished_nightlies() - .await - .wrap_err("fetching finished nightlies")?; - - let next = nightlies.select_latest_to_build(&already_finished); - match next { - Some((nightly, mode)) => { - info!(%nightly, %mode, "Building next nightly"); - let result = build_every_target_for_toolchain(&db, &nightly, mode) - .await - .wrap_err_with(|| format!("building targets for toolchain {nightly}")); - if let Err(err) = result { - error!(%nightly, %mode, ?err, "Failed to build nightly"); - db.finish_nightly_as_broken(&nightly, mode) - .await - .wrap_err("marking nightly as broken")?; - } - } - None => { - info!("No new nightly, waiting for an hour to try again"); - tokio::time::sleep(Duration::from_secs(1 * 60 * 60)).await; - } + if let Err(err) = background_builder_inner(&db, &mut nightly_cache).await { + error!("error in background builder: {err}"); } } } +async fn background_builder_inner(db: &Db, nightly_cache: &mut NightlyCache) -> Result<()> { + let nightlies = Nightlies::fetch(nightly_cache) + .await + .wrap_err("fetching nightlies")?; + let already_finished = db + .finished_nightlies() + .await + .wrap_err("fetching finished nightlies")?; + + let next = nightlies.select_latest_to_build(&already_finished); + match next { + Some((nightly, mode)) => { + info!(%nightly, %mode, "Building next nightly"); + let result = build_every_target_for_toolchain(&db, &nightly, mode) + .await + .wrap_err_with(|| format!("building targets for toolchain {nightly}")); + if let Err(err) = result { + error!(%nightly, %mode, ?err, "Failed to build nightly"); + db.finish_nightly_as_broken(&nightly, mode) + .await + .wrap_err("marking nightly as broken")?; + } + } + None => { + info!("No new nightly, waiting for an hour to try again"); + tokio::time::sleep(Duration::from_secs(1 * 60 * 60)).await; + } + } + Ok(()) +} + async fn targets_for_toolchain(toolchain: &Toolchain) -> Result> { let output = Command::new("rustc") .arg(format!("+{toolchain}")) diff --git a/src/nightlies.rs b/src/nightlies.rs index df384ac..7493870 100644 --- a/src/nightlies.rs +++ b/src/nightlies.rs @@ -41,7 +41,7 @@ impl Nightlies { // We probe for their existence. let latest = all .last() - .ok_or_eyre("did not find any nightlies in manifets.txt")?; + .ok_or_eyre("did not find any nightlies in manifests.txt")?; for nightly in guess_more_recent_nightlies(&latest)? { if nightly_exists(&nightly, cache) @@ -62,7 +62,6 @@ impl Nightlies { &self, already_finished: &[FinishedNightly], ) -> Option<(String, BuildMode)> { - dbg!(&self.all[..20]); let already_finished = HashSet::<_, RandomState>::from_iter(already_finished.iter()); self.all