gowalk-cicd 1.0.133 → 1.0.134

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.
@@ -1 +1 @@
1
- 1.0.133
1
+ 1.0.134
@@ -1 +1 @@
1
- 1.0.133
1
+ 1.0.134
@@ -32,6 +32,21 @@ async function upload(program, env, directory, execute = processRunner.execute,
32
32
  }
33
33
  }
34
34
 
35
+ //: A code reaches the annotation only as a bare token: it is interpolated into
36
+ //: workflow-command syntax, so anything outside this shape is reported as such
37
+ //: rather than trusted.
38
+ function state(code) {
39
+ return typeof code === 'string' && /^[a-z0-9_]{1,64}$/.test(code) ? code : 'unknown';
40
+ }
41
+
42
+ function stateAnnotation(receipt) {
43
+ return `::${receipt.ok === true ? 'notice' : 'error'} title=play_upload_state::`
44
+ + `gowalk-cicd/play-upload-state.v1 ok=${receipt.ok === true}`
45
+ + ` code=${state(receipt.code)} review_pending=${receipt.review_pending === true}`
46
+ + ` attempts=${Number.isSafeInteger(receipt.attempts) ? receipt.attempts : 'unknown'}`;
47
+ }
48
+
49
+
35
50
  async function main() {
36
51
  let directory, receipt;
37
52
  try {
@@ -66,10 +81,26 @@ async function main() {
66
81
  appendFileSync(process.env.GITHUB_OUTPUT, `review-pending=${receipt.review_pending}\nreceipt=${encoded}\n`);
67
82
  }
68
83
  console.log(`::${receipt.ok ? 'notice' : 'error'} title=play_upload_result::${encoded}`);
84
+ // The JSON receipt above does not survive as a READABLE annotation on this job.
85
+ // `GOOGLE_PLAY_SERVICE_ACCOUNT_JSON` is a multi-line JSON secret, so Actions
86
+ // registers each of its lines as maskable — and its first and last lines are a
87
+ // bare `{` and `}`. Every brace in this job's output is therefore replaced by
88
+ // `***`, leaving the payload legible to a person but not parseable by the
89
+ // panel, which reads typed check-run annotations and is forbidden the log text.
90
+ // The iOS job emits the same JSON shape unmasked, which is what isolates the
91
+ // cause to this job's secret rather than to redaction policy in general.
92
+ //
93
+ // So the decision-relevant fields also go out brace-free, in the same
94
+ // key=value shape as `play_upload_diagnostic` — which is emitted from this
95
+ // very action and arrives unmasked. `review_pending` is the field that
96
+ // distinguishes an upload from a submission, and losing it is how a green
97
+ // Android job reads as "Play is done" when the AAB sits unreviewed on a
98
+ // test track.
99
+ console.log(stateAnnotation(receipt));
69
100
  if (!receipt.ok) process.exitCode = 1;
70
101
  }
71
102
 
72
- module.exports = {upload, main};
103
+ module.exports = {upload, main, state, stateAnnotation};
73
104
  if (require.main === module) void main().catch(() => {
74
105
  process.stderr.write('play_upload_receipt_failed\n'); process.exitCode = 1;
75
106
  });
@@ -1 +1 @@
1
- 1.0.133
1
+ 1.0.134
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gowalk-cicd",
3
- "version": "1.0.133",
3
+ "version": "1.0.134",
4
4
  "description": "Zero-config GitHub Actions delivery for iOS TestFlight and Android Google Play.",
5
5
  "type": "module",
6
6
  "bin": {