-
Notifications
You must be signed in to change notification settings - Fork 10
289 lines (248 loc) · 11.5 KB
/
pre-release.yml
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
name: pre-release
on:
workflow_call:
outputs:
app_version_number:
description: "The application version number"
value: ${{ jobs.prepare_build.outputs.app_version }}
app_build_number:
description: "The application build number"
value: ${{ jobs.prepare_build.outputs.incremented_build_number }}
workflow_dispatch:
push:
branches:
- develop
env:
ARTIFACTS_DIRECTORY: ./artifacts
RELEASE_BUILD_CONFIGURATION: Release
jobs:
test:
runs-on: macos-latest
environment: github-actions-release
steps:
- name: Checkout
uses: actions/checkout@v3.5.2
- name: Unit-Tests
run: dotnet test $PROJECT_PATH
env:
PROJECT_PATH: ./source/EduCATS.UnitTests/EduCATS.UnitTests.csproj
prepare_build:
runs-on: macos-latest
environment: github-actions-release
needs: test
outputs:
app_version: ${{ steps.app_version_setup.outputs.app_version }}
incremented_build_number: ${{ steps.increase_build_number.outputs.app_build_number }}
steps:
- name: Checkout
uses: actions/checkout@v3.5.2
- name: Setup App Version
id: app_version_setup
run: |
APP_VERSION=$(cat ./VERSION)
echo $APP_VERSION
echo "app_version=$APP_VERSION" >> $GITHUB_OUTPUT
- name: Increase Build Number
id: increase_build_number
run: |
APP_BUILD_NUMBER_INCREMENTED=$(($APP_BUILD_NUMBER+1))
echo $APP_BUILD_NUMBER_INCREMENTED
echo "APP_BUILD_NUMBER_INCREMENTED=$APP_BUILD_NUMBER_INCREMENTED" >> $GITHUB_ENV
echo "app_build_number=$APP_BUILD_NUMBER_INCREMENTED" >> $GITHUB_OUTPUT
env:
APP_BUILD_NUMBER: ${{ secrets.APP_BUILD_NUMBER }}
- name: App Build Secret Update
uses: gliech/create-github-secret-action@v1.4.10
with:
pa_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
name: APP_BUILD_NUMBER
value: ${{ env.APP_BUILD_NUMBER_INCREMENTED }}
build_apk:
runs-on: macos-13
environment: github-actions-release
needs: prepare_build
steps:
- name: Checkout
uses: actions/checkout@v3.5.2
- name: Setup Xamarin
run: |
brew install --cask xamarin-ios
brew install --cask xamarin-android
- name: NuGet Cache
uses: actions/cache@v3.3.1
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: NuGet Restore
run: nuget restore $SOLUTION_PATH
env:
SOLUTION_PATH: ./source/EduCATS.sln
- name: Artifacts Directory Setup
run: mkdir ${{ env.ARTIFACTS_DIRECTORY }}
- name: Android Signing Setup
run: (echo ${{ secrets.ANDROID_KEYSTORE_FILE }} | base64 --decode) > $KEYSTORE
env:
KEYSTORE: ./source/EduCATS.Android/educats-release.keystore
- name: AndroidManifest Version Update
uses: damienaicheh/update-android-version-manifest-action@v1.0.0
with:
android-manifest-path: ./source/EduCATS.Android/Properties/AndroidManifest.xml
version-name: ${{ needs.prepare_build.outputs.app_version }}
version-code: ${{ needs.prepare_build.outputs.incremented_build_number }}
- name: Android Build (apk)
run: |
MSBuild /t:SignAndroidPackage /p:Configuration=${{ env.RELEASE_BUILD_CONFIGURATION }} /p:AndroidPackageFormat=apk /p:AndroidKeyStore=true /p:AndroidSigningKeyAlias='${{ secrets.ANDROID_KEYSTORE_ALIAS }}' /p:AndroidSigningKeyPass='${{ secrets.ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD }}' /p:AndroidSigningKeyStore=$KEYSTORE_FILENAME /p:AndroidSigningStorePass='${{ secrets.ANDROID_KEYSTORE_PASSWORD }}' $PROJECT_PATH
cp $APK_FILE_PATH $ARTIFACTS_APK_PATH
env:
PROJECT_PATH: ./source/EduCATS.Android/EduCATS.Android.csproj
KEYSTORE_FILENAME: educats-release.keystore
APK_FILE_PATH: ./source/EduCATS.Android/bin/Release/by.bntu.educats-Signed.apk
ARTIFACTS_APK_PATH: ${{ env.ARTIFACTS_DIRECTORY }}/by.bntu.educats_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.apk
- name: Upload APK Artifact
uses: actions/upload-artifact@v3.1.2
with:
name: by.bntu.educats_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.apk
path: ${{ env.ARTIFACTS_DIRECTORY }}/by.bntu.educats_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.apk
build_aab:
runs-on: macos-13
environment: github-actions-release
needs: prepare_build
steps:
- name: Checkout
uses: actions/checkout@v3.5.2
- name: Setup Xamarin
run: |
brew install --cask xamarin-ios
brew install --cask xamarin-android
- name: NuGet Cache
uses: actions/cache@v3.3.1
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: NuGet Restore
run: nuget restore $SOLUTION_PATH
env:
SOLUTION_PATH: ./source/EduCATS.sln
- name: Artifacts Directory Setup
run: mkdir ${{ env.ARTIFACTS_DIRECTORY }}
- name: Android Signing Setup
run: (echo ${{ secrets.ANDROID_KEYSTORE_FILE }} | base64 --decode) > $KEYSTORE
env:
KEYSTORE: ./source/EduCATS.Android/educats-release.keystore
- name: AndroidManifest Version Update
uses: damienaicheh/update-android-version-manifest-action@v1.0.0
with:
android-manifest-path: ./source/EduCATS.Android/Properties/AndroidManifest.xml
version-name: ${{ needs.prepare_build.outputs.app_version }}
version-code: ${{ needs.prepare_build.outputs.incremented_build_number }}
- name: Android Build (aab)
run: |
MSBuild /t:SignAndroidPackage /p:Configuration=${{ env.RELEASE_BUILD_CONFIGURATION }} /p:AndroidPackageFormat=aab /p:AndroidKeyStore=true /p:AndroidSigningKeyAlias='${{ secrets.ANDROID_KEYSTORE_ALIAS }}' /p:AndroidSigningKeyPass='${{ secrets.ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD }}' /p:AndroidSigningKeyStore=$KEYSTORE_FILENAME /p:AndroidSigningStorePass='${{ secrets.ANDROID_KEYSTORE_PASSWORD }}' $PROJECT_PATH
cp $AAB_FILE_PATH $ARTIFACTS_AAB_PATH
env:
PROJECT_PATH: ./source/EduCATS.Android/EduCATS.Android.csproj
KEYSTORE_FILENAME: educats-release.keystore
AAB_FILE_PATH: ./source/EduCATS.Android/bin/Release/by.bntu.educats-Signed.aab
ARTIFACTS_AAB_PATH: ${{ env.ARTIFACTS_DIRECTORY }}/by.bntu.educats_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.aab
- name: Upload AAB Artifact
uses: actions/upload-artifact@v3.1.2
with:
name: by.bntu.educats_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.aab
path: ${{ env.ARTIFACTS_DIRECTORY }}/by.bntu.educats_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.aab
build_ipa:
runs-on: macos-13
environment: github-actions-release
needs: prepare_build
steps:
- name: Checkout
uses: actions/checkout@v3.5.2
- name: Setup Xamarin
run: |
brew install --cask xamarin-ios
brew install --cask xamarin-android
- name: NuGet Cache
uses: actions/cache@v3.3.1
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: NuGet Restore
run: nuget restore $SOLUTION_PATH
env:
SOLUTION_PATH: ./source/EduCATS.sln
- name: Artifacts Directory Setup
run: mkdir ${{ env.ARTIFACTS_DIRECTORY }}
- name: iOS Certificates Install
uses: apple-actions/import-codesign-certs@v1
with:
p12-file-base64: ${{ secrets.IOS_CERTIFICATE_APPSTORE }}
p12-password: ${{ secrets.IOS_CERTIFICATE_APPSTORE_PASSWORD }}
keychain: github-actions-xamarin
keychain-password: ''
- name: iOS Provisioning Profiles Install
uses: akiojin/install-provisioning-profile-github-action@v1.0
with:
base64: ${{ secrets.IOS_PROVISIONING_PROFILE_APPSTORE }}
- name: Info.plist Version Update
uses: damienaicheh/update-ios-version-info-plist-action@v1.1.0
with:
info-plist-path: ./source/EduCATS.iOS/Info.plist
bundle-version: ${{ needs.prepare_build.outputs.incremented_build_number }}
bundle-short-version-string: ${{ needs.prepare_build.outputs.app_version }}
- name: iOS Build (ipa)
run: |
MSBuild /t:Build /p:Configuration=${{ env.RELEASE_BUILD_CONFIGURATION }} /p:Platform=$PLATFORM /p:BuildIpa=true $PROJECT_PATH
cp $IPA_PATH $ARTIFACTS_IPA_PATH
env:
PLATFORM: iPhone
PROJECT_PATH: ./source/EduCATS.iOS/EduCATS.iOS.csproj
IPA_PATH: ./source/EduCATS.iOS/bin/iPhone/Release/EduCATS.iOS.ipa
ARTIFACTS_IPA_PATH: ${{ env.ARTIFACTS_DIRECTORY }}/EduCATS_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.ipa
- name: Upload IPA Artifact
uses: actions/upload-artifact@v3.1.2
with:
name: EduCATS_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.ipa
path: ${{ env.ARTIFACTS_DIRECTORY }}/EduCATS_${{ needs.prepare_build.outputs.app_version }}.${{ needs.prepare_build.outputs.incremented_build_number }}.ipa
deploy_google_play:
runs-on: macos-latest
environment: github-actions-release
needs: build_aab
steps:
- name: Artifacts Download
uses: actions/download-artifact@v3.0.2
- name: Google Play Deploy
id: google_play_deploy
continue-on-error: true
uses: r0adkll/upload-google-play@v1.1.1
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_API_JSON_PLAIN }}
packageName: by.bntu.educats
releaseFiles: ./*.aab/*.aab
track: beta
changesNotSentForReview: true
status: draft
- name: Google Play Deploy On Failure
uses: r0adkll/upload-google-play@v1.1.1
if: always() && steps.google_play_deploy.outcome == 'failure'
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_API_JSON_PLAIN }}
packageName: by.bntu.educats
releaseFiles: ./*.aab/*.aab
track: beta
status: draft
deploy_appstore:
runs-on: macos-latest
environment: github-actions-release
needs: build_ipa
steps:
- name: Artifacts Download
uses: actions/download-artifact@v3.0.2
- name: AppStore Deploy
run: xcrun altool --upload-app -f $IPA_FILE_PATH --type ios -u ${{ secrets.APPLE_ID }} -p ${{ secrets.APPLE_SPECIFIC_PASSWORD }}
env:
IPA_FILE_PATH: ./*.ipa/*.ipa