Repository navigation
ci(e2e): stop pinning the scene E2E simulator model - #668
Merged
Merged
Conversation
The nightly "React Native scene routing E2E" has failed every day since 2026-09-18 with "no available 'iPhone 17 Pro' simulator on iOS 27". The xcode-27-arm64 runner image 20260912 (Xcode 27 GM, 27A266a) replaced the beta's simulator set: iOS 27.0 now ships iPhone 17, 17e, 18 Pro, 18 Pro Max and Air, so the hardcoded model no longer exists. PR runs never caught it because the full lane only runs when scene-routing paths change. Drop the model pin from the workflow and, when neither E2E_DEVICE_ID nor E2E_SIMULATOR_NAME is set and no iPhone is booted, pick the newest numbered iPhone Pro on the requested runtime, falling back to any iPhone. An explicit E2E_SIMULATOR_NAME still fails if that model is missing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 20, 2026
The scene host pinned 0.88.0-nightly-20260823 because 0.88 had no release when the lane was written. 0.88.0 is out and ships the same scene APIs the fixtures use (RCTReactNativeFactory startReactNativeWithModuleName:inWindow: connectionOptions:, RCTLinkingManager scene:openURLContexts: and scene:continueUserActivity:), so test the release customers install. 0.88.0 requires react ^19.3.0 while the 0.87.0 template pins 19.2.3 (the nightly accepted ^19.2.3), so also set react and react-test-renderer to 19.3.0; without that, npm install fails with ERESOLVE. It also keeps the host installable once the package declares a real `react-native` peer range: npm only matches a prerelease against a range naming the same x.y.z, so the nightly would fail it. Refs MBL-2397 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Shahroz16
force-pushed
the
ci/scene-e2e-simulator
branch
from
October 20, 2026 20:08
dd029c8 to
ae9909e
Compare
Shahroz16
marked this pull request as ready for review
October 21, 2026 03:21
mahmoud-elmorabea
approved these changes
Oct 23, 2026
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.
Refs MBL-2397
Problem
The scheduled React Native scene routing E2E has failed every day since 2026-09-18 (last green: 2026-09-17), before it builds anything:
The
xcode-27-arm64runner image changed under it. From20260912.0186.1, the image ships the Xcode 27 GM (27A266a, iOS 27.0 runtime24A434) instead of beta27A5252f. Its iOS 27.0 simulator set is iPhone 17, iPhone 17e, iPhone 18 Pro, iPhone 18 Pro Max and iPhone Air (image readme). The workflow pinnedE2E_SIMULATOR_NAME: iPhone 17 Pro, which no longer exists.PR runs didn't catch it because the full lane only runs when scene-routing paths change. Every recent "Full React Native scene routing E2E" PR run shows green only because
full-scene-e2ewas skipped.Change
react-native-scene-e2e.yml: drop theE2E_SIMULATOR_NAMEpin.run_scene_push.sh: when neitherE2E_DEVICE_IDnorE2E_SIMULATOR_NAMEis set and no iPhone is booted, pick the newest numberediPhone N Proon the requested runtime, then fall back to any iPhone on it. An explicitE2E_SIMULATOR_NAMEstill fails if that model is missing. The chosen simulator is logged..maestro/README.md: document the selection order.0.88.0-nightly-20260823-0c7f63a4e. The nightly was pinned only because 0.88 had no release yet. 0.88.0 ships the same scene APIs the fixtures call (RCTReactNativeFactory startReactNativeWithModuleName:inWindow:connectionOptions:,RCTLinkingManager scene:openURLContexts:/scene:continueUserActivity:), and every package the script pins (react-native,@react-native/new-app-screen,babel-preset,eslint-config,jest-preset,metro-config,typescript-config) exists at 0.88.0. It also keeps the host installable once the package declares a realreact-nativepeer range (feat!: require React Native 0.77 or later #671): npm rejects prereleases against such ranges. RN 0.88.0 requiresreact ^19.3.0while the 0.87.0 template pins 19.2.3 (the nightly accepted^19.2.3), so the script also setsreact/react-test-rendererto 19.3.0. Reproduced locally: with 19.2.3,npm installfails withERESOLVE; with 19.3.0, it and the SDK tarball install succeed.Verification
bash -n,shellcheck -S warningandactionlintpass.Using simulator iPhone 18 Pro (…, com.apple.CoreSimulator.SimRuntime.iOS-27-0), then warm/terminated notification routing and ordinary-link flows on the Xcode 27 GM image. It's the first green run of this lane since 2026-09-17, so the beta-eraxcodebuildfailure below didn't recur. It passed again on the 0.88.0 commit (run 39489475424,ae9909e6): RN 0.88.0 stable + React 19.3.0, iPhone 18 Pro / iOS 27.0, no nightly references in the log.Caveat
Before the GM image, the nightly also failed 3 times (2026-09-12/13/15) in
xcodebuildwiththe following command failed with exit code 0 but produced no further outputon the Xcode 27 beta. This PR doesn't touch that. If it recurs on the GM image, it will show up in this PR's run.Codex review
Second commit: Codex flagged the React 19.3.0 peer mismatch (high). It's fixed and reproduced as above. It found no nightly-only dependency in the Swift/Ruby fixtures, and all seven pinned packages exist at 0.88.0.
First commit:
Codex (gpt-6.1-sol, high) did an adversarial review and found no actionable findings. It verified the jq numeric sort, anchored-regex handling of Pro Max/SE/Plus,
//fallback on empty arrays,set -euo pipefailbehaviour, that the xcodebuild destination uses the chosen UDID, that the flows use text selectors rather than coordinates, and that the full PR lane triggers for these paths. Like this PR, it can't prove the whole nightly passes past simulator selection; this PR's own full-lane run covers that.🤖 Generated with Claude Code