Skip to content

ci(release): sign & notarize macOS apps#1

Open
FahrenheitResearch wants to merge 1 commit into
mainfrom
ci/macos-signing-notarization
Open

ci(release): sign & notarize macOS apps#1
FahrenheitResearch wants to merge 1 commit into
mainfrom
ci/macos-signing-notarization

Conversation

@FahrenheitResearch

Copy link
Copy Markdown
Owner

Why

The release workflow shipped BowEcho.app with only Rust's automatic ad-hoc signature. macOS Gatekeeper rejects that on any downloaded copy ("can't verify the developer" / "is damaged"), which is why the v0.1.0 macOS downloads wouldn't open.

What

Adds a macOS-only Sign and notarize step to release.yml that:

  • imports the Developer ID Application cert into an ephemeral keychain
  • codesigns with hardened runtime + a secure timestamp
  • notarizes via the App Store Connect API key and staples the ticket
  • packages the signed/stapled .app and scrubs secrets from disk afterward

If signing secrets are absent (e.g. fork PRs) it falls back to an unsigned zip with a warning, so builds don't break.

Required repo secrets (already configured)

MACOS_CERTIFICATE_BASE64, MACOS_CERTIFICATE_PWD, ASC_API_KEY_BASE64, ASC_KEY_ID, ASC_ISSUER_ID

After merge

Push a new tag (e.g. v0.1.3) and the macOS artifacts will come out signed + notarized automatically — no manual step. The already-published v0.1.0 assets were fixed by hand and are unaffected.

🤖 Generated with Claude Code

The release workflow shipped the macOS .app with only Rust's automatic
ad-hoc signature, so Gatekeeper blocked every downloaded copy
("can't verify the developer / is damaged").

Add a macOS-only step that, when signing secrets are present:
  - imports the Developer ID Application cert into an ephemeral keychain
  - codesigns BowEcho.app with hardened runtime + a secure timestamp
  - notarizes via the App Store Connect API key and staples the ticket
  - packages the signed/stapled app and scrubs secrets from disk

Falls back to an unsigned zip (with a warning) when secrets are absent
so forks/PRs still build. Requires repo secrets:
MACOS_CERTIFICATE_BASE64, MACOS_CERTIFICATE_PWD, ASC_API_KEY_BASE64,
ASC_KEY_ID, ASC_ISSUER_ID.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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