docs/ship-step.md, pitfall 110 (pipeline exit 7 and double uploads), CHANGELOG Unreleased

This commit is contained in:
CRTkafa 2026-10-23 13:13:28 +08:00
parent 06a0b424f5
commit 2e888a01cc
4 changed files with 149 additions and 0 deletions

View file

@ -1311,3 +1311,15 @@ that fails without the fix (see CONTRIBUTING.md).
- **Do:** write the notes without other platforms or stores; `[play]` / `[apple]` tags split shared notes.
- **Guard:** `storebound check` reports the "What's new" of every Play language, `play build` refuses before Gradle runs
(`notesGuard`), `play upload` / `play release` refuse before any edit (`refusePlayNotes`).
## 110. A pipeline read "exit 7" as a failure, or uploaded the same build twice
- **What happens:** a CI stage re-ran after a crash (or a retry) and either uploaded the same versionCode / build
number again (Play 403 "APK specifies a version code that has already been used", App Store Connect "redundant
binary upload") or failed the job on exit 7, which used to mean "processing timeout" for `apple upload` alone.
- **Do:** call the ship commands under the ship-step contract (`--json` / `--result-file`, docs/ship-step.md): exit 7
is "nothing to do, it is there", with the track and state in the result; exit 3 names what the owner must do with
the console deep link (`error.consoleUrl`); exit 4 is the store refusing. Treat 0 and 7 as success.
- **Guard:** `cli/lib/ship-step.ts` holds the one exit-code mapping; `play upload` and `apple upload` check the store
before sending and stop with exit 7 (`tests/ship-step.test.ts`, fake stores); `--env-file` values are scrubbed from
every output.