STAC-25461 report release-branch build failures to Slack via Cerberus - #449
Conversation
|
Follow-up pushed (
Visibility prerequisite: StackVista/pulumi-infra#257 flips both Until #257 lands the notify job annotates and exits 0, so this PR is safe to merge first. |
|
Pushed Without it the soft-fail this PR advertises doesn't actually work. The callers pass That path has never been exercised in CI here: With |
Merging STAC-25461 (PR #449) into this branch produced no textual conflict but a broken workflow: the new `cerberus-notify` job in build-binaries.yml and build-deb.yml declares `needs: godeps-cache`, and this branch splits that job into godeps-cache-amd64 / godeps-cache-arm64. Both files failed actionlint with "needs job godeps-cache which does not exist in this workflow". List both per-arch jobs instead. That also preserves the intent recorded in the STAC-25461 comment -- `needs` lists every job, not just the leaves, so an early cache failure that skips its dependents is still reported to Slack. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replaces GitLab's
notify-on-master-failwith a Cerberus call from GitHub Actions.What
cerberus-notify.yml— onecurlto the Cerberus Lambda withplatform: githubin the context, so it builds GitHub pipeline/commit URLs. Calling convention copied fromcerberus-block-on-master-failinStackVista/stackstate'sci.yml.push:onstackstate-7.78.2added to the three pipeline workflows. They werepull_request+workflow_dispatchonly, so there was no release-branch lane for a notification to hang off.cerberus-notifyjob in each, passing its ownsuitelabel (lint-and-unit-tests,binary-builds,deb-package) so the Slack message names what broke.notify, notblockPer the policy for migrated repos.
action: blocklocks the branch vialock_branch, needs the Cerberus GitHub App installed on the repo, and mutates Pulumi-managed branch protection out from underpulumi-infra. None of that is wanted here — the GitLab job it replaces only notified.Details worth a look
ifgate is justgithub.event_name == 'push'. Thepush:filter already restricts to the release branch, so re-checkinggithub.refwould duplicate the literal in two places that must agree. PRs cannot reach the job.needslists every job, not only the leaves. Ifbuild-debfails,test-deb-renamingandbuild-agent-imageare skipped, not failed —contains(needs.*.result, 'failure')over the leaves alone would miss it..cerberus/cerberus_notify_failure.shis not reused. It is built around GitLab'sCI_*variables and predates theplatformfield. It stays in the tree until GitLab is retired (STAC-25464).docker-public, notxlarge-public— it is acurl. It runs the samests-ci-imagesrunner image as thesmallscale set thatStackVista/stackstate's Cerberus job uses, socurlandjqare present.permissions: {}on the reusable workflow. The payload comes entirely from thegithubcontext; there is no checkout.Prerequisite, not yet satisfied
secrets.CERBERUS_LAMBDA_URLandvars.SLACK_CI_REPORT_CHANNELneed to reach this repo at repo level throughpulumi-infra. Org secrets default tovisibility=private, which excludes this PUBLIC repo — the same constraint STAC-25350 hit for theREGISTRY_*credentials.Until they exist the step emits a
::warning::and exits 0. It deliberately does not fail: the run is already red, and a second red job would read as "Cerberus is broken" rather than "Cerberus is not configured yet". The annotation is the signal.Validation
zizmor --collect=workflows,actions,dependabot .— no findings.Jira: STAC-25461