ci: pin xcodes 2.0.3 to fix iOS runtime installs#626
Merged
Conversation
The macos-15-xlarge runner's preinstalled xcodes fails to decode Apple's current runtime-downloadables JSON (new `authentication: "none"` value), so every `xcodes runtimes install` step dies before compiling anything. Download the pinned 2.0.3 release binary — verified to decode the current list — and invoke it by explicit path, since sudo's secure_path ignores the job PATH. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The runner image's formula index is frozen at image-build time (brew auto-update is disabled), so `brew install`/`upgrade` alone considers the stale xcodes 2.0.2 up-to-date and never installs 2.0.3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Skips the brew update/upgrade once the runner image ships a new enough xcodes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
RoyalPineapple
marked this pull request as ready for review
July 9, 2026 12:53
| # explicit path: sudo's secure_path ignores the job PATH. | ||
| run: | | ||
| required="2.0.3" | ||
| installed="$(xcodes version)" |
Contributor
There was a problem hiding this comment.
🤖 Non-blocking nit: the version check resolves xcodes via the job PATH, while the install below invokes $(brew --prefix)/bin/xcodes explicitly. On these images both resolve to the same brew-managed binary, but using "$(brew --prefix)/bin/xcodes" version here too would guarantee the version you check is the version you run.
Collaborator
Author
There was a problem hiding this comment.
🤖 Addressed in df1de3a — the brew path is now resolved once into a variable and used for both the version check and the sudo invocation.
johnnewman-square
approved these changes
Jul 9, 2026
Addresses review feedback: the version check resolved xcodes via the job PATH while the install used the brew path explicitly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
RoyalPineapple
enabled auto-merge
July 9, 2026 13:28
RoyalPineapple
disabled auto-merge
July 9, 2026 13:28
RoyalPineapple
enabled auto-merge (squash)
July 9, 2026 13:28
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.
Problem
All three iOS jobs (15.4 / 16.2 / 17.2) fail in ~9s at the Install iOS
<sdk>step, on main and every open PR, since ~2026-07-07:Apple added an
authentication: "none"value to its runtime-downloadables JSON that the runner's preinstalledxcodes2.0.2 can't decode. xcodes 2.0.3 (released 2026-07-08) fixes the decode. Pure infra; no code change involved.Fix
In the failing step only: upgrade xcodes via brew when the preinstalled copy is older than 2.0.3.
required(i.e. the installed copy is older). Once GitHub rebuilds the image with xcodes ≥ 2.0.3, the brew block is a silent no-op and this fix self-retires.brew updatebefore upgrade: the image's formula index is frozen at image-build time (auto-update disabled), sobrew upgradealone considers the stale 2.0.2 "up-to-date" and does nothing.$(brew --prefix)/binpath:sudo'ssecure_pathignores the job PATH, so a baresudo xcodeswould still resolve the stale copy.toolset-15.jsoninstalls it viabrew.common_packages), rather than adding a second install mechanism.Why not a newer runner?
macos-15is the newest image that ships Xcode 16.4, whichenv.propertiespins and the iOS 15.4/16.2/17.2 simulator matrix requires.macos-26only ships Xcode 26.x, so switching runners would mean an Xcode migration, not a CI tweak.macos-26, which installs xcodes via brew the same way — carries the broken version.Verification
🤖 Generated with Claude Code