gowalk-cicd 1.0.33 → 1.0.34
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 +8 -0
- package/action/.daemux-version +1 -1
- package/action/action.yml +24 -2
- package/action/scripts/test_testflight_version_slot_wiring.py +50 -0
- package/android-action/.daemux-version +1 -1
- package/backend-action/.daemux-version +1 -1
- package/package.json +1 -1
- package/templates/deploy.yml +5 -0
package/README.md
CHANGED
|
@@ -437,6 +437,13 @@ The iOS composite action runs on `macos-15` and:
|
|
|
437
437
|
|
|
438
438
|
The iOS action requires only the p8. Everything else is derived.
|
|
439
439
|
|
|
440
|
+
Feature-branch runs installed from the standard workflow still archive and
|
|
441
|
+
upload to TestFlight, but pass `manage-app-store-version: 'false'`. This keeps
|
|
442
|
+
branch validation independent of the editable App Store release slot, so a
|
|
443
|
+
build can upload while the current release is locked in review. Default-branch
|
|
444
|
+
runs retain version creation and metadata automation. Direct action callers
|
|
445
|
+
keep the historical behavior because the new input defaults to `true`.
|
|
446
|
+
|
|
440
447
|
### App ID capabilities
|
|
441
448
|
|
|
442
449
|
A provisioning profile carries only the capabilities enabled on its App ID.
|
|
@@ -570,6 +577,7 @@ common ones:
|
|
|
570
577
|
| `uses-non-exempt-encryption` | Value for `ITSAppUsesNonExemptEncryption` |
|
|
571
578
|
| `archive` | `false` to build-only (PR runs without secrets) |
|
|
572
579
|
| `upload` | `false` to archive but not upload to TestFlight |
|
|
580
|
+
| `manage-app-store-version` | `false` to upload without creating/editing the App Store release slot |
|
|
573
581
|
| `app-store-whats-new` | Inline "What's New" text (overrides files) |
|
|
574
582
|
| `ai-metadata` | `false` to disable AI auto-fill of empty ASC metadata |
|
|
575
583
|
| `ai-metadata-model` | GitHub Models model id (default `openai/gpt-4o`) |
|
package/action/.daemux-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.34
|
package/action/action.yml
CHANGED
|
@@ -71,6 +71,13 @@ inputs:
|
|
|
71
71
|
secrets. When 'false', `upload` is ignored.
|
|
72
72
|
required: false
|
|
73
73
|
default: "true"
|
|
74
|
+
manage-app-store-version:
|
|
75
|
+
description: >
|
|
76
|
+
Set to 'false' to archive and upload a TestFlight build without creating
|
|
77
|
+
or editing an App Store version. App Store metadata automation is skipped.
|
|
78
|
+
This is useful for feature-branch validation while a release is in review.
|
|
79
|
+
required: false
|
|
80
|
+
default: "true"
|
|
74
81
|
run-tests:
|
|
75
82
|
description: "Set to 'false' to skip the simulator test stage"
|
|
76
83
|
required: false
|
|
@@ -289,7 +296,7 @@ runs:
|
|
|
289
296
|
| tee -a "$GITHUB_ENV"
|
|
290
297
|
|
|
291
298
|
- name: Resolve App Store version slot (REUSE or CREATE)
|
|
292
|
-
if: ${{ inputs.archive == 'true' }}
|
|
299
|
+
if: ${{ inputs.archive == 'true' && inputs.manage-app-store-version == 'true' }}
|
|
293
300
|
shell: bash
|
|
294
301
|
env:
|
|
295
302
|
APP_STORE_APPLE_ID: ${{ inputs.app-store-apple-id || env.CFG_APP_STORE_APPLE_ID }}
|
|
@@ -335,6 +342,18 @@ runs:
|
|
|
335
342
|
echo "APP_STORE_VERSION_ID=$APP_STORE_VERSION_ID" >> "$GITHUB_ENV"
|
|
336
343
|
echo "Using marketing version $MARKETING_VERSION build $BUILD_NUMBER (decision=$DECISION_JSON)"
|
|
337
344
|
|
|
345
|
+
- name: Resolve TestFlight build number
|
|
346
|
+
if: ${{ inputs.archive == 'true' && inputs.manage-app-store-version == 'false' }}
|
|
347
|
+
shell: bash
|
|
348
|
+
env:
|
|
349
|
+
APP_STORE_APPLE_ID: ${{ inputs.app-store-apple-id || env.CFG_APP_STORE_APPLE_ID }}
|
|
350
|
+
run: |
|
|
351
|
+
set -o pipefail
|
|
352
|
+
BUILD_NUMBER=$(python3 "${{ github.action_path }}/scripts/next_build_number.py")
|
|
353
|
+
echo "BUILD_NUMBER=$BUILD_NUMBER" >> "$GITHUB_ENV"
|
|
354
|
+
echo "APP_STORE_VERSION_ID=" >> "$GITHUB_ENV"
|
|
355
|
+
echo "Using marketing version $MARKETING_VERSION build $BUILD_NUMBER without an App Store version slot"
|
|
356
|
+
|
|
338
357
|
- name: Notice on deprecated profile-name input
|
|
339
358
|
if: ${{ inputs.archive == 'true' && inputs.profile-name != '' }}
|
|
340
359
|
shell: bash
|
|
@@ -714,7 +733,9 @@ runs:
|
|
|
714
733
|
|
|
715
734
|
- name: Detect empty ASC metadata fields
|
|
716
735
|
id: detect_metadata
|
|
717
|
-
if:
|
|
736
|
+
if: >-
|
|
737
|
+
${{ inputs.archive == 'true' && inputs.upload == 'true'
|
|
738
|
+
&& inputs.manage-app-store-version == 'true' && inputs.ai-metadata != 'false' }}
|
|
718
739
|
shell: bash
|
|
719
740
|
env:
|
|
720
741
|
APP_STORE_APPLE_ID: ${{ inputs.app-store-apple-id || env.CFG_APP_STORE_APPLE_ID }}
|
|
@@ -969,6 +990,7 @@ runs:
|
|
|
969
990
|
# with the default (CFG_WHATS_NEW), preserving any AI-generated notes.
|
|
970
991
|
- name: Set App Store "What's New"
|
|
971
992
|
if: ${{ inputs.archive == 'true' && inputs.upload == 'true'
|
|
993
|
+
&& inputs.manage-app-store-version == 'true'
|
|
972
994
|
&& (inputs.app-store-whats-new != '' || env.CFG_WHATS_NEW != '') }}
|
|
973
995
|
shell: bash
|
|
974
996
|
env:
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import re
|
|
2
|
+
import unittest
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
ACTION_YAML = Path(__file__).resolve().parents[1] / "action.yml"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def step_block(source: str, name: str) -> str:
|
|
10
|
+
pattern = rf" - name: {re.escape(name)}\n(?P<body>.*?)(?=\n - name:|\Z)"
|
|
11
|
+
match = re.search(pattern, source, re.DOTALL)
|
|
12
|
+
if match is None:
|
|
13
|
+
raise AssertionError(f"missing action step: {name}")
|
|
14
|
+
return match.group("body")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TestTestFlightVersionSlotWiring(unittest.TestCase):
|
|
18
|
+
@classmethod
|
|
19
|
+
def setUpClass(cls) -> None:
|
|
20
|
+
cls.source = ACTION_YAML.read_text(encoding="utf-8")
|
|
21
|
+
|
|
22
|
+
def test_opt_out_is_backward_compatible(self) -> None:
|
|
23
|
+
self.assertRegex(
|
|
24
|
+
self.source,
|
|
25
|
+
r"(?m)^ manage-app-store-version:\n(?: .*\n)*? default: \"true\"$",
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
def test_opt_out_skips_store_version_but_keeps_build_number(self) -> None:
|
|
29
|
+
store_slot = step_block(self.source, "Resolve App Store version slot (REUSE or CREATE)")
|
|
30
|
+
testflight = step_block(self.source, "Resolve TestFlight build number")
|
|
31
|
+
|
|
32
|
+
self.assertIn("inputs.manage-app-store-version == 'true'", store_slot)
|
|
33
|
+
self.assertIn("inputs.manage-app-store-version == 'false'", testflight)
|
|
34
|
+
self.assertIn(
|
|
35
|
+
"APP_STORE_APPLE_ID: ${{ inputs.app-store-apple-id || env.CFG_APP_STORE_APPLE_ID }}",
|
|
36
|
+
testflight,
|
|
37
|
+
)
|
|
38
|
+
self.assertIn("next_build_number.py", testflight)
|
|
39
|
+
self.assertNotIn("manage_marketing_version.py", testflight)
|
|
40
|
+
|
|
41
|
+
def test_metadata_requires_a_managed_store_version(self) -> None:
|
|
42
|
+
detector = step_block(self.source, "Detect empty ASC metadata fields")
|
|
43
|
+
whats_new = step_block(self.source, 'Set App Store "What\'s New"')
|
|
44
|
+
|
|
45
|
+
self.assertIn("inputs.manage-app-store-version == 'true'", detector)
|
|
46
|
+
self.assertIn("inputs.manage-app-store-version == 'true'", whats_new)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
if __name__ == "__main__":
|
|
50
|
+
unittest.main()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.34
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.34
|
package/package.json
CHANGED
package/templates/deploy.yml
CHANGED
|
@@ -113,6 +113,11 @@ jobs:
|
|
|
113
113
|
workspace: ${{ steps.flutter.outputs.enabled == 'true' && 'ios/Runner.xcworkspace' || '' }}
|
|
114
114
|
scheme: ${{ steps.flutter.outputs.enabled == 'true' && 'Runner' || '' }}
|
|
115
115
|
run-tests: 'false' # tests belong to the CI gate, not the deploy path
|
|
116
|
+
# A feature-branch TestFlight build must not create or mutate a live
|
|
117
|
+
# App Store version. That also lets it upload while the current version
|
|
118
|
+
# is locked in review. Default-branch deploys retain metadata automation.
|
|
119
|
+
manage-app-store-version: >-
|
|
120
|
+
${{ github.ref_name == github.event.repository.default_branch && 'true' || 'false' }}
|
|
116
121
|
|
|
117
122
|
android:
|
|
118
123
|
name: Android Google Play
|