Skip to content

[feature] the Play track is configuration, and the release goes out on the tag - #280

Merged
YJack0000 merged 1 commit into
mainfrom
feat/play-track
Aug 20, 2026
Merged

[feature] the Play track is configuration, and the release goes out on the tag#280
YJack0000 merged 1 commit into
mainfrom
feat/play-track

Conversation

@YJack0000

Copy link
Copy Markdown
Contributor

What this changes

  • The service account now has Play access (granted 2026-08-20).
  • The Play track becomes the PLAY_TRACK repository variable instead of a hard-coded internal.
  • versionCode → 2, versionName → 0.1.1.

Why

The documented way to grant Play access no longer exists

Setup → API access redirects to the app list, and there is no "Release manager" role anywhere in the console. Google folded service accounts into ordinary user management and roles into individual permission checkboxes. Everything §7 said about linking a Cloud project was describing a flow that is gone — no project link is involved at any point now.

The current path, and what was granted:

Users and permissions → Invite new user, email parley-play-publisher@pathors-play.iam.gserviceaccount.com, App permissions tab (not Account permissions, which would apply to every app in the developer account) → Parley only →

  • 查看應用程式資訊 (唯讀) — the read access the others layer on
  • 將應用程式發布至測試群組
  • 發布正式版…

Deliberately not granted: admin, financial data, order management, test-list management, anything on any other app.

The track was a constant

track: internal was hard-coded, so "publish to production" meant editing this file and cutting a release to change a string. It is now PLAY_TRACK (default internal), overridable per-run with the track dispatch input. PLAY_USER_FRACTION turns a production release into a staged rollout — worth having, since it is the only undo Play offers once a build is live.

The default stays internal, and that is not timidity. Production is not reachable yet: the app dashboard reads 已完成 6 項,共 11 項. Outstanding are 登入詳細資料, 內容分級, 目標對象, 資料安全性, and the app category/contact details. Play refuses a production release until they are done, so defaulting to production would fail every release until someone filled in forms that are declarations about the app, not build config. When they are done, flipping PLAY_TRACK to production is the whole change.

versionCode 2

The first bundle was uploaded by hand on 2026-08-18 as 0.1.0 (1), sitting on the internal track now. That is good news — it clears the "Play refuses a package's first bundle over the API" problem, so automation takes over from here — but it also burns versionCode 1. Play rejects a versionCode it has already seen, so android-v0.1.0 could never have published over the API, whatever else was fixed.

How it was verified

  • Permission grant done in the console and confirmed — the account list went from 1 user to 2, and the confirmation named the right service account and the right app
  • Workflow parses as YAML; dispatch inputs are tag, track, skip_play_upload
  • bunx tsc --noEmit, bunx vitest run
  • The upload itself — proved by tagging android-v0.1.1 right after this merges. Everything before this point was unprovable: no permission, and a burned versionCode.

Docs

§7 rewritten: it described a console that no longer exists. Also records what is left before PLAY_TRACK can point at production.

…n the tag

Two things stood between `git tag` and a build reaching users.

**The service account had no Play access, and the documented way to give it
some no longer exists.** `Setup → API access` redirects to the app list; there
is no "Release manager" role. Google folded service accounts into ordinary user
management and roles into individual permissions, so the path is now
Users and permissions → Invite new user, with the service account's email as
the user. Granted on 2026-08-20, scoped to Parley alone: view app information,
release to testing tracks, release to production. No Cloud-project link is
involved anywhere in that flow, which is most of what the old §7 was about.

**The track was hard-coded to `internal`.** It is now the `PLAY_TRACK`
repository variable, defaulting to `internal`, with a `track` input to override
one run. Moving the whole pipeline to production becomes one variable — no
commit, no release cut to change a constant. `PLAY_USER_FRACTION` turns a
production release into a staged rollout, which is the only undo Play offers
once a build is live.

The default stays `internal` rather than `production` because production is not
reachable yet: the app dashboard reads 6 of 11 setup tasks done, and Play
refuses a production release until content rating, data safety, target audience,
login details and the app category are filled in. Those are declarations about
the app rather than build config, so no amount of CI makes them go away.

`versionCode` goes to 2. The first bundle was uploaded by hand on 2026-08-18 as
`0.1.0 (1)`, which both clears the first-bundle-cannot-use-the-API problem and
burns `versionCode` 1 — `android-v0.1.0` could never have published over the
API, whatever else was fixed.
@YJack0000
YJack0000 merged commit 4e6585a into main Aug 20, 2026
3 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant