Repository navigation
Send Android merges to internal testing, and add a workflow that promotes a build to production - #22
Merged
Conversation
…on request. Every merge that touched `apps/android/` was released to Play's closed testing track. Play reviews each closed release, and a newer submission replaces one still in review, so a day with several merges asked for reviews of builds no tester ever received, and testers could wait on a queue that kept restarting. A push to `main` now releases to the `internal` track, which Play does not review and which reaches testers within minutes. Closed testing gets a build when the workflow is started by hand with the new `closed_testing` box ticked. The input is a checkbox rather than a track name so that `internal` and `alpha` stay the only tracks a run can reach: production is still promoted by hand in Play Console. The docs describe the three steps a build now takes, and note that the internal track has its own tester list. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Releasing to production meant opening Play Console and promoting a release by hand, which is awkward away from a desk and offers no staged rollout without more clicking. "Android promote" is started by hand on `main` and asks Play to release a bundle it already has: the newest build on internal testing, or a named version code, to a percentage of production. Running it again with a larger percentage widens the rollout. Nothing is rebuilt, so production gets the build testers ran, with the name and note it already had. It is its own workflow so that `android.yml`, which runs on every merge, still cannot name the production track. Its key lives on a new `play-production` Environment that wants a reviewer's approval, so starting the run is a request and approving it is the release. The work is done by `.github/scripts/play-promote.mjs`, plain Node with no dependencies, so the production key is only ever handled by code in this repository. It lists Play's tracks instead of asking for them by name, because Google's reference names the internal track `qa` where the upload tools call it `internal`. Its tests run against a stand-in for Play, in a new `play-promote` CI job and again in the workflow before the release step. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two commits, one for each half of how an Android build now moves through Play.
Each merge goes to internal testing
Every merge that touched
apps/android/was released to Play's closed testing track. Play reviews each closed release, and a newer submission replaces one still in review, so a day with several merges asked for reviews of builds no tester ever received, and testers could wait on a queue that kept restarting.mainnow releases to theinternaltrack, which Play does not review and which reaches testers within minutes.mainwith the newclosed_testingbox ticked. The input is a checkbox rather than a track name, sointernalandalphastay the only tracksandroid.ymlcan reach.Promoting to production
Production meant opening Play Console and promoting by hand. "Android promote" (
android-promote.yml) is started by hand onmainand asks Play to release a bundle it already has: the newest build on internal testing, or a named version code, to a percentage of production. Running it again with a larger percentage widens the rollout. Nothing is rebuilt.play-productionEnvironment with a required reviewer: starting the run is a request, approving it is the release..github/scripts/play-promote.mjs, plain Node with no dependencies, so no third-party action or package handles the production key. Its tests run against a stand-in for Play in a newplay-promoteCI job, and again in the workflow before the release step.For the reviewer
releasejob only runs onmain, and the promote script has only met a stand-in. This PR touchesandroid.yml, so merging it uploads a build tointernal: that merge is the first real test.qa; the upload action and other tools call itinternal.android.ymlusesinternal, as the action documents, and the promote script lists tracks and accepts either.play-productionEnvironment with a required reviewer and deployment branches limited tomain, and only then putPLAY_SERVICE_ACCOUNT_JSONon it. GitHub creates an Environment the first time a job names it, with no rules, which is harmless only while it holds no key. The details are indocs/android.md.🤖 Generated with Claude Code