Skip to content

CI: stop publishing to Play production on staging → main merges - #794

Open
patrickrb wants to merge 2 commits into
devfrom
chore/no-play-production-on-main
Open

CI: stop publishing to Play production on staging → main merges#794
patrickrb wants to merge 2 commits into
devfrom
chore/no-play-production-on-main

Conversation

@patrickrb

Copy link
Copy Markdown
Owner

Why

Merging stagingmain uploaded 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 — the production (push-to-main) lane now leaves play_track empty:

  • The merge still does everything else: auto-bumped 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 Play and Warn if Play publish failed are gated on a non-empty play_track, so the upload step is simply skipped.
  • The release summary now prints 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 —

git fetch --tags && git push origin android-v1.2.3

— which re-runs the Android release lane in its tag lane and uploads to the Play production track. (Tags created by the release API with GITHUB_TOKEN don't trigger workflows, so the merge itself can't kick this off.)

Unchanged: staging → Play internal, and an android-v* tag push → Play production.

docs/release-pipeline.md updated 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:

  • Ran the Compute version and release tag step standalone for all three lanes: productionshould_release=true, play_track= (empty), tag android-v0.151.0; staginginternal; android-v* tag → production.
  • Ran the Release summary step with an empty and a set track — renders the "not published" line and the normal line respectively.
  • bash -n clean on all 27 run blocks; the workflow parses as YAML.

🤖 Generated with Claude Code

https://claude.ai/code/session_014pyS6BHUwx1JTWdDijX4Be

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
@patrickrb
patrickrb requested a balanced review from Copilot September 1, 2026 14:03
@codecov

codecov Bot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 42.34%. Comparing base (8049fd8) to head (18a39f3).

Additional details and impacted files

Impacted file tree graph

@@            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           
Flag Coverage Δ
android 16.90% <ø> (ø)
native 9.93% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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 main creates 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 notes explicitly has no notes.txt for a tag run and writes only FT8AF $VERSION_NAME, which whatsNewDirectory then 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 main merge 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.

Comment thread .github/workflows/android.yml
Comment thread docs/release-pipeline.md Outdated
Comment thread docs/release-pipeline.md Outdated
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.

2 participants