Release failure visibility (#42572)

Closes #ISSUE

Release Notes:

- N/A
This commit is contained in:
Conrad Irwin
2025-11-12 23:11:09 -07:00
committed by GitHub
parent 1936f16c62
commit 045ac6d1b6
7 changed files with 77 additions and 2 deletions

View File

@@ -1,7 +1,8 @@
use gh_workflow::*;
use crate::tasks::workflows::{
release, runners,
release::{self, notify_on_failure},
runners,
steps::{NamedJob, checkout_repo, dependant_job, named},
vars::{self, StepOutput},
};
@@ -11,6 +12,12 @@ pub fn after_release() -> Workflow {
let post_to_discord = post_to_discord(&[&refresh_zed_dev]);
let publish_winget = publish_winget();
let create_sentry_release = create_sentry_release();
let notify_on_failure = notify_on_failure(&[
&refresh_zed_dev,
&post_to_discord,
&publish_winget,
&create_sentry_release,
]);
named::workflow()
.on(Event::default().release(Release::default().types(vec![ReleaseType::Published])))
@@ -18,6 +25,7 @@ pub fn after_release() -> Workflow {
.add_job(post_to_discord.name, post_to_discord.job)
.add_job(publish_winget.name, publish_winget.job)
.add_job(create_sentry_release.name, create_sentry_release.job)
.add_job(notify_on_failure.name, notify_on_failure.job)
}
fn rebuild_releases_page() -> NamedJob {

View File

@@ -28,6 +28,7 @@ pub(crate) fn release() -> Workflow {
let upload_release_assets = upload_release_assets(&[&create_draft_release], &bundle);
let auto_release_preview = auto_release_preview(&[&upload_release_assets]);
let notify_on_failure = notify_on_failure(&[&upload_release_assets, &auto_release_preview]);
named::workflow()
.on(Event::default().push(Push::default().tags(vec!["v*".to_string()])))
@@ -47,6 +48,7 @@ pub(crate) fn release() -> Workflow {
})
.add_job(upload_release_assets.name, upload_release_assets.job)
.add_job(auto_release_preview.name, auto_release_preview.job)
.add_job(notify_on_failure.name, notify_on_failure.job)
}
pub(crate) struct ReleaseBundleJobs {
@@ -177,3 +179,17 @@ fn create_draft_release() -> NamedJob {
.add_step(create_release()),
)
}
pub(crate) fn notify_on_failure(deps: &[&NamedJob]) -> NamedJob {
fn notify_slack() -> Step<Run> {
named::bash(
"curl -X POST -H 'Content-type: application/json'\\\n --data '{\"text\":\"${{ github.workflow }} failed: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\"}' \"$SLACK_WEBHOOK\""
).add_env(("SLACK_WEBHOOK", vars::SLACK_WEBHOOK_WORKFLOW_FAILURES))
}
let job = dependant_job(deps)
.runs_on(runners::LINUX_SMALL)
.cond(Expression::new("failure()"))
.add_step(notify_slack());
named::job(job)
}

View File

@@ -1,7 +1,7 @@
use crate::tasks::workflows::{
nix_build::build_nix,
release::{
ReleaseBundleJobs, create_sentry_release, download_workflow_artifacts,
ReleaseBundleJobs, create_sentry_release, download_workflow_artifacts, notify_on_failure,
prep_release_artifacts,
},
run_bundling::{bundle_linux, bundle_mac, bundle_windows},
@@ -44,6 +44,7 @@ pub fn release_nightly() -> Workflow {
&[&style, &tests],
);
let update_nightly_tag = update_nightly_tag_job(&bundle);
let notify_on_failure = notify_on_failure(&bundle.jobs());
named::workflow()
.on(Event::default()
@@ -63,6 +64,7 @@ pub fn release_nightly() -> Workflow {
.add_job(nix_linux_x86.name, nix_linux_x86.job)
.add_job(nix_mac_arm.name, nix_mac_arm.job)
.add_job(update_nightly_tag.name, update_nightly_tag.job)
.add_job(notify_on_failure.name, notify_on_failure.job)
}
fn check_style() -> NamedJob {

View File

@@ -42,6 +42,7 @@ secret!(ZED_ZIPPY_APP_PRIVATE_KEY);
secret!(DISCORD_WEBHOOK_RELEASE_NOTES);
secret!(WINGET_TOKEN);
secret!(VERCEL_TOKEN);
secret!(SLACK_WEBHOOK_WORKFLOW_FAILURES);
// todo(ci) make these secrets too...
var!(AZURE_SIGNING_ACCOUNT_NAME);