mirror of
https://github.com/Noratrieb/does-it-build.git
synced 2026-01-14 18:35:01 +01:00
Make it more robust
This commit is contained in:
parent
cc4d90e748
commit
7f4c69e51f
2 changed files with 34 additions and 28 deletions
59
src/build.rs
59
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<Vec<String>> {
|
||||
let output = Command::new("rustc")
|
||||
.arg(format!("+{toolchain}"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue