AINFRA-2526: Support synchronized iOS and tvOS release updates#4586
Conversation
e4750d3 to
1063256
Compare
|
@iangmaia can we retarget to the 8.15 release branch so we can test the builds during the 8.15 release cycle? thanks |
1063256 to
86daf6b
Compare
86daf6b to
a2d0165
Compare
There was a problem hiding this comment.
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.1overrides 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.. |
| 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? | ||
|
|
| # @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| |
There was a problem hiding this comment.
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?
| # @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| |
There was a problem hiding this comment.
Done in 5dfd717. I kept the nil default because the default depends on the selected platform; I've also clarified the YARD docs.
| # @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| |
There was a problem hiding this comment.
Ditto.
| # @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| |
There was a problem hiding this comment.
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.
SergioEstevao
left a comment
There was a problem hiding this comment.
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?
|
@SergioEstevao Re: retargeting to |
|
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. |
|
Updated the PR to use release-toolkit PR #743 for GitHub release asset uploads. The custom Fastfile |
599d889 to
a5c1cf1
Compare
mokagio
left a comment
There was a problem hiding this comment.
Looking good.
I merged wordpress-mobile/release-toolkit#743 and will release a new version, point it here and merge.
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
RELEASE_PLATFORMis missing.upload_github_release_assetsaction.Testing
TBD: run a few tests targeting
8.15before merging for8.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
CHANGELOG.mdif necessary.