Skip to content

CI: fan out spm-16 matrix and download each non-macOS simulator#113

Merged
dfed merged 3 commits intomainfrom
dfed--download
Apr 20, 2026
Merged

CI: fan out spm-16 matrix and download each non-macOS simulator#113
dfed merged 3 commits intomainfrom
dfed--download

Conversation

@dfed
Copy link
Copy Markdown
Owner

@dfed dfed commented Apr 20, 2026

Summary

  • Previously Build Xcode 16 (iOS_18,watchOS_11) failed with xcodebuild: error: Unable to find a device matching the provided destination specifier: { platform:iOS Simulator, OS:18.5, name:iPad (10th generation) } (run) because the runner no longer ships the iOS 18.5 simulator pre-installed and the old step only downloaded the visionOS runtime.
  • Fan the spm-16 matrix out to one platform per runner (iOS, tvOS, macOS, macCatalyst, watchOS, visionOS). More parallelism, shorter end-to-end CI. Scripts/build.swift already accepts a single-platform argument since it splits on commas.
  • With one platform per entry, the download step collapses back to the SafeDI shape: guard macOS/macCatalyst with an if, strip the version suffix, and call xcodebuild -downloadPlatform once.

Test plan

  • Build Xcode 16 (iOS_18) succeeds.
  • Build Xcode 16 (tvOS_18) succeeds (tvOS simulator now explicitly fetched).
  • Build Xcode 16 (watchOS_11) succeeds (watchOS simulator now explicitly fetched).
  • Build Xcode 16 (visionOS_2) still succeeds (same behavior as before).
  • Build Xcode 16 (macOS_15) and Build Xcode 16 (macCatalyst_15) still pass (download step skipped).

🤖 Generated with Claude Code

Runner images stopped shipping iOS 18.5 (and likely other) simulators
pre-installed, so the Build Xcode 16 (iOS_18,watchOS_11) job failed
with "Unable to find a device matching the provided destination
specifier". The previous step only downloaded visionOS.

Mirror the SafeDI pattern: iterate over each comma-separated matrix
entry, strip the version suffix, and invoke -downloadPlatform for any
entry that targets a simulator-bearing OS.

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

codecov Bot commented Apr 20, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.72%. Comparing base (58a5ca0) to head (93c22ff).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main     #113   +/-   ##
=======================================
  Coverage   98.72%   98.72%           
=======================================
  Files           8        8           
  Lines         392      392           
=======================================
  Hits          387      387           
  Misses          5        5           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Splitting the paired entries (iOS+watchOS, macOS+tvOS) into individual
runners increases parallelism and shortens end-to-end CI time at the
cost of more runner minutes. Scripts/build.swift already accepts a
single-platform input since it splits on commas.

With one platform per entry, the Download step collapses back to the
SafeDI shape: guard macOS/macCatalyst with an if, strip the version
suffix, and call -downloadPlatform once.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dfed dfed changed the title CI: download every non-macOS simulator in spm-16 matrix CI: fan out spm-16 matrix and download each non-macOS simulator Apr 20, 2026
prepare-coverage-reports.sh explicitly skips watchOS (watchOS profile
artifacts aren't produced by the toolchain), so the codecov upload
step has nothing to find and fails with "No coverage reports found"
under fail_ci_if_error: true.

Previously the iOS_18,watchOS_11 pairing masked this because iOS's
reports satisfied the uploader. Now that watchOS runs alone, skip the
two coverage steps for that matrix entry.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dfed dfed merged commit ab51cc5 into main Apr 20, 2026
17 checks passed
@dfed dfed deleted the dfed--download branch April 20, 2026 23:47
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