Skip to content

ci: harden the release workflow against a single flaky target - #87

Merged
Bccorb merged 1 commit into
mainfrom
ci/harden-release-workflow
Jul 20, 2026
Merged

ci: harden the release workflow against a single flaky target#87
Bccorb merged 1 commit into
mainfrom
ci/harden-release-workflow

Conversation

@Bccorb

@Bccorb Bccorb commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

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.yml run was cancelled on the x86_64-apple-darwin build (macos-13). Because release (GitHub Release + Homebrew) and crates both needs: build, a cancelled build skipped all three. The result, still visible today:

  • no GitHub Release exists, even for 1.1.0 (install.sh resolves releases/latest, which 404s)
  • the Homebrew formula is stuck at 1.0.0, still pointing at the retired seamless-glance-distro repo
  • crates.io has zero published versions

Changes

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-sys and ring included — it produces a genuine Mach-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 stays continue-on-error, and cargo publish still 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: false is 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

  • Both YAML files parse; job graph and matrix confirmed (no macos-13 runner remains).
  • The one genuinely risky change, the macOS cross-compile, is verified locally end to end rather than assumed.
  • release-helper.sh targets fells-code/seamless-glance, so a successful run overwrites the stale distro-URL formula.

What I can't verify locally: the full release.yml run 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.

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.
@Bccorb
Bccorb merged commit a92cd24 into main Jul 20, 2026
3 checks passed
@Bccorb
Bccorb deleted the ci/harden-release-workflow branch July 20, 2026 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant