gowalk-cicd 1.0.137 → 1.0.138

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 CHANGED
@@ -415,7 +415,9 @@ node /path/to/gowalk-cicd/bin/cli.mjs
415
415
  change the Google account proxy. Update workflow wiring as well as action directories.
416
416
 
417
417
  - Mobile Deploy watches `.factory/releases/mobile.json`, produced from committed task source and
418
- repository variables. Unknown inputs and embedded editors remain in its source proof; native trees
418
+ the named build-variable allow-list shared by freeze and runtime in `mobile_inputs.cjs`.
419
+ The list follows `templates/deploy.yml`; rotating Play ownership leases stay excluded.
420
+ Unknown inputs and embedded editors remain in its source proof; native trees
419
421
  are platform-scoped. Backend/web deployments remain independent. Confirmed store uploads are
420
422
  recorded immediately in repository deployment receipts; retries reuse their prior-run evidence.
421
423
  An uncertain upload never starts another binary automatically. Preserve its signed artifact,
@@ -1 +1 @@
1
- 1.0.137
1
+ 1.0.138
@@ -19,20 +19,22 @@ function input(name, platform) {
19
19
  return true;
20
20
  }
21
21
 
22
- // Repository variables that are OWNERSHIP LEASES, not build inputs. They rotate
23
- // as a normal part of store work — `APP_ROBOT_PLAY_EDIT_BINDING` is re-issued
24
- // whenever the panel acquires Play edit ownership — and nothing they contain
25
- // reaches a compiler. Digesting them froze the release intent against ordinary
26
- // Play activity: on 2026-09-10 a session uploaded the post-fix AAB and submitted
27
- // Play through the Developer API, which rotated the binding, and the very next
28
- // Mobile Deploy refused with `mobile_release_configuration_changed` and skipped
29
- // BOTH platform jobs — so the iOS build the intent existed to produce never ran,
30
- // blocked by an Android ownership record.
31
- const LEASE_VARIABLES = new Set(['APP_ROBOT_PLAY_EDIT_BINDING']);
22
+ // Named vars read by templates/deploy.yml, except the rotating Play ownership
23
+ // lease: it authorizes provider access but never changes a build. Keep the list
24
+ // checked against the template, and share the projection with the freeze CLI.
25
+ const BUILD_VARIABLES = [
26
+ 'BACKEND_API_DOMAIN', 'BACKEND_APP_NAME', 'BACKEND_DEPLOY_HOST', 'BACKEND_HEALTH_PATH',
27
+ 'DEPLOY_PLATFORMS', 'FIREBASE_APP_ID', 'GOOGLE_PLAY_STATUS', 'GOOGLE_PLAY_TRACK',
28
+ 'GOOGLE_PLAY_USER_FRACTION', 'JAVA_VERSION', 'ONBOARDING_PUBLIC_ORIGIN',
29
+ ];
30
+
31
+ function buildVariables(value = {}) {
32
+ return Object.fromEntries(BUILD_VARIABLES.filter(name => Object.hasOwn(value, name))
33
+ .map(name => [name, value[name]]));
34
+ }
32
35
 
33
36
  function configuration(value = {}) {
34
- const build = Object.entries(value).filter(([name]) => !LEASE_VARIABLES.has(name));
35
- return digest(JSON.stringify(Object.fromEntries(build.sort(([a], [b]) => a.localeCompare(b)))));
37
+ return digest(JSON.stringify(buildVariables(value)));
36
38
  }
37
39
 
38
40
  function fingerprint(platform, ref = 'HEAD') {
@@ -90,4 +92,4 @@ function read(variables = {}) {
90
92
  }
91
93
  return manifest;
92
94
  }
93
- module.exports = {INTENT, SCHEMA, input, fingerprint, create, read, configuration};
95
+ module.exports = {INTENT, SCHEMA, BUILD_VARIABLES, buildVariables, input, fingerprint, create, read, configuration};
@@ -1 +1 @@
1
- 1.0.137
1
+ 1.0.138
@@ -1 +1 @@
1
- 1.0.137
1
+ 1.0.138
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gowalk-cicd",
3
- "version": "1.0.137",
3
+ "version": "1.0.138",
4
4
  "description": "Zero-config GitHub Actions delivery for iOS TestFlight and Android Google Play.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/release.mjs CHANGED
@@ -12,17 +12,17 @@ export function variables(repository, execute) {
12
12
  for (const scope of scopes) {
13
13
  const pages = JSON.parse(execute('gh', ['api', `repos/${repository}/actions/${scope}?per_page=100`,
14
14
  '--paginate', '--slurp']));
15
- if (!Array.isArray(pages) || pages.some(page => !Array.isArray(page.variables))) {
15
+ if (!Array.isArray(pages) || !pages.length || pages.some(page => !Array.isArray(page?.variables))) {
16
16
  throw Error('mobile_release_configuration_unverified');
17
17
  }
18
18
  for (const row of pages.flatMap(page => page.variables)) {
19
- if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(row.name) || typeof row.value !== 'string') {
19
+ if (!row || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(row.name) || typeof row.value !== 'string') {
20
20
  throw Error('mobile_release_configuration_unverified');
21
21
  }
22
22
  result[row.name] = row.value;
23
23
  }
24
24
  }
25
- return result;
25
+ return inputs.buildVariables(result);
26
26
  }
27
27
 
28
28
  export function release(platform) {