Skip to content

ci(release): Developer ID signing + Apple notarization - #5

Merged
maxonary merged 2 commits into
mainfrom
ci/notarize-release
Jul 15, 2026
Merged

ci(release): Developer ID signing + Apple notarization#5
maxonary merged 2 commits into
mainfrom
ci/notarize-release

Conversation

@maxonary

Copy link
Copy Markdown
Owner

Upgrades nudge-release.yml from ad-hoc signing to a proper Developer ID + notarized release.

What it does

  1. Imports the signing cert into a temp keychain and auto-detects the Developer ID Application identity (fails loudly if it's not one — an "Apple Development" cert can't be notarized).
  2. Archives with Developer ID, hardened runtime, and a secure --timestamp.
  3. Submits to Apple's notary service (notarytool submit --wait), staples the ticket, and validates.
  4. Publishes the GitHub release, replacing any existing release/tag for that version (so a notarized run supersedes an earlier ad-hoc one).

Recipients no longer need the xattr -dr com.apple.quarantine Gatekeeper dance.

Verified via a live dispatch (run on this branch)

  • ✅ Cert import — the secret is a valid Developer ID Application cert
  • ✅ Developer ID signing + hardened runtime
  • ✅ notarytool auth (Apple ID + app-specific password + team all accepted)
  • ❌ Notarization itself → HTTP 403: "A required agreement is missing or has expired."

Action required (account-holder, one-time)

The 403 is an Apple Developer account issue, not CI: a legal agreement needs accepting.

  1. Sign in at developer.apple.com/account (or App Store Connect) as Account Holder/Admin for team Q37KAF726J.
  2. Accept the pending Apple Developer Program License Agreement (look for a "Review Agreement" banner).
  3. Then re-run the release — it'll notarize and replace the current ad-hoc v0.5.0.

🤖 Generated with Claude Code

maxonary and others added 2 commits July 15, 2026 15:17
Replace ad-hoc signing with a proper Developer ID release: import the
signing cert into a temp keychain, archive with the Developer ID Application
identity + hardened runtime + secure timestamp, submit to Apple's notary
service (notarytool --wait), staple the ticket, then publish. No Gatekeeper
xattr dance needed for recipients. Fails loudly before publishing if the
cert isn't a Developer ID Application identity.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
So a notarized re-run cleanly supersedes an earlier ad-hoc release of the
same version instead of failing on the existing tag.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@maxonary
maxonary merged commit 5ac2aaa into main Jul 15, 2026
3 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