Skip to content

Download tvOS and watchOS simulator runtimes in CI#77

Merged
dfed merged 1 commit into
mainfrom
harden-ci-simulator-runtimes
Jun 9, 2026
Merged

Download tvOS and watchOS simulator runtimes in CI#77
dfed merged 1 commit into
mainfrom
harden-ci-simulator-runtimes

Conversation

@dfed

@dfed dfed commented Jun 9, 2026

Copy link
Copy Markdown
Owner

What

Add explicit xcodebuild -downloadPlatform steps for tvOS and watchOS to the Build Xcode 26 matrix jobs, mirroring the iOS step we already have (and the pattern used in Valet).

  • tvOS 18.5 → 22L572
  • watchOS 11.5 → 22T572

Why

GitHub's hosted runners keep no more than three simulator runtime sets per Xcode version and evict the oldest as new releases ship (see actions/runner-images#13570). The tvOS 18.5 runtime got rotated out from under the macOS_26,tvOS_18 job — which had no download step at all — so xcodebuild failed with:

xcodebuild: error: Unable to find a device matching the provided destination specifier:
        { platform:tvOS Simulator, OS:18.5, name:Apple TV }

That exits 70, which Scripts/build.swift rethrows as TaskError.code(70), crashing the script (SIGTRAP → exit 133). It looked like the unrelated import-trimming commit (#76) broke CI, but that commit just happened to be the next push after the runtime was evicted — an import change can't cause "unable to find a simulator device."

iOS_18,watchOS_11 only downloads iOS today and relies on watchOS 11.5 happening to be pre-installed; it will break the same way when that runtime is rotated out, so this hardens it now.

Note

This does not address the intermittent visionOS test timeout (*_executesAfterQueueIsDeallocated, 30s expectation) seen under the -test-iterations 100 stress harness — that's a separate slow-runner flake being investigated separately.

🤖 Generated with Claude Code

GitHub keeps no more than three simulator runtime sets per Xcode version
on its hosted runners and evicts older ones as new releases ship (see
actions/runner-images#13570). The tvOS 18.5 runtime was rotated out from
under the `macOS_26,tvOS_18` job, which has no download step, so
`xcodebuild` failed with "Unable to find a device matching the provided
destination specifier" and exited 70.

Mirror the existing iOS download step (and the pattern used in Valet) by
explicitly downloading the pinned runtimes the matrix targets:

- tvOS 18.5  -> 22L572 (was missing entirely; cause of the failure)
- watchOS 11.5 -> 22T572 (hardening; currently relies on the runtime
  happening to be pre-installed and will break the same way when it is
  rotated out)

iOS 18.5 (22F77) and visionOS already download their runtimes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (ea3a614) to head (ea9cd41).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff            @@
##              main       #77   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           13        13           
  Lines         1301      1301           
=========================================
  Hits          1301      1301           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@dfed dfed merged commit 3aaec5b into main Jun 9, 2026
12 of 13 checks passed
@dfed dfed deleted the harden-ci-simulator-runtimes branch June 9, 2026 15:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant