Skip to content

Pick release notes during beta promotion - #23144

Merged
oguzkocer merged 5 commits into
trunkfrom
task/static-release-notes
Aug 6, 2026
Merged

Pick release notes during beta promotion#23144
oguzkocer merged 5 commits into
trunkfrom
task/static-release-notes

Conversation

@oguzkocer

Copy link
Copy Markdown
Contributor

Description

Part of the Faster Releases effort. Lets a developer choose a release note ("what's new") when promoting a build to the Play Store beta track, alongside picking the build. The note is set on the beta release; a later promotion to production reuses that release, so the same note follows the build.

The notes come from a fixed, translated set (STATIC_RELEASE_NOTE_OPTIONS, one option for now, serious) rather than being written per release. Adding an option is a data change: a <key>.txt source plus a row in the list.

How it works

  • The beta-promotion block step gains a second field, Release notes, populated from STATIC_RELEASE_NOTE_OPTIONS (fastlane/Fastfile).
  • promote_to_beta takes the chosen option as release_notes_option (read from Buildkite meta-data by promote-to-beta.sh), validates it, and static_release_notes attaches the per-locale text to the beta release.
  • download_static_release_notes (fastlane/lanes/localization.rb) pulls the translated options from GlotPress into fastlane/{metadata,jetpack_metadata}/android/<locale>/release_notes_static/<option>.txt.
  • Each option's English source is in WordPress/{metadata,jetpack_metadata}/release_notes_static/<option>.txt; its GlotPress string release_note_static_<option> is registered in generate_playstore_strings.

Translations

Each option is translated once through GlotPress (a stable key, so it doesn't change per release). release_note_static_serious is added to each PlayStoreStrings.po for GlotPress to pick up; en-US is committed. Until a locale is translated, the promotion attaches the en-US note and Play falls back to the default listing language.

The .po entry was added by hand rather than regenerating, which would also churn the per-version release_note key.

Testing instructions

The promote lane is trunk-only and acts on the real Play Store (as a draft), so e2e-test from a throwaway branch with the guard removed.

Set up a test branch:

  1. Branch off this PR (e.g. task/static-release-notes-e2e).
  2. Remove the ensure_promotion_on_trunk! calls in fastlane/lanes/promote.rb and commit.

Run the picker:

  1. Start a Buildkite build on the test branch with env PIPELINE=promote-beta.yml, with a promotable build above the current beta version code.
  • Verify the block step shows both a "Build to promote" and a "Release notes" field.
  1. Unblock the step, choosing a build and the Serious release note.
  • Verify promote_to_beta runs and posts a per-app result to Slack.

Confirm in the Play Console:

  1. Open the Play Console for WordPress, then Jetpack, beta track.
  • Verify a draft release for the chosen version code carries the en-US "what's new" text for both apps.
  • Discard the draft release(s) after verifying.

@oguzkocer oguzkocer added this to the 27.1 milestone Jul 24, 2026
@wpmobilebot

wpmobilebot commented Jul 24, 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
Versionpr23144-c2b93c3
Build Number1498
Application IDorg.wordpress.android.prealpha
Commitc2b93c3
Installation URL7de234apppcf8
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot

wpmobilebot commented Jul 24, 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
Versionpr23144-c2b93c3
Build Number1498
Application IDcom.jetpack.android.prealpha
Commitc2b93c3
Installation URL7gc5ftu0q47ko
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 24, 2026 06:06
@oguzkocer
oguzkocer requested a review from a team as a code owner July 24, 2026 06:06
@oguzkocer
oguzkocer requested a review from jkmassel July 24, 2026 06:06

@jkmassel jkmassel left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One note, but this looks good otherwise

Comment thread fastlane/lanes/promote.rb Outdated
locale = File.basename(File.dirname(path, 2))
AndroidPublisher::LocalizedText.new(language: locale, text: text)
end
UI.important("No static release notes found for option #{option.inspect} (#{app}).") if notes.empty?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should this be a crash instead of a warning?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in c2b93c3.

Adds static "what's new" options (one for now, `serious`) chosen from a
second field in the beta-promotion block step. The picked option's notes are
set on the beta release, and the production promote carries them over.

Changes:
- `STATIC_RELEASE_NOTE_OPTIONS` registry (Fastfile)
- Release-notes select field in the beta picker; `promote_to_beta` takes
  `release_notes_option` (read from Buildkite meta-data by promote-to-beta.sh)
- `static_release_notes` attaches the per-locale notes to the beta release
- `download_static_release_notes` lane pulls the translations from GlotPress
- English source files + seeded en-US metadata

Translations are seeded separately via GlotPress; until then promotions
attach the committed en-US note and Play falls back to the default language.
Adds `release_note_static_serious` to both apps' `PlayStoreStrings.po` so
GlotPress can translate it. Added by hand rather than regenerating the `.po`,
which would also churn the per-version `release_note` key.
Lint/RedundantDirGlobSort: drop the redundant sort (Dir.glob is already
sorted). Style/NestedFileDirname: use File.dirname(path, 2).
write_beta_promotion_steps_file exceeded the 30-line limit after the
release-notes field was added; move the fields into beta_promotion_block_fields.
Per PR review: a missing option is a misconfiguration that should stop the
promotion, not just log a warning.
@oguzkocer
oguzkocer force-pushed the task/static-release-notes branch from 767a581 to c2b93c3 Compare August 6, 2026 20:37
@oguzkocer
oguzkocer enabled auto-merge (squash) August 6, 2026 20:37
@oguzkocer
oguzkocer merged commit 9e5209a into trunk Aug 6, 2026
17 of 20 checks passed
@oguzkocer
oguzkocer deleted the task/static-release-notes branch August 6, 2026 20:40
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