gowalk-cicd 1.0.34 → 1.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -7
- package/action/.daemux-version +1 -1
- package/android-action/.daemux-version +1 -1
- package/backend-action/.daemux-version +1 -1
- package/package.json +1 -1
- package/templates/deploy.yml +53 -10
package/README.md
CHANGED
|
@@ -21,6 +21,12 @@ Writes three things into your repo:
|
|
|
21
21
|
|
|
22
22
|
Re-run the same command anytime to pull the latest version.
|
|
23
23
|
|
|
24
|
+
Flutter map apps may also provide `GOOGLE_MAPS_IOS_KEY` and
|
|
25
|
+
`GOOGLE_MAPS_ANDROID_KEY` as Actions secrets. When present, the workflow writes
|
|
26
|
+
the iOS key to `ios/Flutter/MapsKeys.xcconfig` and the Android key to
|
|
27
|
+
`android/app/src/main/res/values/google_maps_api.xml` as mode-restricted runner
|
|
28
|
+
files. Apps without either secret are unchanged.
|
|
29
|
+
|
|
24
30
|
## iOS credentials
|
|
25
31
|
|
|
26
32
|
1. Create an **App Store Connect API key** with the **App Manager** role
|
|
@@ -184,11 +190,11 @@ sent for review from the Google Play Console UI.
|
|
|
184
190
|
```
|
|
185
191
|
|
|
186
192
|
That fails the whole upload, so the bundle you just built never reaches Play at
|
|
187
|
-
all.
|
|
188
|
-
and leaves it waiting, then
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
193
|
+
all. After an ordinary fresh-edit retry, the final retry re-uploads with
|
|
194
|
+
`changesNotSentForReview`, which lands the bundle and leaves it waiting, then
|
|
195
|
+
emits a `::warning::` naming the package. The delivery system can then complete
|
|
196
|
+
the console-only **Send changes for review** action through the app's leased
|
|
197
|
+
AdsPower profile.
|
|
192
198
|
|
|
193
199
|
In the ordinary case the first upload submits normally and the retry is skipped.
|
|
194
200
|
|
|
@@ -204,8 +210,10 @@ long enough outlives one:
|
|
|
204
210
|
|
|
205
211
|
Neither says anything about the build, which is signed and retained by that
|
|
206
212
|
point. The upload step therefore runs with `continue-on-error` and a second
|
|
207
|
-
attempt follows when the first fails
|
|
208
|
-
|
|
213
|
+
ordinary attempt follows when the first fails. This preserves automatic review
|
|
214
|
+
submission while opening a fresh edit. Only when that retry also fails does a
|
|
215
|
+
third attempt use `changesNotSentForReview`; setting that flag on an ordinary
|
|
216
|
+
app is itself a Play validation error.
|
|
209
217
|
|
|
210
218
|
One caveat this makes explicit: **nothing else should hold an edit open on the
|
|
211
219
|
same package while a deploy runs.** A script that polls `edits.insert` /
|
package/action/.daemux-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.36
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.36
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.36
|
package/package.json
CHANGED
package/templates/deploy.yml
CHANGED
|
@@ -57,6 +57,14 @@ jobs:
|
|
|
57
57
|
else
|
|
58
58
|
echo "enabled=false" >> "$GITHUB_OUTPUT"
|
|
59
59
|
fi
|
|
60
|
+
- name: Materialize restricted iOS Maps key
|
|
61
|
+
if: ${{ steps.flutter.outputs.enabled == 'true' && secrets.GOOGLE_MAPS_IOS_KEY != '' }}
|
|
62
|
+
shell: bash
|
|
63
|
+
env:
|
|
64
|
+
GOOGLE_MAPS_IOS_KEY: ${{ secrets.GOOGLE_MAPS_IOS_KEY }}
|
|
65
|
+
run: |
|
|
66
|
+
umask 077
|
|
67
|
+
printf 'GOOGLE_MAPS_IOS_KEY=%s\n' "$GOOGLE_MAPS_IOS_KEY" > ios/Flutter/MapsKeys.xcconfig
|
|
60
68
|
- name: Set up Flutter
|
|
61
69
|
if: ${{ steps.flutter.outputs.enabled == 'true' }}
|
|
62
70
|
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
|
|
@@ -306,6 +314,21 @@ jobs:
|
|
|
306
314
|
flutter pub get
|
|
307
315
|
flutter gen-l10n
|
|
308
316
|
fi
|
|
317
|
+
- name: Materialize restricted Android Maps key
|
|
318
|
+
if: >-
|
|
319
|
+
${{ steps.mode.outputs.mode == 'local'
|
|
320
|
+
&& steps.flutter.outputs.enabled == 'true'
|
|
321
|
+
&& secrets.GOOGLE_MAPS_ANDROID_KEY != '' }}
|
|
322
|
+
shell: bash
|
|
323
|
+
env:
|
|
324
|
+
GOOGLE_MAPS_ANDROID_KEY: ${{ secrets.GOOGLE_MAPS_ANDROID_KEY }}
|
|
325
|
+
run: |
|
|
326
|
+
umask 077
|
|
327
|
+
mkdir -p android/app/src/main/res/values
|
|
328
|
+
printf '%s\n' '<?xml version="1.0" encoding="utf-8"?>' \
|
|
329
|
+
'<resources>' \
|
|
330
|
+
" <string name=\"google_maps_key\" translatable=\"false\">$GOOGLE_MAPS_ANDROID_KEY</string>" \
|
|
331
|
+
'</resources>' > android/app/src/main/res/values/google_maps_api.xml
|
|
309
332
|
- name: Build and sign Android release
|
|
310
333
|
id: android
|
|
311
334
|
if: ${{ steps.mode.outputs.mode == 'local' }}
|
|
@@ -363,20 +386,40 @@ jobs:
|
|
|
363
386
|
${{ vars.GOOGLE_PLAY_STATUS == 'inProgress' && (vars.GOOGLE_PLAY_USER_FRACTION || '0.2') || '' }}
|
|
364
387
|
whatsNewDirectory: ${{ hashFiles('distribution/whatsnew/**') != '' && 'distribution/whatsnew' || '' }}
|
|
365
388
|
|
|
366
|
-
#
|
|
367
|
-
#
|
|
368
|
-
#
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
# bundle never lands at all.
|
|
373
|
-
- name: Retry Google Play upload without auto-submit
|
|
374
|
-
id: play-upload-retry
|
|
389
|
+
# A failed action does not expose a machine-readable Play error code. Retry once
|
|
390
|
+
# with the ordinary review mode first: that opens a fresh edit and repairs an edit
|
|
391
|
+
# that expired during a slow upload without changing submission semantics.
|
|
392
|
+
- name: Retry Google Play upload with a fresh edit
|
|
393
|
+
id: play-upload-fresh-retry
|
|
394
|
+
continue-on-error: true
|
|
375
395
|
if: >-
|
|
376
396
|
${{ steps.mode.outputs.mode == 'local'
|
|
377
397
|
&& steps.play.outputs.ready == 'true'
|
|
378
398
|
&& steps.play-upload.outcome == 'failure' }}
|
|
379
399
|
uses: r0adkll/upload-google-play@e738b9dd8f2476ea806d921b64aacd24f34515a5 # v1.1.5
|
|
400
|
+
with:
|
|
401
|
+
serviceAccountJson: ${{ steps.android.outputs.play-service-account }}
|
|
402
|
+
packageName: ${{ steps.android.outputs.package-name }}
|
|
403
|
+
releaseFiles: ${{ steps.android.outputs.bundle-path }}
|
|
404
|
+
tracks: ${{ vars.GOOGLE_PLAY_TRACK || 'internal' }}
|
|
405
|
+
status: ${{ vars.GOOGLE_PLAY_STATUS || 'completed' }}
|
|
406
|
+
userFraction: >-
|
|
407
|
+
${{ vars.GOOGLE_PLAY_STATUS == 'inProgress' && (vars.GOOGLE_PLAY_USER_FRACTION || '0.2') || '' }}
|
|
408
|
+
whatsNewDirectory: >-
|
|
409
|
+
${{ hashFiles('distribution/whatsnew/**') != '' && 'distribution/whatsnew' || '' }}
|
|
410
|
+
|
|
411
|
+
# If the ordinary fresh-edit retry also fails, Play may be requiring the
|
|
412
|
+
# changesNotSentForReview mode used after a policy rejection. A third, fresh edit
|
|
413
|
+
# is intentionally reserved for that case. Setting the flag on the edit-expiry
|
|
414
|
+
# retry is invalid for apps whose changes are submitted automatically.
|
|
415
|
+
- name: Retry Google Play upload without auto-submit
|
|
416
|
+
id: play-upload-review-retry
|
|
417
|
+
if: >-
|
|
418
|
+
${{ steps.mode.outputs.mode == 'local'
|
|
419
|
+
&& steps.play.outputs.ready == 'true'
|
|
420
|
+
&& steps.play-upload.outcome == 'failure'
|
|
421
|
+
&& steps.play-upload-fresh-retry.outcome == 'failure' }}
|
|
422
|
+
uses: r0adkll/upload-google-play@e738b9dd8f2476ea806d921b64aacd24f34515a5 # v1.1.5
|
|
380
423
|
with:
|
|
381
424
|
serviceAccountJson: ${{ steps.android.outputs.play-service-account }}
|
|
382
425
|
packageName: ${{ steps.android.outputs.package-name }}
|
|
@@ -390,7 +433,7 @@ jobs:
|
|
|
390
433
|
changesNotSentForReview: true
|
|
391
434
|
|
|
392
435
|
- name: Say what still needs a human
|
|
393
|
-
if: ${{ always() && steps.play-upload-retry.outcome == 'success' }}
|
|
436
|
+
if: ${{ always() && steps.play-upload-review-retry.outcome == 'success' }}
|
|
394
437
|
shell: bash
|
|
395
438
|
run: |
|
|
396
439
|
echo "::warning::Play would not accept this release for review automatically, so it was \
|