-
Notifications
You must be signed in to change notification settings - Fork 4
158 lines (135 loc) · 5.55 KB
/
build_ios.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
name: app IOS
on:
workflow_dispatch: { }
push:
branches:
- dev
jobs:
build-ios:
runs-on: macos-14
env:
PROJECT: ${{ 'App.xcworkspace' }}
SCHEME: ${{ 'App' }}
DATA_DIR: ${{ 'xcbuild' }}
ARCHIVE_NAME: ${{ 'Invasives.xcarchive' }}
EXPORT_DIR: ${{ 'export' }}
IPA_NAME: ${{ 'Invasives.ipa' }}
steps:
- uses: actions/checkout@v4
- name: Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: 20.x
architecture: arm64
- name: Which versions of XCode are available?
run: |
sudo ls -la /Applications | grep "Xcode"
- name: XCode select 15.3
run: |
sudo xcode-select -s /Applications/Xcode_15.3.app/Contents/Developer
- name: Install sharedAPI dependencies
working-directory: ./sharedAPI
run: |
npm ci
- name: Install app dependencies
working-directory: ./app
run: |
npm ci
- name: Apply Patches
working-directory: ./app
run: |
npx patch-package
- name: Install Asset Pack
run: |
curl --no-progress-meter https://nrs.objectstore.gov.bc.ca/rzivsz/asset_pack_sept17_2024.tar.gz -O && tar xzf asset_pack_sept17_2024.tar.gz && rm asset_pack_sept17_2024.tar.gz && find .
working-directory: ./app/public/assets
- name: Run build
working-directory: ./app
env:
NODE_OPTIONS: --max-old-space-size=6000
REACT_APP_API_HOST: ${{ secrets.APPV2_REACT_APP_API_HOST }}
PUBLIC_MAP_URL: ${{ secrets.APPV2_PUBLIC_MAP_URL }}
IAPP_GEOJSON_URL: ${{ secrets.APPV2_IAPP_GEOJSON_URL }}
run: |
npm run build:ios
- name: Capacitor update
run: npx cap update ios
working-directory: ./app
- name: Capacitor copy
run: npx cap copy ios
working-directory: ./app
- name: CocoaPod Install
working-directory: ./app/ios/App
run: pod install
- name: List App files (DEBUG)
working-directory: ./app/ios/App
run: find .
- name: Increment Build No.
working-directory: ./app/ios/App
env:
BUILD_NO: ${{ github.run_number }}
run: |
# Set Build Number. Not worrying about storing to repo.
agvtool new-version -all "2.${BUILD_NO}"
- name: Install the Apple certificate and provisioning profile
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_STORE_BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.APPLE_APP_STORE_BUILD_CERTIFICATE_PASSWD }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.APPV2_PROVISIONING_PROFILE_BASE64 }}
KEYCHAIN_PASSWORD: ${{ secrets.APPV2_KEYCHAIN_PASSWORD }}
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $PP_PATH
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
# apply provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
- name: Build For Release
working-directory: ./app/ios/App
run: |
xcodebuild \
-workspace $PROJECT \
-scheme $SCHEME \
-configuration Release \
-sdk iphoneos \
-derivedDataPath $DATA_DIR \
-archivePath ${DATA_DIR}/${ARCHIVE_NAME} \
archive
- name: Export Archive
working-directory: ./app/ios/App
run: |
xcodebuild \
-exportArchive \
-archivePath ${DATA_DIR}/${ARCHIVE_NAME} \
-exportPath $EXPORT_DIR/${IPA_NAME} \
-exportOptionsPlist ExportOptions.plist \
-verbose
- uses: actions/upload-artifact@v4
with:
name: Exported
path: app/ios/App/export/Invasives.ipa
retention-days: 1
if-no-files-found: error
- name: Push to app store
if: github.event_name == 'workflow_dispatch'
env:
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
APP_STORE_CONNECT_KEY_IDENTIFIER: ${{ secrets.APP_STORE_CONNECT_KEY_IDENTIFIER_95 }}
APP_STORE_CONNECT_PRIVATE_KEY: ${{ secrets.APP_STORE_CONNECT_PRIVATE_KEY_95 }}
working-directory: ./app/ios/App
run: |
mkdir $HOME/.private_keys/
echo -n "$APP_STORE_CONNECT_PRIVATE_KEY" > $HOME/.private_keys/AuthKey_${APP_STORE_CONNECT_KEY_IDENTIFIER}.p8
xcrun altool --validate-app -f ./export/Invasives.ipa/App.ipa -t ios --apiKey ${APP_STORE_CONNECT_KEY_IDENTIFIER} --apiIssuer ${APP_STORE_CONNECT_ISSUER_ID}
xcrun altool --upload-app -f ./export/Invasives.ipa/App.ipa -t ios --apiKey ${APP_STORE_CONNECT_KEY_IDENTIFIER} --apiIssuer ${APP_STORE_CONNECT_ISSUER_ID}