ci(mobile): collapse OTA matrix to single job with parallel code-push#14331
Open
dylanjeffers wants to merge 1 commit into
Open
ci(mobile): collapse OTA matrix to single job with parallel code-push#14331dylanjeffers wants to merge 1 commit into
dylanjeffers wants to merge 1 commit into
Conversation
The OTA matrix runs ios and android on separate runners, each repeating the ~5min node_modules setup. Combining both platforms into one job and running code-push as background processes (`ios & android & wait`) does the setup once and parallelizes only the publish step, which is the part that actually benefits from parallelism. Captures per-platform logs into collapsible groups and aggregates exit status so a failure on either platform still fails the job. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Builds on #14326 (which already added node_modules cache reuse in the OTA job and decoupled OTA from
mobile-verify) by further collapsing the iOS/Android OTA matrix into a single job.platform: [ios, android]) parallelized publishing but at the cost of running the full setup pipeline — checkout,setup-node, patch checksum, cache restore,npm run postinstall/npm ci, AWS config — on two separate runners. That setup is the bulk of the wall time on each runner.code-push create-history/code-push releasecalls via background processes (ios & android & wait), which is the part that actually benefits from running concurrently. Per-platform stdout/stderr is captured to log files and emitted under::group::headers so each platform's output stays readable. Exit status from both platforms is aggregated so a failure on either still fails the job.mobile-ota-release(rc channel) andmobile-ota-release-production(production channel).For reference, the three optimizations described in the brief map to:
main(ci(mobile): cache deps + parallelize OTA + decouple lint to speed up OTA ~3x #14326); cache keynpm-cache-mobile-${{ runner.os }}-node-${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-${{ steps.patch-file.outputs.patch_checksum }}matches themobile-installwriter, and the install step short-circuits tonpm run postinstallon hit.main(ci(mobile): cache deps + parallelize OTA + decouple lint to speed up OTA ~3x #14326); OTA depends on[mobile-install, mobile-version-check], notmobile-verify.Test plan
python3 -c "import yaml; yaml.safe_load(...)")rcOTA release (push tomainwithout a version bump, orworkflow_dispatchwithota_channel=rc) and confirm both iOS and Androidcode-push releasecalls complete successfully and the published bundles are reachableproductionOTA release viaworkflow_dispatchwithota_channel=productionand confirm the environment approval gate still fires and both platforms publishOTA_APP_VERSION) and confirm the job still fails even though the other platform succeeded — both logs should appear in the job output🤖 Generated with Claude Code