fc-common: update notifications to handle all BuildStatus variants
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I99db557ae204f3a4ffec6be70386ecc16a6a6964
This commit is contained in:
parent
5f09a46d29
commit
5b7648220c
1 changed files with 60 additions and 13 deletions
|
|
@ -48,8 +48,9 @@ pub async fn dispatch_build_finished(
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Email notification
|
// 5. Email notification
|
||||||
|
let is_failure = !build.status.is_success();
|
||||||
if let Some(ref email_config) = config.email
|
if let Some(ref email_config) = config.email
|
||||||
&& (!email_config.on_failure_only || build.status == BuildStatus::Failed)
|
&& (!email_config.on_failure_only || is_failure)
|
||||||
{
|
{
|
||||||
send_email_notification(email_config, build, project).await;
|
send_email_notification(email_config, build, project).await;
|
||||||
}
|
}
|
||||||
|
|
@ -57,10 +58,18 @@ pub async fn dispatch_build_finished(
|
||||||
|
|
||||||
async fn run_command_notification(cmd: &str, build: &Build, project: &Project) {
|
async fn run_command_notification(cmd: &str, build: &Build, project: &Project) {
|
||||||
let status_str = match build.status {
|
let status_str = match build.status {
|
||||||
BuildStatus::Completed => "success",
|
BuildStatus::Succeeded | BuildStatus::CachedFailure => "success",
|
||||||
BuildStatus::Failed => "failure",
|
BuildStatus::Failed
|
||||||
|
| BuildStatus::DependencyFailed
|
||||||
|
| BuildStatus::FailedWithOutput
|
||||||
|
| BuildStatus::Timeout
|
||||||
|
| BuildStatus::LogLimitExceeded
|
||||||
|
| BuildStatus::NarSizeLimitExceeded
|
||||||
|
| BuildStatus::NonDeterministic => "failure",
|
||||||
BuildStatus::Cancelled => "cancelled",
|
BuildStatus::Cancelled => "cancelled",
|
||||||
_ => "unknown",
|
BuildStatus::Aborted => "aborted",
|
||||||
|
BuildStatus::UnsupportedSystem => "skipped",
|
||||||
|
BuildStatus::Pending | BuildStatus::Running => "pending",
|
||||||
};
|
};
|
||||||
|
|
||||||
let result = tokio::process::Command::new("sh")
|
let result = tokio::process::Command::new("sh")
|
||||||
|
|
@ -107,11 +116,21 @@ async fn set_github_status(
|
||||||
};
|
};
|
||||||
|
|
||||||
let (state, description) = match build.status {
|
let (state, description) = match build.status {
|
||||||
BuildStatus::Completed => ("success", "Build succeeded"),
|
BuildStatus::Succeeded | BuildStatus::CachedFailure => {
|
||||||
BuildStatus::Failed => ("failure", "Build failed"),
|
("success", "Build succeeded")
|
||||||
|
},
|
||||||
|
BuildStatus::Failed
|
||||||
|
| BuildStatus::DependencyFailed
|
||||||
|
| BuildStatus::FailedWithOutput
|
||||||
|
| BuildStatus::NonDeterministic => ("failure", "Build failed"),
|
||||||
BuildStatus::Running => ("pending", "Build in progress"),
|
BuildStatus::Running => ("pending", "Build in progress"),
|
||||||
BuildStatus::Pending => ("pending", "Build queued"),
|
BuildStatus::Pending => ("pending", "Build queued"),
|
||||||
BuildStatus::Cancelled => ("error", "Build cancelled"),
|
BuildStatus::Cancelled => ("error", "Build cancelled"),
|
||||||
|
BuildStatus::Aborted => ("error", "Build aborted"),
|
||||||
|
BuildStatus::Timeout => ("error", "Build timed out"),
|
||||||
|
BuildStatus::UnsupportedSystem => ("error", "Unsupported system"),
|
||||||
|
BuildStatus::LogLimitExceeded => ("error", "Log limit exceeded"),
|
||||||
|
BuildStatus::NarSizeLimitExceeded => ("error", "NAR size limit exceeded"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let url =
|
let url =
|
||||||
|
|
@ -160,11 +179,21 @@ async fn set_gitea_status(
|
||||||
};
|
};
|
||||||
|
|
||||||
let (state, description) = match build.status {
|
let (state, description) = match build.status {
|
||||||
BuildStatus::Completed => ("success", "Build succeeded"),
|
BuildStatus::Succeeded | BuildStatus::CachedFailure => {
|
||||||
BuildStatus::Failed => ("failure", "Build failed"),
|
("success", "Build succeeded")
|
||||||
|
},
|
||||||
|
BuildStatus::Failed
|
||||||
|
| BuildStatus::DependencyFailed
|
||||||
|
| BuildStatus::FailedWithOutput
|
||||||
|
| BuildStatus::NonDeterministic => ("failure", "Build failed"),
|
||||||
BuildStatus::Running => ("pending", "Build in progress"),
|
BuildStatus::Running => ("pending", "Build in progress"),
|
||||||
BuildStatus::Pending => ("pending", "Build queued"),
|
BuildStatus::Pending => ("pending", "Build queued"),
|
||||||
BuildStatus::Cancelled => ("error", "Build cancelled"),
|
BuildStatus::Cancelled => ("error", "Build cancelled"),
|
||||||
|
BuildStatus::Aborted => ("error", "Build aborted"),
|
||||||
|
BuildStatus::Timeout => ("error", "Build timed out"),
|
||||||
|
BuildStatus::UnsupportedSystem => ("error", "Unsupported system"),
|
||||||
|
BuildStatus::LogLimitExceeded => ("error", "Log limit exceeded"),
|
||||||
|
BuildStatus::NarSizeLimitExceeded => ("error", "NAR size limit exceeded"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let url = format!("{base_url}/api/v1/repos/{owner}/{repo}/statuses/{commit}");
|
let url = format!("{base_url}/api/v1/repos/{owner}/{repo}/statuses/{commit}");
|
||||||
|
|
@ -211,11 +240,21 @@ async fn set_gitlab_status(
|
||||||
|
|
||||||
// GitLab uses different state names
|
// GitLab uses different state names
|
||||||
let (state, description) = match build.status {
|
let (state, description) = match build.status {
|
||||||
BuildStatus::Completed => ("success", "Build succeeded"),
|
BuildStatus::Succeeded | BuildStatus::CachedFailure => {
|
||||||
BuildStatus::Failed => ("failed", "Build failed"),
|
("success", "Build succeeded")
|
||||||
|
},
|
||||||
|
BuildStatus::Failed
|
||||||
|
| BuildStatus::DependencyFailed
|
||||||
|
| BuildStatus::FailedWithOutput
|
||||||
|
| BuildStatus::NonDeterministic => ("failed", "Build failed"),
|
||||||
BuildStatus::Running => ("running", "Build in progress"),
|
BuildStatus::Running => ("running", "Build in progress"),
|
||||||
BuildStatus::Pending => ("pending", "Build queued"),
|
BuildStatus::Pending => ("pending", "Build queued"),
|
||||||
BuildStatus::Cancelled => ("canceled", "Build cancelled"),
|
BuildStatus::Cancelled => ("canceled", "Build cancelled"),
|
||||||
|
BuildStatus::Aborted => ("canceled", "Build aborted"),
|
||||||
|
BuildStatus::Timeout => ("failed", "Build timed out"),
|
||||||
|
BuildStatus::UnsupportedSystem => ("skipped", "Unsupported system"),
|
||||||
|
BuildStatus::LogLimitExceeded => ("failed", "Log limit exceeded"),
|
||||||
|
BuildStatus::NarSizeLimitExceeded => ("failed", "NAR size limit exceeded"),
|
||||||
};
|
};
|
||||||
|
|
||||||
// URL-encode the project path for the API
|
// URL-encode the project path for the API
|
||||||
|
|
@ -318,10 +357,18 @@ async fn send_email_notification(
|
||||||
};
|
};
|
||||||
|
|
||||||
let status_str = match build.status {
|
let status_str = match build.status {
|
||||||
BuildStatus::Completed => "SUCCESS",
|
BuildStatus::Succeeded | BuildStatus::CachedFailure => "SUCCESS",
|
||||||
BuildStatus::Failed => "FAILURE",
|
BuildStatus::Failed
|
||||||
|
| BuildStatus::DependencyFailed
|
||||||
|
| BuildStatus::FailedWithOutput
|
||||||
|
| BuildStatus::Timeout
|
||||||
|
| BuildStatus::LogLimitExceeded
|
||||||
|
| BuildStatus::NarSizeLimitExceeded
|
||||||
|
| BuildStatus::NonDeterministic => "FAILURE",
|
||||||
BuildStatus::Cancelled => "CANCELLED",
|
BuildStatus::Cancelled => "CANCELLED",
|
||||||
_ => "UNKNOWN",
|
BuildStatus::Aborted => "ABORTED",
|
||||||
|
BuildStatus::UnsupportedSystem => "UNSUPPORTED",
|
||||||
|
BuildStatus::Pending | BuildStatus::Running => "PENDING",
|
||||||
};
|
};
|
||||||
|
|
||||||
let subject = format!(
|
let subject = format!(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue