diff --git a/crates/queue-runner/src/builder.rs b/crates/queue-runner/src/builder.rs index f9cdac9..9540349 100644 --- a/crates/queue-runner/src/builder.rs +++ b/crates/queue-runner/src/builder.rs @@ -111,6 +111,7 @@ pub async fn run_nix_build_remote( Ok::<_, CiError>(BuildResult { success: status.success(), + exit_code: status.code(), stdout: stdout_buf, stderr: stderr_buf, output_paths, @@ -131,6 +132,7 @@ pub async fn run_nix_build_remote( pub struct BuildResult { pub success: bool, + pub exit_code: Option, pub stdout: String, pub stderr: String, pub output_paths: Vec, @@ -288,6 +290,7 @@ pub async fn run_nix_build( Ok::<_, CiError>(BuildResult { success: status.success(), + exit_code: status.code(), stdout: stdout_buf, stderr: stderr_buf, output_paths, diff --git a/crates/queue-runner/src/runner_loop.rs b/crates/queue-runner/src/runner_loop.rs index f335f76..618a31b 100644 --- a/crates/queue-runner/src/runner_loop.rs +++ b/crates/queue-runner/src/runner_loop.rs @@ -49,7 +49,7 @@ pub async fn run( if let Err(e) = repo::builds::complete( &pool, build.id, - BuildStatus::Completed, + BuildStatus::Succeeded, None, None, None, @@ -95,7 +95,7 @@ pub async fn run( if let Err(e) = repo::builds::complete( &pool, build.id, - BuildStatus::Completed, + BuildStatus::Succeeded, existing.log_path.as_deref(), existing.build_output_path.as_deref(), None, diff --git a/crates/queue-runner/src/worker.rs b/crates/queue-runner/src/worker.rs index 935c62f..a1f6df8 100644 --- a/crates/queue-runner/src/worker.rs +++ b/crates/queue-runner/src/worker.rs @@ -688,7 +688,7 @@ async fn run_build( repo::builds::complete( pool, build.id, - BuildStatus::Completed, + BuildStatus::Succeeded, log_path.as_deref(), primary_output, None, @@ -730,17 +730,21 @@ async fn run_build( return Ok(()); } + let failure_status = build_result + .exit_code + .map(BuildStatus::from_exit_code) + .unwrap_or(BuildStatus::Failed); repo::builds::complete( pool, build.id, - BuildStatus::Failed, + failure_status, log_path.as_deref(), None, Some(&build_result.stderr), ) .await?; - tracing::warn!(build_id = %build.id, "Build failed"); + tracing::warn!(build_id = %build.id, "Build failed: {:?}", failure_status); } }, Err(e) => { @@ -771,9 +775,7 @@ async fn run_build( // Dispatch notifications after build completion let updated_build = repo::builds::get(pool, build.id).await?; - if updated_build.status == BuildStatus::Completed - || updated_build.status == BuildStatus::Failed - { + if updated_build.status.is_finished() { if let Some((project, commit_hash)) = get_project_for_build(pool, build).await { @@ -787,7 +789,7 @@ async fn run_build( } // Auto-promote channels if all builds in the evaluation are done - if updated_build.status == BuildStatus::Completed + if updated_build.status.is_success() && let Ok(eval) = repo::evaluations::get(pool, build.evaluation_id).await { if let Err(e) =