Skip to content

Commit ebc4529

Browse files
malpernclaude
andcommitted
ci: notarize + staple release builds so downloads aren't blocked by Gatekeeper
Developer ID signing alone is rejected as "Unnotarized Developer ID". Add a notarytool submit + stapler staple step (gated on APPLE_ID / APPLE_TEAM_ID / APPLE_NOTARY_PASSWORD secrets) between packaging and zipping. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent a6aba70 commit ebc4529

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

.github/workflows/release.yml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
# Build and attach VoxClaw.app to GitHub Releases when a version tag is pushed.
22
# Usage: git tag v1.0.0 && git push origin v1.0.0
33
#
4-
# For Developer ID signing (no Gatekeeper warning), add these repo secrets:
4+
# For a Gatekeeper-clean download you need BOTH Developer ID signing AND
5+
# notarization (signing alone is rejected as "Unnotarized Developer ID").
6+
# Signing secrets:
57
# MACOS_CERTIFICATE_P12_BASE64 - base64 of your .p12 (base64 -i cert.p12 | pbcopy)
68
# MACOS_CERTIFICATE_PASSWORD - password for the .p12
79
# APP_IDENTITY - e.g. "Developer ID Application: Your Name (TEAM_ID)"
10+
# Notarization secrets:
11+
# APPLE_ID - Apple ID email for the developer account
12+
# APPLE_TEAM_ID - 10-char team id (e.g. X2RKZ5TG99)
13+
# APPLE_NOTARY_PASSWORD - app-specific password from appleid.apple.com
814
name: Release
915

1016
on:
@@ -53,6 +59,26 @@ jobs:
5359
swift build -c release
5460
./Scripts/package_app.sh release
5561
62+
# Notarize so downloads don't hit a Gatekeeper prompt. A Developer ID
63+
# signature alone is rejected as "Unnotarized Developer ID"; notarization +
64+
# stapling is what makes it launch cleanly. Skips gracefully if creds absent.
65+
- name: Notarize & staple
66+
env:
67+
APPLE_ID: ${{ secrets.APPLE_ID }}
68+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
69+
APPLE_NOTARY_PASSWORD: ${{ secrets.APPLE_NOTARY_PASSWORD }}
70+
run: |
71+
if [[ -z "${APPLE_NOTARY_PASSWORD:-}" || -z "${APPLE_ID:-}" || -z "${APPLE_TEAM_ID:-}" ]]; then
72+
echo "Notarization credentials not set; skipping (build will be unnotarized)."
73+
exit 0
74+
fi
75+
ditto -c -k --sequesterRsrc --keepParent VoxClaw.app notarize.zip
76+
xcrun notarytool submit notarize.zip \
77+
--apple-id "$APPLE_ID" --team-id "$APPLE_TEAM_ID" --password "$APPLE_NOTARY_PASSWORD" --wait
78+
xcrun stapler staple VoxClaw.app
79+
xcrun stapler validate VoxClaw.app
80+
rm -f notarize.zip
81+
5682
- name: Zip app
5783
run: ditto -c -k --sequesterRsrc --keepParent VoxClaw.app VoxClaw.zip
5884

0 commit comments

Comments
 (0)