Skip to content

AINFRA-2526: Support synchronized iOS and tvOS release updates#4586

Merged
mokagio merged 9 commits into
trunkfrom
iangmaia/ainfra-2526-sync-ios-tvos-release-updates
Jun 30, 2026
Merged

AINFRA-2526: Support synchronized iOS and tvOS release updates#4586
mokagio merged 9 commits into
trunkfrom
iangmaia/ainfra-2526-sync-ios-tvos-release-updates

Conversation

@iangmaia

@iangmaia iangmaia commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Related to AINFRA-2526
ReleasesV2 PR: 224506-ghe-Automattic/wpcom
Release-toolkit PR: wordpress-mobile/release-toolkit#743


Updates Pocket Casts release automation so iOS and tvOS share release versioning, while build/upload work is split into per-platform retryable CI runs.

Summary

  • tvOS release builds now use the shared release version/build values.
  • Release CI now builds/uploads one platform at a time and fails fast when RELEASE_PLATFORM is missing.
  • iOS owns GitHub release creation and the release Slack announcement; tvOS attaches its archive to the existing release.
  • GitHub release assets are updated before TestFlight upload and now use release-toolkit's upload_github_release_assets action.
  • Adds explicit tvOS App Store Connect metadata handling.

Testing

TBD: run a few tests targeting 8.15 before merging for 8.16.

Validated Ruby/shell syntax and fail-fast behavior locally. Full end-to-end validation requires App Store Connect signing/secrets and the release cycle.

Checklist

  • I have considered if this change warrants user-facing release notes and have added them to CHANGELOG.md if necessary.
  • I have considered adding unit tests for my changes.
  • I have updated (or requested that someone edit) the Event Horizon schema to reflect any new or changed analytics.

@iangmaia iangmaia force-pushed the iangmaia/ainfra-2526-sync-ios-tvos-release-updates branch 2 times, most recently from e4750d3 to 1063256 Compare June 24, 2026 12:21
@SergioEstevao SergioEstevao added this to the 8.15 ❄️ milestone Jun 24, 2026
@SergioEstevao

Copy link
Copy Markdown
Contributor

@iangmaia can we retarget to the 8.15 release branch so we can test the builds during the 8.15 release cycle? thanks

@iangmaia iangmaia force-pushed the iangmaia/ainfra-2526-sync-ios-tvos-release-updates branch from 1063256 to 86daf6b Compare June 24, 2026 12:27
@SergioEstevao SergioEstevao changed the base branch from trunk to release/8.15 June 24, 2026 12:54
@SergioEstevao SergioEstevao changed the base branch from release/8.15 to trunk June 24, 2026 12:55
@iangmaia iangmaia force-pushed the iangmaia/ainfra-2526-sync-ios-tvos-release-updates branch from 86daf6b to a2d0165 Compare June 24, 2026 14:08
@iangmaia iangmaia marked this pull request as ready for review June 24, 2026 14:11
@iangmaia iangmaia requested a review from a team as a code owner June 24, 2026 14:11
Copilot AI review requested due to automatic review settings June 24, 2026 14:11
@iangmaia iangmaia requested a review from a team as a code owner June 24, 2026 14:11
@iangmaia iangmaia requested review from SergioEstevao and removed request for a team June 24, 2026 14:11

Copilot AI 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.

Pull request overview

This PR updates the iOS/tvOS release automation so both platforms share the same release version/build numbers and can be built/uploaded together in the release CI flow.

Changes:

  • Removes tvOS-specific MARKETING_VERSION = 0.1 overrides so tvOS uses the shared iOS release versioning.
  • Expands Buildkite release pipelines to build and upload both iOS + tvOS artifacts (TestFlight, Sentry dSYMs, GitHub Release assets).
  • Extends Fastlane to support tvOS App Store Connect metadata uploads and attaching multiple archives to GitHub releases.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
podcasts.xcodeproj/project.pbxproj Removes hardcoded tvOS MARKETING_VERSION overrides so shared versioning applies.
Pocket Casts TV App/Config/PocketCastsTV.base.xcconfig Drops the tvOS-specific marketing version override to inherit shared release version values.
fastlane/Fastfile Adds tvOS metadata lane + factors metadata upload helper; updates GitHub release lane to support multiple archives.
.buildkite/release-builds.yml Renames steps to reflect synchronized iOS + tvOS release builds/uploads.
.buildkite/commands/release-upload.sh Uploads both iOS + tvOS builds to TestFlight; uploads both dSYMs to Sentry; creates GitHub release.
.buildkite/commands/release-build.sh Builds both iOS and tvOS App Store Connect artifacts in the release build step.
.buildkite/commands/build-tvos-app-store.sh Updates comment clarifying why CI tvOS build numbers are prefixed with 0..

Comment thread fastlane/Fastfile Outdated
Comment on lines 853 to 855
upload_assets = Array(archive_zip_paths || [archive_zip_path].compact)
upload_assets = [APP_STORE_CONNECT_XCARCHIVE_ZIP_PATH, APP_STORE_CONNECT_TVOS_XCARCHIVE_ZIP_PATH] if upload_assets.empty?

@iangmaia iangmaia Jun 29, 2026

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.

Done in 16e3095.

@iangmaia iangmaia marked this pull request as draft June 24, 2026 15:27
Comment thread fastlane/Fastfile Outdated
Comment on lines +607 to +610
# @param notify_slack [Boolean, nil] If true, sends the GitHub release Slack notification. Defaults to true for iOS, false for tvOS.
# @param create_release [Boolean, nil] If true, creates the GitHub Release if missing. Defaults to true for iOS, false for tvOS.
#
lane :trigger_beta_build do |branch_to_build:|
trigger_buildkite_release_build(branch: branch_to_build, beta: true)
lane :trigger_beta_build do |branch_to_build:, platform: 'ios', notify_slack: nil, create_release: nil|

@mokagio mokagio Jun 26, 2026

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.

There's code in the method to handle the nil -> Boolean conversion, but given the YARD docs define both notify_slack and create_release as Boolean only, maybe it would be clearer to do the same here?

Suggested change
# @param notify_slack [Boolean, nil] If true, sends the GitHub release Slack notification. Defaults to true for iOS, false for tvOS.
# @param create_release [Boolean, nil] If true, creates the GitHub Release if missing. Defaults to true for iOS, false for tvOS.
#
lane :trigger_beta_build do |branch_to_build:|
trigger_buildkite_release_build(branch: branch_to_build, beta: true)
lane :trigger_beta_build do |branch_to_build:, platform: 'ios', notify_slack: nil, create_release: nil|
# @param notify_slack [Boolean] If true, sends the GitHub release Slack notification. Defaults to true.
# @param create_release [Boolean] If true, creates the GitHub Release if missing. Defaults to true.
#
lane :trigger_beta_build do |branch_to_build:, platform: 'ios', notify_slack: true, create_release: true|

@iangmaia iangmaia Jun 29, 2026

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.

Done in 5dfd717. I kept the nil default because the default depends on the selected platform; I've also clarified the YARD docs.

Comment thread fastlane/Fastfile Outdated
Comment on lines +621 to +624
# @param notify_slack [Boolean, nil] If true, sends the GitHub release Slack notification. Defaults to true for iOS, false for tvOS.
# @param create_release [Boolean, nil] If true, creates the GitHub Release if missing. Defaults to true for iOS, false for tvOS.
#
lane :trigger_release_build do |branch_to_build:|
trigger_buildkite_release_build(branch: branch_to_build, beta: false)
lane :trigger_release_build do |branch_to_build:, platform: 'ios', notify_slack: nil, create_release: nil|

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.

Ditto.

Suggested change
# @param notify_slack [Boolean, nil] If true, sends the GitHub release Slack notification. Defaults to true for iOS, false for tvOS.
# @param create_release [Boolean, nil] If true, creates the GitHub Release if missing. Defaults to true for iOS, false for tvOS.
#
lane :trigger_release_build do |branch_to_build:|
trigger_buildkite_release_build(branch: branch_to_build, beta: false)
lane :trigger_release_build do |branch_to_build:, platform: 'ios', notify_slack: nil, create_release: nil|
# @param notify_slack [Boolean] If true, sends the GitHub release Slack notification. Defaults to true.
# @param create_release [Boolean] If true, creates the GitHub Release if missing. Defaults to true.
#
lane :trigger_release_build do |branch_to_build:, platform: 'ios', notify_slack: true, create_release: true|

@iangmaia iangmaia Jun 29, 2026

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.

Done in 5dfd717. Same reasoning here: using true as the lane default would make omitted tvOS manual triggers create the GitHub release and notify Slack, so I kept the nil check and clarified that it preserves the platform default.

@mokagio mokagio 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.

@iangmaia looking good so far

@SergioEstevao SergioEstevao 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.

From my side is looking good to. But I guess only when we test on a release we will be able to see the builds produced?

@iangmaia iangmaia self-assigned this Jun 29, 2026
@iangmaia iangmaia added the [Type] Tooling Issues related to tooling: build tools, ruby, scripts, etc. label Jun 29, 2026
@iangmaia iangmaia modified the milestones: 8.15 ❄️, 8.16 Jun 29, 2026
@iangmaia iangmaia removed the Releases label Jun 29, 2026
@iangmaia

iangmaia commented Jun 29, 2026

Copy link
Copy Markdown
Contributor Author

@SergioEstevao Re: retargeting to release/8.15: I left the base as trunk; if we want to test it in release/8.15, maybe we could cherry-pick the changes to release/8.15, but in principle I'd rather test it manually first to then run the 8.16 cycle.

@iangmaia iangmaia requested a review from mokagio June 29, 2026 21:30
@iangmaia

iangmaia commented Jun 29, 2026

Copy link
Copy Markdown
Contributor Author

Note that I need to test the PR a bit more before manually running a more substantial test, that's why I was reluctant to put it in ready for review. At the same time, I think it's already in a good state, so I'll do it and update it accordingly.

@iangmaia iangmaia marked this pull request as ready for review June 29, 2026 21:37
@iangmaia

Copy link
Copy Markdown
Contributor Author

Updated the PR to use release-toolkit PR #743 for GitHub release asset uploads. The custom Fastfile upload_github_release_assets helper is removed, the lane now calls the plugin action with replace_existing: true, and the plugin is temporarily pinned to the PR #743 commit until it is released through RubyGems. Done in 650b7ef.

@iangmaia iangmaia force-pushed the iangmaia/ainfra-2526-sync-ios-tvos-release-updates branch from 599d889 to a5c1cf1 Compare June 30, 2026 08:11

@mokagio mokagio 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.

Looking good.

I merged wordpress-mobile/release-toolkit#743 and will release a new version, point it here and merge.

Comment thread Gemfile Outdated
@mokagio mokagio enabled auto-merge June 30, 2026 09:56
@mokagio mokagio merged commit 69fc563 into trunk Jun 30, 2026
4 checks passed
@mokagio mokagio deleted the iangmaia/ainfra-2526-sync-ios-tvos-release-updates branch June 30, 2026 10:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Type] Tooling Issues related to tooling: build tools, ruby, scripts, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants