fc-queue-runner: map exit codes to extended BuildStatus variants

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ibaa4de9e2c789931df8c67a53528829a6a6a6964
This commit is contained in:
raf 2026-02-16 12:58:45 +03:00
commit 5f09a46d29
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
3 changed files with 14 additions and 9 deletions

View file

@ -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<i32>,
pub stdout: String,
pub stderr: String,
pub output_paths: Vec<String>,
@ -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,

View file

@ -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,

View file

@ -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) =