Skip to content

Commit 94be8c8

Browse files
committed
Update build pipeline to notarize macOS releases
1 parent 47a6914 commit 94be8c8

File tree

6 files changed

+66
-81
lines changed

6 files changed

+66
-81
lines changed

.github/actions/archive/action.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ runs:
2929
xcodebuild clean archive \
3030
-allowProvisioningUpdates \
3131
-allowProvisioningDeviceRegistration \
32+
-skipPackagePluginValidation \
33+
-skipMacroValidation \
34+
-onlyUsePackageVersionsFromResolvedFile \
3235
-authenticationKeyID ${{ inputs.app-store-key-id }} \
3336
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
3437
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
35-
-onlyUsePackageVersionsFromResolvedFile \
36-
-skipPackagePluginValidation \
3738
-scheme '${{ inputs.scheme }}' \
3839
-destination '${{ inputs.destination }}' \
3940
-archivePath '${{ inputs.archive-path }}' \

.github/actions/build-for-testing/action.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ runs:
2626
xcodebuild build-for-testing \
2727
-allowProvisioningUpdates \
2828
-allowProvisioningDeviceRegistration \
29+
-skipPackagePluginValidation \
30+
-skipMacroValidation \
31+
-onlyUsePackageVersionsFromResolvedFile \
2932
-authenticationKeyID ${{ inputs.app-store-key-id }} \
3033
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
3134
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
32-
-onlyUsePackageVersionsFromResolvedFile \
33-
-skipPackagePluginValidation \
3435
-scheme '${{ inputs.scheme }}' \
3536
-destination '${{ inputs.destination }}' \
3637
-resultBundlePath BuildResults.xcresult

.github/actions/import-cert/action.yml

+6-19
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,16 @@ runs:
1111
steps:
1212
- shell: bash
1313
run: |
14-
security list-keychains -d user -s login.keychain Developer.keychain
15-
16-
if [[ ! -f "$HOME/Library/Keychains/Developer.keychain-db" ]]; then
17-
security create-keychain -p "${{ inputs.password }}" Developer.keychain
18-
security set-keychain-settings -lut 21600 Developer.keychain
19-
20-
for CERT_INDEX in {2..8}; do
21-
CERT_FILE=AppleWWDRCAG${CERT_INDEX}.cer
22-
curl --proto '=https' --tlsv1.2 -sSOf "https://www.apple.com/certificateauthority/$CERT_FILE"
23-
security import $CERT_FILE -k Developer.keychain -f openssl
24-
rm $CERT_FILE
25-
done
26-
fi
27-
28-
security unlock-keychain -p "${{ inputs.password }}" Developer.keychain
29-
3014
echo -n "${{ inputs.certificate }}" | base64 -d > Developer.p12
15+
security create-keychain -p password Developer.keychain
16+
security set-keychain-settings -lut 21600 Developer.keychain
17+
security unlock-keychain -p password Developer.keychain
3118
security import Developer.p12 \
3219
-k Developer.keychain \
3320
-f pkcs12 \
3421
-A \
3522
-T /usr/bin/codesign \
3623
-T /usr/bin/security \
37-
-P "${{ inputs.password }}"
38-
39-
security set-key-partition-list -S apple-tool:,apple: -k "${{ inputs.password }}" Developer.keychain
24+
-P ${{ inputs.password }}
25+
security set-key-partition-list -S apple-tool:,apple: -k password Developer.keychain
26+
security list-keychains -d user -s login.keychain Developer.keychain

.github/actions/notarize/action.yml

+16-18
Original file line numberDiff line numberDiff line change
@@ -28,34 +28,32 @@ runs:
2828
run: |
2929
echo "${{ inputs.app-store-key }}" > AuthKey_${{ inputs.app-store-key-id }}.p8
3030
31-
echo '{"destination":"upload","method":"developer-id"}' \
31+
echo '{"destination":"export","method":"developer-id"}' \
3232
| plutil -convert xml1 -o ExportOptions.plist -
3333
34-
xcodebuild \
35-
-exportArchive \
34+
xcodebuild -exportArchive \
3635
-allowProvisioningUpdates \
3736
-allowProvisioningDeviceRegistration \
37+
-skipPackagePluginValidation \
38+
-skipMacroValidation \
39+
-onlyUsePackageVersionsFromResolvedFile \
3840
-authenticationKeyID ${{ inputs.app-store-key-id }} \
3941
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
4042
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
4143
-archivePath '${{ inputs.archive-path }}' \
44+
-exportPath Release \
4245
-exportOptionsPlist ExportOptions.plist
4346
44-
until xcodebuild \
45-
-exportNotarizedApp \
46-
-allowProvisioningUpdates \
47-
-allowProvisioningDeviceRegistration \
48-
-authenticationKeyID ${{ inputs.app-store-key-id }} \
49-
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
50-
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
51-
-archivePath '${{ inputs.archive-path }}' \
52-
-exportPath Release
53-
do
54-
echo "Failed to export app, trying again in 10s..."
55-
sleep 10
56-
done
47+
rm ExportOptions.plist
48+
49+
ditto -c -k --keepParent Release/${{ inputs.product-name }} Upload.zip
50+
SUBMISSION_ID=$(xcrun notarytool submit --issuer ${{ inputs.app-store-key-issuer-id }} --key-id ${{ inputs.app-store-key-id }} --key "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" Upload.zip | awk '/ id:/ { print $2; exit }')
51+
52+
xcrun notarytool wait $SUBMISSION_ID --issuer ${{ inputs.app-store-key-issuer-id }} --key-id ${{ inputs.app-store-key-id }} --key "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8"
53+
xcrun stapler staple Release/${{ inputs.product-name }}
5754
5855
aa archive -a lzma -b 8m -d Release -subdir ${{ inputs.product-name }} -o ${{ inputs.product-name }}.aar
59-
echo "notarized-app=Apple/${{ inputs.product-name }}.aar" >> $GITHUB_OUTPUT
6056
61-
rm -rf AuthKey_${{ inputs.app-store-key-id }}.p8 Release ExportOptions.plist
57+
rm -rf Upload.zip Release AuthKey_${{ inputs.app-store-key-id }}.p8 ExportOptions.plist
58+
59+
echo "notarized-app=Apple/${{ inputs.product-name }}.aar" >> $GITHUB_OUTPUT

.github/workflows/build-apple.yml

+24-24
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ on:
88
- "*"
99
jobs:
1010
build:
11-
name: Build (${{ matrix.configuration['platform'] }})
11+
name: Build (${{ matrix.platform }})
1212
runs-on: macos-13
1313
strategy:
1414
fail-fast: false
1515
matrix:
16-
configuration:
16+
include:
1717
- scheme: App
1818
destination: generic/platform=iOS
1919
platform: iOS
2020
sdk-name: iphoneos
2121
- scheme: App
22-
destination: platform=iOS Simulator,OS=17.0,name=iPhone 14 Pro
22+
destination: platform=iOS Simulator,OS=17.2,name=iPhone 14 Pro
2323
platform: iOS Simulator
2424
sdk-name: iphonesimulator
2525
xcode-unit-test: UnitTests
@@ -33,7 +33,7 @@ jobs:
3333
xcode-ui-test: UITests-macOS
3434
gradle-test: macosX64Test
3535
env:
36-
DEVELOPER_DIR: /Applications/Xcode_15.0.app/Contents/Developer
36+
DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer
3737
steps:
3838
- name: Checkout
3939
uses: actions/checkout@v3
@@ -60,44 +60,44 @@ jobs:
6060
password: ${{ secrets.DEVELOPER_CERT_PASSWORD }}
6161
- name: Build External Libraries
6262
shell: bash
63-
run: External/build-darwin.sh ${{ matrix.configuration['sdk-name'] }}
63+
run: External/build-darwin.sh ${{ matrix.sdk-name }}
6464
- name: Build
6565
id: build
6666
uses: ./.github/actions/build-for-testing
6767
with:
68-
scheme: ${{ matrix.configuration['scheme'] }}
69-
destination: ${{ matrix.configuration['destination'] }}
68+
scheme: ${{ matrix.scheme }}
69+
destination: ${{ matrix.destination }}
7070
app-store-key: ${{ secrets.APPSTORE_KEY }}
7171
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
7272
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
7373
- name: Xcode Unit Test
74-
if: ${{ matrix.configuration['xcode-unit-test'] != '' }}
74+
if: ${{ matrix.xcode-unit-test != '' }}
7575
continue-on-error: true
7676
uses: ./.github/actions/test-without-building
7777
with:
78-
scheme: ${{ matrix.configuration['scheme'] }}
79-
destination: ${{ matrix.configuration['destination'] }}
80-
test-plan: ${{ matrix.configuration['xcode-unit-test'] }}
81-
artifact-prefix: unit-tests-${{ matrix.configuration['sdk-name'] }}
82-
check-name: Xcode Unit Tests (${{ matrix.configuration['platform'] }})
78+
scheme: ${{ matrix.scheme }}
79+
destination: ${{ matrix.destination }}
80+
test-plan: ${{ matrix.xcode-unit-test }}
81+
artifact-prefix: unit-tests-${{ matrix.sdk-name }}
82+
check-name: Xcode Unit Tests (${{ matrix.platform }})
8383
- name: Build Kotlin Tests
84-
if: ${{ matrix.configuration['gradle-test'] != '' }}
84+
if: ${{ matrix.gradle-test != '' }}
8585
shell: bash
86-
run: ./gradlew :Shared:${{ matrix.configuration['gradle-test'] }}Klibrary
86+
run: ./gradlew :Shared:${{ matrix.gradle-test }}Klibrary
8787
- name: Kotlin Unit Test
88-
if: ${{ matrix.configuration['gradle-test'] != '' }}
88+
if: ${{ matrix.gradle-test != '' }}
8989
continue-on-error: true
9090
uses: ./.github/actions/gradle-test
9191
with:
92-
task: :Shared:${{ matrix.configuration['gradle-test'] }}
93-
check-name: Kotlin Tests (${{ matrix.configuration['platform'] }})
92+
task: :Shared:${{ matrix.gradle-test }}
93+
check-name: Kotlin Tests (${{ matrix.platform }})
9494
- name: Xcode UI Test
95-
if: ${{ matrix.configuration['xcode-ui-test'] != '' }}
95+
if: ${{ matrix.xcode-ui-test != '' }}
9696
continue-on-error: true
9797
uses: ./.github/actions/test-without-building
9898
with:
99-
scheme: ${{ matrix.configuration['scheme'] }}
100-
destination: ${{ matrix.configuration['destination'] }}
101-
test-plan: ${{ matrix.configuration['xcode-ui-test'] }}
102-
artifact-prefix: ui-tests-${{ matrix.configuration['sdk-name'] }}
103-
check-name: Xcode UI Tests (${{ matrix.configuration['platform'] }})
99+
scheme: ${{ matrix.scheme }}
100+
destination: ${{ matrix.destination }}
101+
test-plan: ${{ matrix.xcode-ui-test }}
102+
artifact-prefix: ui-tests-${{ matrix.sdk-name }}
103+
check-name: Xcode UI Tests (${{ matrix.platform }})

.github/workflows/release-apple.yml

+14-16
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,22 @@ on:
55
- created
66
jobs:
77
build:
8-
name: Build ${{ matrix.configuration['platform'] }} Release
8+
name: Build ${{ matrix.platform }} Release
99
runs-on: macos-13
1010
strategy:
1111
fail-fast: false
1212
matrix:
13-
configuration:
13+
include:
1414
- scheme: App
1515
build-destination: generic/platform=iOS
1616
platform: iOS
17-
method: ad-hoc
18-
export-destination: export
1917
artifact-file: Apple/Release/Wallet.ipa
2018
- scheme: App (macOS)
2119
build-destination: generic/platform=macOS
2220
platform: macOS
23-
method: developer-id
24-
export-destination: upload
2521
artifact-file: Apple/Wallet.app.aar
2622
env:
27-
DEVELOPER_DIR: /Applications/Xcode_15.0.app/Contents/Developer
23+
DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer
2824
steps:
2925
- name: Checkout
3026
uses: actions/checkout@v3
@@ -47,32 +43,33 @@ jobs:
4743
- name: Import Certificate
4844
uses: ./.github/actions/import-cert
4945
with:
50-
certificate: ${{ secrets.DEVELOPER_ID_CERT }}
51-
password: ${{ secrets.DEVELOPER_ID_CERT_PASSWORD }}
46+
certificate: ${{ secrets.DEVELOPER_CERT }}
47+
password: ${{ secrets.DEVELOPER_CERT_PASSWORD }}
5248
- name: Build External Libraries
5349
shell: bash
54-
run: External/build-darwin.sh ${{ matrix.configuration['sdk-name'] }}
50+
run: External/build-darwin.sh ${{ matrix.sdk-name }}
5551
- name: Archive
5652
uses: ./.github/actions/archive
5753
with:
58-
scheme: ${{ matrix.configuration['scheme'] }}
59-
destination: ${{ matrix.configuration['build-destination'] }}
54+
scheme: ${{ matrix.scheme }}
55+
destination: ${{ matrix.build-destination }}
6056
app-store-key: ${{ secrets.APPSTORE_KEY }}
6157
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
6258
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
6359
archive-path: Wallet.xcarchive
6460
- name: Export
61+
if: ${{ matrix.platform == 'iOS' }}
6562
uses: ./.github/actions/export
6663
with:
67-
method: ${{ matrix.configuration['method'] }}
68-
destination: ${{ matrix.configuration['export-destination'] }}
64+
method: ad-hoc
65+
destination: export
6966
app-store-key: ${{ secrets.APPSTORE_KEY }}
7067
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
7168
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
7269
archive-path: Wallet.xcarchive
7370
export-path: Release
7471
- name: Notarize
75-
if: ${{ matrix.configuration['platform'] == 'macOS' }}
72+
if: ${{ matrix.platform == 'macOS' }}
7673
uses: ./.github/actions/notarize
7774
with:
7875
app-store-key: ${{ secrets.APPSTORE_KEY }}
@@ -84,5 +81,6 @@ jobs:
8481
uses: SierraSoftworks/[email protected]
8582
with:
8683
token: ${{ secrets.GITHUB_TOKEN }}
84+
release_tag: ${{ github.ref_name }}
8785
overwrite: 'false'
88-
files: ${{ matrix.configuration['artifact-file'] }}
86+
files: ${{ matrix.artifact-file }}

0 commit comments

Comments
 (0)