Guard against completely broken nightlies

This commit is contained in:
nora 2024-09-08 12:25:36 +02:00
parent 4671f871a6
commit 5ef63686f3
3 changed files with 24 additions and 4 deletions

View file

@ -0,0 +1,2 @@
ALTER TABLE finished_nightly
ADD COLUMN is_broken BOOLEAN NOT NULL DEFAULT FALSE;

View file

@ -11,7 +11,7 @@ use color_eyre::{
}; };
use futures::StreamExt; use futures::StreamExt;
use tokio::process::Command; use tokio::process::Command;
use tracing::{debug, info}; use tracing::{debug, error, info};
use crate::{ use crate::{
db::{BuildMode, Db, FullBuildInfo, Status}, db::{BuildMode, Db, FullBuildInfo, Status},
@ -38,7 +38,9 @@ impl Display for Toolchain {
pub async fn background_builder(db: Db) -> Result<()> { pub async fn background_builder(db: Db) -> Result<()> {
let mut nightly_cache = NightlyCache::default(); let mut nightly_cache = NightlyCache::default();
loop { loop {
let nightlies = Nightlies::fetch(&mut nightly_cache).await.wrap_err("fetching nightlies")?; let nightlies = Nightlies::fetch(&mut nightly_cache)
.await
.wrap_err("fetching nightlies")?;
let already_finished = db let already_finished = db
.finished_nightlies() .finished_nightlies()
.await .await
@ -48,9 +50,15 @@ pub async fn background_builder(db: Db) -> Result<()> {
match next { match next {
Some((nightly, mode)) => { Some((nightly, mode)) => {
info!(%nightly, %mode, "Building next nightly"); info!(%nightly, %mode, "Building next nightly");
build_every_target_for_toolchain(&db, &nightly, mode) let result = build_every_target_for_toolchain(&db, &nightly, mode)
.await .await
.wrap_err_with(|| format!("building targets for toolchain {nightly}"))?; .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 => { None => {
info!("No new nightly, waiting for an hour to try again"); info!("No new nightly, waiting for an hour to try again");

View file

@ -162,4 +162,14 @@ impl Db {
.wrap_err("inserting finished nightly")?; .wrap_err("inserting finished nightly")?;
Ok(()) Ok(())
} }
pub async fn finish_nightly_as_broken(&self, nightly: &str, mode: BuildMode) -> Result<()> {
sqlx::query("INSERT INTO finished_nightly (nightly, mode, is_broken) VALUES (?, ?, TRUE)")
.bind(nightly)
.bind(mode)
.execute(&self.conn)
.await
.wrap_err("inserting finished broken nightly")?;
Ok(())
}
} }