gowalk-cicd 1.0.55 → 1.0.56
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/CLAUDE.md +4 -2
- package/README.md +21 -12
- package/action/.daemux-version +1 -1
- package/action/action.yml +10 -6
- package/android-action/.daemux-version +1 -1
- package/backend-action/.daemux-version +1 -1
- package/package.json +1 -1
- package/src/install.mjs +2 -0
- package/templates/deploy.yml +23 -4
package/CLAUDE.md
CHANGED
|
@@ -99,8 +99,10 @@ node /path/to/gowalk-cicd/bin/cli.mjs
|
|
|
99
99
|
- Store API calls belong in GitHub Actions. Local tests may build/sign but must
|
|
100
100
|
never connect to App Store Connect or Google Play.
|
|
101
101
|
- Signing material should use encrypted Actions secrets. `deploy.yml`
|
|
102
|
-
materializes `ASC_KEY_P8` + its ID/issuer
|
|
103
|
-
|
|
102
|
+
materializes `ASC_KEY_P8` + its ID/issuer, the Apple distribution identity
|
|
103
|
+
(`IOS_DISTRIBUTION_P12_BASE64`, `IOS_DISTRIBUTION_CERT_META_JSON`,
|
|
104
|
+
`IOS_DISTRIBUTION_CERT_REGISTRY_JSON`), and the Android keystore, properties
|
|
105
|
+
and Play service account into an ephemeral runner checkout.
|
|
104
106
|
Tracked `creds/` files remain a backward-compatible fallback.
|
|
105
107
|
- Backend runtime credentials use the single encrypted `BACKEND_RUNTIME_ENV`
|
|
106
108
|
secret. The action writes it to host-side `.runtime.env` with mode 0600 and
|
package/README.md
CHANGED
|
@@ -40,21 +40,30 @@ account or domain.
|
|
|
40
40
|
|
|
41
41
|
## iOS credentials
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
Use encrypted repository secrets for both the App Store Connect API key and
|
|
44
|
+
the reusable Apple Distribution identity:
|
|
45
|
+
|
|
46
|
+
- `ASC_KEY_P8`, `ASC_KEY_ID`, `ASC_ISSUER_ID`
|
|
47
|
+
- `IOS_DISTRIBUTION_P12_BASE64`
|
|
48
|
+
- `IOS_DISTRIBUTION_CERT_META_JSON`
|
|
49
|
+
- `IOS_DISTRIBUTION_CERT_REGISTRY_JSON`
|
|
50
|
+
|
|
51
|
+
The workflow materializes them with mode `0600` only in the ephemeral runner
|
|
52
|
+
checkout. Secret-backed signing files are never staged or committed by the
|
|
53
|
+
composite action. The distribution identity files come from the signing
|
|
54
|
+
registry provisioner; pass their paths to the secret tooling without printing
|
|
55
|
+
their contents.
|
|
56
|
+
|
|
57
|
+
Legacy private repositories can still provide the API key at:
|
|
58
|
+
|
|
46
59
|
```
|
|
47
60
|
creds/AuthKey_<KEY_ID>_Issuer_<ISSUER_UUID>.p8
|
|
48
61
|
```
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
4. (First time only, per app) Create the app record in App Store Connect. See
|
|
55
|
-
[First-time app setup](#first-time-app-setup) below.
|
|
56
|
-
5. The existing metadata-rich form
|
|
57
|
-
`*(key_id_<KEY_ID>_issuer_<UUID>_vendor_id_<ID>).p8` is also accepted.
|
|
62
|
+
|
|
63
|
+
The filename encodes both the key ID and issuer ID. The metadata-rich form
|
|
64
|
+
`*(key_id_<KEY_ID>_issuer_<UUID>_vendor_id_<ID>).p8` is also accepted. Never
|
|
65
|
+
commit this fallback to a public repository. The app record must already exist
|
|
66
|
+
in App Store Connect; see [First-time app setup](#first-time-app-setup).
|
|
58
67
|
|
|
59
68
|
## Backend deploy (Python + Postgres, Docker)
|
|
60
69
|
|
package/action/.daemux-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.56
|
package/action/action.yml
CHANGED
|
@@ -10,12 +10,9 @@
|
|
|
10
10
|
name: iOS native TestFlight deploy
|
|
11
11
|
description: >
|
|
12
12
|
Build a native Swift/SwiftUI iOS app on a macOS runner and upload it to
|
|
13
|
-
TestFlight.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
T-30 days). Caller workflow MUST grant ``permissions: contents: write`` so
|
|
17
|
-
the action can commit the refreshed signing identity back to the default
|
|
18
|
-
branch on push events. Only secrets required are the ASC API key trio.
|
|
13
|
+
TestFlight. Reuses an encrypted Apple Distribution identity when supplied,
|
|
14
|
+
or provisions one through App Store Connect for legacy checkout-backed
|
|
15
|
+
consumers. App Store provisioning profiles are reconciled at runtime.
|
|
19
16
|
|
|
20
17
|
inputs:
|
|
21
18
|
project:
|
|
@@ -60,6 +57,12 @@ inputs:
|
|
|
60
57
|
listing or revoking any existing certificate.
|
|
61
58
|
required: false
|
|
62
59
|
default: "revoke-oldest"
|
|
60
|
+
persist-signing-cache:
|
|
61
|
+
description: >
|
|
62
|
+
Commit refreshed signing files back to the default branch. Set to
|
|
63
|
+
'false' when credentials were materialized from encrypted secrets.
|
|
64
|
+
required: false
|
|
65
|
+
default: "true"
|
|
63
66
|
upload:
|
|
64
67
|
description: "Set to 'false' to stop after producing the IPA"
|
|
65
68
|
required: false
|
|
@@ -518,6 +521,7 @@ runs:
|
|
|
518
521
|
# commit and clutter PR diffs). The signing identity is a long-lived
|
|
519
522
|
# artifact owned by the canonical branch.
|
|
520
523
|
if: ${{ inputs.archive == 'true'
|
|
524
|
+
&& inputs.persist-signing-cache == 'true'
|
|
521
525
|
&& github.event_name == 'push'
|
|
522
526
|
&& github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
|
|
523
527
|
shell: bash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.56
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.56
|
package/package.json
CHANGED
package/src/install.mjs
CHANGED
|
@@ -213,6 +213,8 @@ function printSummary() {
|
|
|
213
213
|
console.log('Next steps:');
|
|
214
214
|
console.log(' Recommended: configure encrypted Actions secrets:');
|
|
215
215
|
console.log(' ASC_KEY_P8, ASC_KEY_ID, ASC_ISSUER_ID');
|
|
216
|
+
console.log(' IOS_DISTRIBUTION_P12_BASE64, IOS_DISTRIBUTION_CERT_META_JSON');
|
|
217
|
+
console.log(' IOS_DISTRIBUTION_CERT_REGISTRY_JSON');
|
|
216
218
|
console.log(' ANDROID_UPLOAD_KEY_BASE64, ANDROID_SIGNING_PROPERTIES');
|
|
217
219
|
console.log(' GOOGLE_PLAY_SERVICE_ACCOUNT_JSON');
|
|
218
220
|
console.log(' The workflow materializes them with mode 0600 only on its ephemeral runner.');
|
package/templates/deploy.yml
CHANGED
|
@@ -36,18 +36,35 @@ jobs:
|
|
|
36
36
|
fetch-depth: 0
|
|
37
37
|
persist-credentials: true
|
|
38
38
|
- name: Materialize encrypted iOS credentials
|
|
39
|
+
id: ios_credentials
|
|
39
40
|
shell: bash
|
|
40
41
|
env:
|
|
41
42
|
CI_ASC_KEY_P8: ${{ secrets.ASC_KEY_P8 }}
|
|
42
43
|
CI_ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
|
|
43
44
|
CI_ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
|
|
45
|
+
CI_DISTRIBUTION_P12: ${{ secrets.IOS_DISTRIBUTION_P12_BASE64 }}
|
|
46
|
+
CI_DISTRIBUTION_META: ${{ secrets.IOS_DISTRIBUTION_CERT_META_JSON }}
|
|
47
|
+
CI_DISTRIBUTION_REGISTRY: ${{ secrets.IOS_DISTRIBUTION_CERT_REGISTRY_JSON }}
|
|
44
48
|
run: |
|
|
45
|
-
[ -n "${CI_ASC_KEY_P8:-}" ] || exit 0
|
|
46
|
-
: "${CI_ASC_KEY_ID:?ASC_KEY_ID secret is required with ASC_KEY_P8}"
|
|
47
|
-
: "${CI_ASC_ISSUER_ID:?ASC_ISSUER_ID secret is required with ASC_KEY_P8}"
|
|
48
49
|
umask 077
|
|
49
50
|
mkdir -p creds
|
|
50
|
-
|
|
51
|
+
if [ -n "${CI_ASC_KEY_P8:-}" ]; then
|
|
52
|
+
: "${CI_ASC_KEY_ID:?ASC_KEY_ID secret is required with ASC_KEY_P8}"
|
|
53
|
+
: "${CI_ASC_ISSUER_ID:?ASC_ISSUER_ID secret is required with ASC_KEY_P8}"
|
|
54
|
+
printf '%s' "$CI_ASC_KEY_P8" \
|
|
55
|
+
> "creds/AuthKey_${CI_ASC_KEY_ID}_Issuer_${CI_ASC_ISSUER_ID}.p8"
|
|
56
|
+
fi
|
|
57
|
+
if [ -z "${CI_DISTRIBUTION_P12:-}${CI_DISTRIBUTION_META:-}${CI_DISTRIBUTION_REGISTRY:-}" ]; then
|
|
58
|
+
echo "source=checkout" >> "$GITHUB_OUTPUT"
|
|
59
|
+
exit 0
|
|
60
|
+
fi
|
|
61
|
+
: "${CI_DISTRIBUTION_P12:?IOS_DISTRIBUTION_P12_BASE64 secret is required}"
|
|
62
|
+
: "${CI_DISTRIBUTION_META:?IOS_DISTRIBUTION_CERT_META_JSON secret is required}"
|
|
63
|
+
: "${CI_DISTRIBUTION_REGISTRY:?IOS_DISTRIBUTION_CERT_REGISTRY_JSON secret is required}"
|
|
64
|
+
printf '%s' "$CI_DISTRIBUTION_P12" | base64 -D > creds/cert.p12
|
|
65
|
+
printf '%s' "$CI_DISTRIBUTION_META" > creds/cert.meta.json
|
|
66
|
+
printf '%s' "$CI_DISTRIBUTION_REGISTRY" > creds/cert.registry.json
|
|
67
|
+
echo "source=encrypted" >> "$GITHUB_OUTPUT"
|
|
51
68
|
- name: Detect Flutter
|
|
52
69
|
id: flutter
|
|
53
70
|
shell: bash
|
|
@@ -141,6 +158,8 @@ jobs:
|
|
|
141
158
|
# is locked in review. Default-branch deploys retain metadata automation.
|
|
142
159
|
manage-app-store-version: >-
|
|
143
160
|
${{ github.ref_name == github.event.repository.default_branch && 'true' || 'false' }}
|
|
161
|
+
persist-signing-cache: >-
|
|
162
|
+
${{ steps.ios_credentials.outputs.source == 'encrypted' && 'false' || 'true' }}
|
|
144
163
|
# Repository variable FIREBASE_APP_ID: the app's Firebase App ID(s),
|
|
145
164
|
# comma-separated when it ships both platforms. With an iOS id the
|
|
146
165
|
# action uploads the archive's dSYMs to Crashlytics before TestFlight.
|