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 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. The retry re-uploads with `changesNotSentForReview`, which lands the bundle
188
- and leaves it waiting, then emits a `::warning::` naming the package. Someone
189
- then presses **Send changes for review** on that app's Publishing overview page.
190
- There is no API for that press it is the one step Google deliberately reserves
191
- for a human, and no amount of tooling removes it.
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 a fresh edit succeeds. Both attempts
208
- failing still fails the job.
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` /
@@ -1 +1 @@
1
- 1.0.34
1
+ 1.0.36
@@ -1 +1 @@
1
- 1.0.34
1
+ 1.0.36
@@ -1 +1 @@
1
- 1.0.34
1
+ 1.0.36
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gowalk-cicd",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "description": "Zero-config GitHub Actions delivery for iOS TestFlight and Android Google Play.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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
- # The retry serves two different failures, and both need a fresh edit:
367
- # * the edit expired mid-upload (a large bundle on a slow runner), and
368
- # * Play refused to auto-submit: "Changes cannot be sent for review
369
- # automatically. Please set changesNotSentForReview to true." Play returns
370
- # this once an app has changes a human must submit — after a policy
371
- # rejection, for instance — and it fails the whole upload, so the built
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 \