ci: harden the release workflow against a single flaky target - #87
Merged
Conversation
The last release (v1.1.0) was cancelled on the x86_64-apple-darwin build and, because the Release, Homebrew, and crates jobs all wait on the build matrix, every one was skipped. No GitHub Release was created, the Homebrew formula stayed at 1.0.0, and nothing reached crates.io. Build x86_64 macOS by cross-compiling on the arm64 runner and retire the macos-13 Intel runner, which GitHub is deprecating and which is where the last release stalled. The cross-build was verified locally to produce an x86_64 binary with aws-lc-sys and ring compiled in. Decouple the crates.io publish from the binary matrix: it only needs the source, so a flaky binary runner no longer skips it, which is part of why the crate has never shipped. Fail the release loudly if the matrix did not produce all six binaries, so a missing platform cannot slip into a published release or leave the Homebrew formula pointing at a binary that was never uploaded. Add build and job timeouts so a hung runner fails instead of lingering until cancelled.
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prep for cutting 1.2.0. The release automation is wired correctly but has never completed a run, so this fixes the failure mode before #10 (the version bump) is merged.
What went wrong before
The v1.1.0 release was tagged, but its
release.ymlrun was cancelled on thex86_64-apple-darwinbuild (macos-13). Becauserelease(GitHub Release + Homebrew) andcratesbothneeds: build, a cancelled build skipped all three. The result, still visible today:install.shresolvesreleases/latest, which 404s)seamless-glance-distrorepoChanges
Cross-compile x86_64 macOS on the arm64 runner; drop macos-13. GitHub is retiring the Intel macOS runner, and it is exactly where the last release stalled. I verified the cross-build locally on an arm64 Mac, twice (with and without
SDKROOT), against this exact dependency tree,aws-lc-sysandringincluded — it produces a genuineMach-O 64-bit executable x86_64. So this removes the flaky runner without risking the C-dependency build.Decouple crates.io from the binary matrix (
needs: [setup], not[setup, build]). The publish is source-only; gating it on six binary builds meant one flaky Mac runner skipped it. It stayscontinue-on-error, andcargo publishstill compiles the crate first, so it will not push code that does not build.Fail loudly on a missing platform. The release job now asserts all six binaries are present before publishing, so a silent gap cannot ship or leave the Homebrew formula pointing at a binary that was never uploaded.
Timeouts on the build (45m, cold builds of this tree run long), release (20m), and crates (25m) jobs, so a hung runner fails instead of lingering until someone cancels it — which is the state the last release ended in.
fail-fast: falseis kept: one target failing lets the others finish, so a single run surfaces every failure and re-running failed jobs can complete the set.Verification
macos-13runner remains).release-helper.shtargetsfells-code/seamless-glance, so a successful run overwrites the stale distro-URL formula.What I can't verify locally: the full
release.ymlrun itself. GitHub Actions can't run here, so the true test is the first tagged build. Suggested order: merge this, then merge #10 and watch the release run.