CI: stop publishing to Play production on staging → main merges - #794
Open
patrickrb wants to merge 2 commits into
Open
CI: stop publishing to Play production on staging → main merges#794patrickrb wants to merge 2 commits into
patrickrb wants to merge 2 commits into
Conversation
A merge of staging into main published the AAB straight to the Google Play production track, so a promotion PR shipped to users the moment it merged. Make that a deliberate, separate act instead. The main-push lane now leaves `play_track` empty: the merge still cuts the auto-bumped `android-v<x.y.z>` tag and the full GitHub Release (with the semver + release notes promoted from the staging build it's promoting), but the "Publish AAB to Play" step is skipped. Shipping to production is now done by pushing that `android-v*` tag, which re-runs the release lane in the `tag` lane and uploads to the production track. Unchanged: staging -> Play internal, and the android-v* tag -> Play production. - gate "Publish AAB to Play" / "Warn if Play publish failed" on a non-empty play_track - release summary says "not published" and names the tag to push - docs/release-pipeline.md updated to describe the manual production step Verified by running the "Compute version and release tag" step for all three lanes (production -> track empty + should_release=true, staging -> internal, tag -> production) and the release-summary step with an empty and a set track; `bash -n` clean on all 27 run blocks and the YAML parses. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014pyS6BHUwx1JTWdDijX4Be
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #794 +/- ##
=========================================
Coverage 42.34% 42.34%
Complexity 226 226
=========================================
Files 267 267
Lines 31834 31834
Branches 3650 3650
=========================================
Hits 13479 13479
Misses 18097 18097
Partials 258 258
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
🟡 Changes recommended
The proposed tag push is a no-op because the tag already exists remotely, leaving no functioning production-publish path.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Separates Play production publishing from main merges.
Changes:
- Skips AAB publishing when
maincreates a release. - Documents manual production publishing.
- Updates release summaries for skipped publishing.
File summaries
| File | Description |
|---|---|
.github/workflows/android.yml |
Gates Play publishing on a configured track. |
docs/release-pipeline.md |
Documents the revised release process. |
Review details
Suppressed comments (2)
.github/workflows/android.yml:684
- Routing production publishing through the tag lane also drops the promoted Play release notes.
Write release notesexplicitly has nonotes.txtfor a tag run and writes onlyFT8AF $VERSION_NAME, whichwhatsNewDirectorythen uploads instead of the staging notes previously available in this main run. Persist or recover the promoted notes when manually publishing.
# No Play publish on a staging -> main merge: the merge cuts
# the android-v* tag + GitHub Release only. Pushing that tag
# by hand re-runs this job in the `tag` lane, which is what
# uploads to the Play production track.
play_track=""
docs/release-pipeline.md:31
- A qualifying
mainmerge can still publish Play listing metadata and therefore make user-visible changes, so “never reaches users” overstates this AAB-specific change. Limit the sentence to production binary publication.
**production** track. A merge to `main` on its own never reaches users.
- Files reviewed: 2/2 changed files
- Comments generated: 3
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
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.
Why
Merging
staging→mainuploaded the signed AAB to the Google Play production track as part of the same run, so a promotion PR shipped to users the instant it merged. Production should be a deliberate act, not a side effect of a merge.What changed
.github/workflows/android.yml— theproduction(push-to-main) lane now leavesplay_trackempty:android-v<x.y.z>tag, signed APK/AAB, full GitHub Release, and the semver + release notes promoted from the staging build it's promoting.Publish AAB to PlayandWarn if Play publish failedare gated on a non-emptyplay_track, so the upload step is simply skipped.Play track: none — not published.plus the tag to push.Shipping to production is now manual: push the
android-v<x.y.z>tag the merge created —— which re-runs the Android release lane in its
taglane and uploads to the Play production track. (Tags created by the release API withGITHUB_TOKENdon't trigger workflows, so the merge itself can't kick this off.)Unchanged:
staging→ Play internal, and anandroid-v*tag push → Play production.docs/release-pipeline.mdupdated to match (branch-lifecycle diagram, the staging → main bullet, the new manual-ship bullet, and the Play Console setup note).Verification
No unit-testable code path here (workflow YAML), so this was exercised directly:
Compute version and release tagstep standalone for all three lanes:production→should_release=true,play_track=(empty), tagandroid-v0.151.0;staging→internal;android-v*tag →production.Release summarystep with an empty and a set track — renders the "not published" line and the normal line respectively.bash -nclean on all 27runblocks; the workflow parses as YAML.🤖 Generated with Claude Code
https://claude.ai/code/session_014pyS6BHUwx1JTWdDijX4Be