Skip to content

fix(release): bound notarytool --wait so a stuck submission can't eat the whole CI budget#9

Merged
barscn merged 1 commit into
mainfrom
fix/notarize-timeout
Jul 7, 2026
Merged

fix(release): bound notarytool --wait so a stuck submission can't eat the whole CI budget#9
barscn merged 1 commit into
mainfrom
fix/notarize-timeout

Conversation

@barscn

@barscn barscn commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

What happened

The first real Release run (28793472488, tag v0.1.0) ran 6h 0m 27s and was killed at GitHub's hard 6-hour job timeout — not a manual cancel. The last log line is Terminate orphan process: pid (7447) (notarytool): the job was blocked inside notarytool submit --wait the entire time and produced no artifacts.

Notarization happens server-side on Apple's notary service (notarytool --help: "The Notary service will continue processing even if the timeout is reached"), so the submission itself wasn't lost — but --wait had no ceiling, so a submission that wedged In Progress idled the runner to its hard limit.

Fix

  • Scripts/release/notarize.sh — add --timeout 30m to notarytool submit --wait. A healthy submission clears in minutes; if Apple wedges one, notarytool now exits non-zero at 30m so the release fails loudly instead of hanging.
  • .github/workflows/release.yml — add timeout-minutes: 60 on the release job as a backstop for any other step, so nothing can idle to the 6-hour ceiling again.

Verification

  • make check — ✅ (swift-format lint, architecture boundaries, license headers)
  • bash -n Scripts/release/notarize.sh — ✅
  • YAML parses; timeout-minutes: 60 at job scope
  • --timeout 30m confirmed valid against xcrun notarytool submit --help (suffix m = minutes)

After merge

Re-point tag v0.1.0 at the squash-merge commit on main and force-push it to trigger a fresh Release run.

🤖 Generated with Claude Code

… the whole CI budget

A wedged notary submission left `notarytool submit --wait` polling with no ceiling, so the
Release job idled to GitHub's hard 6-hour limit and was killed mid-notarize (its submission
survived on Apple's side, but the run produced nothing). Cap the poll at 30m — Apple keeps
processing server-side regardless — and add a 60m job backstop so a stuck step fails loudly
instead of consuming the full runner budget.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@barscn barscn merged commit 1015b9c into main Jul 7, 2026
1 of 2 checks passed
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