gowalk-cicd 1.0.30 → 1.0.32
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.
|
|
@@ -569,6 +576,7 @@ common ones:
|
|
|
569
576
|
| `uses-non-exempt-encryption` | Value for `ITSAppUsesNonExemptEncryption` |
|
|
570
577
|
| `archive` | `false` to build-only (PR runs without secrets) |
|
|
571
578
|
| `upload` | `false` to archive but not upload to TestFlight |
|
|
579
|
+
| `manage-app-store-version` | `false` to upload without creating/editing the App Store release slot |
|
|
572
580
|
| `app-store-whats-new` | Inline "What's New" text (overrides files) |
|
|
573
581
|
| `ai-metadata` | `false` to disable AI auto-fill of empty ASC metadata |
|
|
574
582
|
| `ai-metadata-model` | GitHub Models model id (default `openai/gpt-4o`) |
|
package/action/.daemux-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.32
|
package/action/action.yml
CHANGED
|
@@ -64,6 +64,13 @@ inputs:
|
|
|
64
64
|
secrets. When 'false', `upload` is ignored.
|
|
65
65
|
required: false
|
|
66
66
|
default: "true"
|
|
67
|
+
manage-app-store-version:
|
|
68
|
+
description: >
|
|
69
|
+
Set to 'false' to archive and upload a TestFlight build without creating
|
|
70
|
+
or editing an App Store version. App Store metadata automation is skipped.
|
|
71
|
+
This is useful for feature-branch validation while a release is in review.
|
|
72
|
+
required: false
|
|
73
|
+
default: "true"
|
|
67
74
|
run-tests:
|
|
68
75
|
description: "Set to 'false' to skip the simulator test stage"
|
|
69
76
|
required: false
|
|
@@ -282,7 +289,7 @@ runs:
|
|
|
282
289
|
| tee -a "$GITHUB_ENV"
|
|
283
290
|
|
|
284
291
|
- name: Resolve App Store version slot (REUSE or CREATE)
|
|
285
|
-
if: ${{ inputs.archive == 'true' }}
|
|
292
|
+
if: ${{ inputs.archive == 'true' && inputs.manage-app-store-version == 'true' }}
|
|
286
293
|
shell: bash
|
|
287
294
|
env:
|
|
288
295
|
APP_STORE_APPLE_ID: ${{ inputs.app-store-apple-id || env.CFG_APP_STORE_APPLE_ID }}
|
|
@@ -328,6 +335,18 @@ runs:
|
|
|
328
335
|
echo "APP_STORE_VERSION_ID=$APP_STORE_VERSION_ID" >> "$GITHUB_ENV"
|
|
329
336
|
echo "Using marketing version $MARKETING_VERSION build $BUILD_NUMBER (decision=$DECISION_JSON)"
|
|
330
337
|
|
|
338
|
+
- name: Resolve TestFlight build number
|
|
339
|
+
if: ${{ inputs.archive == 'true' && inputs.manage-app-store-version == 'false' }}
|
|
340
|
+
shell: bash
|
|
341
|
+
env:
|
|
342
|
+
APP_STORE_APPLE_ID: ${{ inputs.app-store-apple-id || env.CFG_APP_STORE_APPLE_ID }}
|
|
343
|
+
run: |
|
|
344
|
+
set -o pipefail
|
|
345
|
+
BUILD_NUMBER=$(python3 "${{ github.action_path }}/scripts/next_build_number.py")
|
|
346
|
+
echo "BUILD_NUMBER=$BUILD_NUMBER" >> "$GITHUB_ENV"
|
|
347
|
+
echo "APP_STORE_VERSION_ID=" >> "$GITHUB_ENV"
|
|
348
|
+
echo "Using marketing version $MARKETING_VERSION build $BUILD_NUMBER without an App Store version slot"
|
|
349
|
+
|
|
331
350
|
- name: Notice on deprecated profile-name input
|
|
332
351
|
if: ${{ inputs.archive == 'true' && inputs.profile-name != '' }}
|
|
333
352
|
shell: bash
|
|
@@ -690,7 +709,9 @@ runs:
|
|
|
690
709
|
|
|
691
710
|
- name: Detect empty ASC metadata fields
|
|
692
711
|
id: detect_metadata
|
|
693
|
-
if:
|
|
712
|
+
if: >-
|
|
713
|
+
${{ inputs.archive == 'true' && inputs.upload == 'true'
|
|
714
|
+
&& inputs.manage-app-store-version == 'true' && inputs.ai-metadata != 'false' }}
|
|
694
715
|
shell: bash
|
|
695
716
|
env:
|
|
696
717
|
APP_STORE_APPLE_ID: ${{ inputs.app-store-apple-id || env.CFG_APP_STORE_APPLE_ID }}
|
|
@@ -945,6 +966,7 @@ runs:
|
|
|
945
966
|
# with the default (CFG_WHATS_NEW), preserving any AI-generated notes.
|
|
946
967
|
- name: Set App Store "What's New"
|
|
947
968
|
if: ${{ inputs.archive == 'true' && inputs.upload == 'true'
|
|
969
|
+
&& inputs.manage-app-store-version == 'true'
|
|
948
970
|
&& (inputs.app-store-whats-new != '' || env.CFG_WHATS_NEW != '') }}
|
|
949
971
|
shell: bash
|
|
950
972
|
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.32
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.32
|
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
|