Skip to content

Add a promote-to-production flow (beta → production) to the Play Store#23104

Draft
oguzkocer wants to merge 2 commits into
trunkfrom
task/promote-to-production
Draft

Add a promote-to-production flow (beta → production) to the Play Store#23104
oguzkocer wants to merge 2 commits into
trunkfrom
task/promote-to-production

Conversation

@oguzkocer

Copy link
Copy Markdown
Contributor

Description

Part of the Faster Releases effort. Adds a Buildkite flow that promotes the current beta build to the Play Store production track without rebuilding, mirroring the existing beta-promotion picker (#23079).

How it works

  • gather_production_candidate reads the version code currently on the beta track (WordPress and Jetpack share it) and, when it's ahead of production, opens a Buildkite confirmation block step and posts the candidate to Slack. There is no picker — a single candidate and a Yes/No gate.
  • On Yes, promote_to_production creates a new production release referencing that already-uploaded AAB via the Play API (the same update_track approach as the beta picker), once per app, so a single confirmation promotes both.
  • If the two apps' version codes on a track disagree, the gather step fails loudly rather than guess, so a half-completed promotion is surfaced instead of stranding an app.

Release status

  • Ships as a draft: the release is created but not rolled out, so a developer starts the rollout from the Play Console. The live staged-rollout path (status: 'inProgress' + a small user_fraction) is present but commented out in promote_version_code_to_production, to switch on once the full flow is ready.

Not in this PR

  • Release notes are handled in a separate PR. Until then a production draft carries no "What's new", which can be added manually in the Play Console before rolling out.
  • Rollout-growth automation (advancing the staged-rollout percentage over time) is a separate follow-up.
  • Manual-trigger only (PIPELINE=promote-production.yml); no Buildkite schedule yet.

Also

  • Shared beta-promotion helpers and constants are renamed for track parity: track-specific names use BETA_* / PRODUCTION_*, shared plumbing keeps PROMOTION_*. The beta lane's behavior is unchanged.

Testing instructions

The promote lanes are trunk-only and act on the real Play Store. To validate off-trunk, branch off this PR, remove the ensure_promotion_on_trunk! calls on that throwaway branch, and run the pipeline there. It ships as a draft, so nothing rolls out to users.

Promote a beta build to production (draft):

  1. Trigger a Buildkite build on the throwaway branch with env PIPELINE=promote-production.yml.
  • Verify the "Gather build to release to production" step posts the candidate version code to Slack and opens a confirmation block step.
  1. Open the Slack link (or the build) and unblock the block step, choosing Yes.
  • Verify the release step promotes the version code to production for WordPress and Jetpack and posts a per-app result to Slack.
  1. Open the Play Console for WordPress and Jetpack, production track.
  • Verify a draft release exists with the promoted version code for both apps, and no rollout has started.

Decline path:

  1. On a fresh run, unblock the block step choosing No.
  • Verify the release step exits without creating a production release.

Nothing-to-release path:

  1. Run the gather step when the beta build is not ahead of production.
  • Verify it posts "Nothing to release" to Slack and opens no block step.

Adds the gather_production_candidate and promote_to_production lanes, the promote-production.yml pipeline, and its command scripts. Promotes the current beta build to the production track as a draft via the Play API for WordPress and Jetpack, gated by a Buildkite confirmation block step. Shared beta-promotion helpers and constants are renamed for track parity.
Comment thread fastlane/lanes/promote.rb Outdated
@dangermattic

Copy link
Copy Markdown
Collaborator
1 Warning
⚠️ This PR is larger than 300 lines of changes. Please consider splitting it into smaller PRs for easier and faster reviews.
1 Message
📖 This PR is still a Draft: some checks will be skipped.

Generated by 🚫 Danger

@oguzkocer oguzkocer requested a review from dangermattic July 15, 2026 07:41
@wpmobilebot

Copy link
Copy Markdown
Contributor

App Icon📲 You can test the changes from this Pull Request in WordPress Android by scanning the QR code below to install the corresponding build.

App NameWordPress Android
Build TypeDebug
Versionpr23104-4be9ac7
Build Number1498
Application IDorg.wordpress.android.prealpha
Commit4be9ac7
Installation URL1v6mn6i361n2g
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot

Copy link
Copy Markdown
Contributor

App Icon📲 You can test the changes from this Pull Request in Jetpack Android by scanning the QR code below to install the corresponding build.

App NameJetpack Android
Build TypeDebug
Versionpr23104-4be9ac7
Build Number1498
Application IDcom.jetpack.android.prealpha
Commit4be9ac7
Installation URL4fjct88h03l10
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants