Updates are agent steps: --yes ships an update of a live app (Play production, App Store submit / release) without an owner gate; the first release stays the owner's (exit 3 OWNER_STEP, --first-release); apple release is a ship step
This commit is contained in:
parent
c247b7e54a
commit
ae9d26d3f6
28 changed files with 562 additions and 44 deletions
|
|
@ -1515,3 +1515,21 @@ that fails without the fix (see CONTRIBUTING.md).
|
|||
- **Guard:** `cli/lib/broker.ts` (config, key file mode, token cache and single flight, grants, preflight, redaction),
|
||||
`cli/lib/google-auth.ts` `playToken` (broker first, local key fallback), `cli/lib/google-access.ts` (403 ->
|
||||
GoogleAccessError, no retry), `tests/credential-broker.test.ts` (a local fake broker).
|
||||
|
||||
|
||||
## 123. Updates are agent steps: a pipeline could not ship a production update without the owner
|
||||
|
||||
- **Symptom:** a CI pipeline shipping a new version of an app that was long on the store was told that production is
|
||||
"the owner's" (an AAB to production refused with "play upload is for testing tracks ... the owner sends it"), though
|
||||
the owner's rule is that updates of a live app ship end to end without a confirmation per update.
|
||||
- **Do:** an update is read from the store (Play: the production track holds a completed / inProgress / halted release;
|
||||
App Store: a version of the platform is or was READY_FOR_SALE) and runs with `--yes`, in a terminal or a pipeline:
|
||||
`storebound play release <aab> --production completed --yes` (or `--production inProgress --fraction 0.05`, or
|
||||
`play upload --track production --yes`), `storebound apple submit --build <n> --yes`, `storebound apple release
|
||||
--manual-release --yes`; `--json` / `--result-file` give the ship-step result (`releaseKind: "update"`), a re-run is
|
||||
exit 7. Only the first-ever release of an app is the owner's: exit 3 `OWNER_STEP` "first release of this app", approved
|
||||
once (`--first-release` after the owner's yes, or bypass mode). Removal from sale and live prices keep their own gates.
|
||||
- **Never:** tell the owner to press a button for an update, pass `--first-release` without the owner's yes, or decide
|
||||
update-or-first from the config instead of the store.
|
||||
- **Guard:** `cli/lib/release-kind.ts` (the kind from the store, the policy), `tests/update-gate.test.ts` (fake stores:
|
||||
update goes through, first release is exit 3, already there is exit 7), docs/bypass.md "Updates are agent steps".
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue