Skip to content

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

Merged
oguzkocer merged 2 commits into
trunkfrom
task/promote-to-production
Jul 17, 2026
Merged

Add a promote-to-production flow (beta → production) to the Play Store#23104
oguzkocer merged 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.

Comment thread fastlane/lanes/promote.rb Outdated
@dangermattic

dangermattic commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator
2 Warnings
⚠️ This PR is larger than 300 lines of changes. Please consider splitting it into smaller PRs for easier and faster reviews.
⚠️ PR is not assigned to a milestone.

Generated by 🚫 Danger

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

wpmobilebot commented Jul 15, 2026

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-a25c567
Build Number1498
Application IDorg.wordpress.android.prealpha
Commita25c567
Installation URL05mjsv9i2gcpg
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot

wpmobilebot commented Jul 15, 2026

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-a25c567
Build Number1498
Application IDcom.jetpack.android.prealpha
Commita25c567
Installation URL74n2bl7uvrc2g
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@oguzkocer
oguzkocer marked this pull request as ready for review July 17, 2026 02:54
@oguzkocer
oguzkocer requested a review from a team as a code owner July 17, 2026 02:54
@oguzkocer
oguzkocer requested a review from jkmassel July 17, 2026 02:54
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.
@oguzkocer
oguzkocer force-pushed the task/promote-to-production branch from 4be9ac7 to a25c567 Compare July 17, 2026 20:58
@oguzkocer
oguzkocer enabled auto-merge (squash) July 17, 2026 20:59
@oguzkocer
oguzkocer merged commit b7a8374 into trunk Jul 17, 2026
17 of 22 checks passed
@oguzkocer
oguzkocer deleted the task/promote-to-production branch July 17, 2026 21:05
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.

4 participants