Skip to content

Commit 581ae3d

Browse files
committed
feat(ci): add Apple code signing and notarization for macOS builds
Imports Developer ID Application certificate into a temporary keychain, extracts signing identity, writes App Store Connect API key for notarization. Passes APPLE_SIGNING_IDENTITY, APPLE_API_ISSUER, APPLE_API_KEY, and APPLE_API_KEY_PATH to tauri-action so macOS .app and .dmg are signed and notarized. Non-macOS builds unaffected.
1 parent bf6eca1 commit 581ae3d

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

.github/workflows/dashboard-release.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,39 @@ jobs:
5454
- name: Install dependencies
5555
run: bun install
5656

57+
# macOS: import Apple certificate for code signing
58+
- name: Import Apple certificate
59+
if: contains(matrix.settings.host, 'macos')
60+
env:
61+
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
62+
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
63+
run: |
64+
CERTIFICATE_PATH=$RUNNER_TEMP/certificate.p12
65+
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
66+
KEYCHAIN_PASSWORD=$(openssl rand -base64 32)
67+
68+
echo -n "$APPLE_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH
69+
70+
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
71+
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
72+
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
73+
security import $CERTIFICATE_PATH -P "$APPLE_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
74+
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
75+
security list-keychain -d user -s $KEYCHAIN_PATH
76+
77+
# Extract signing identity
78+
IDENTITY=$(security find-identity -v -p codesigning $KEYCHAIN_PATH | grep "Developer ID Application" | head -1 | sed 's/.*"\(.*\)".*/\1/')
79+
echo "APPLE_SIGNING_IDENTITY=$IDENTITY" >> $GITHUB_ENV
80+
81+
# macOS: write App Store Connect API key for notarization
82+
- name: Write Apple API key
83+
if: contains(matrix.settings.host, 'macos')
84+
env:
85+
APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY_CONTENT }}
86+
run: |
87+
mkdir -p $RUNNER_TEMP
88+
echo "$APPLE_API_KEY_CONTENT" > $RUNNER_TEMP/apple-api-key.p8
89+
5790
- name: Build and upload artifacts
5891
uses: tauri-apps/tauri-action@v0
5992
timeout-minutes: 30
@@ -70,3 +103,10 @@ jobs:
70103
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
71104
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
72105
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
106+
# macOS code signing + notarization
107+
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
108+
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
109+
APPLE_SIGNING_IDENTITY: ${{ env.APPLE_SIGNING_IDENTITY }}
110+
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
111+
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
112+
APPLE_API_KEY_PATH: ${{ runner.temp }}/apple-api-key.p8

0 commit comments

Comments
 (0)