CI: cover the prebuilt RNCore Debug/Release configuration switch on iOS - #57816
Draft
chrfalch wants to merge 1 commit into
Draft
CI: cover the prebuilt RNCore Debug/Release configuration switch on iOS#57816chrfalch wants to merge 1 commit into
chrfalch wants to merge 1 commit into
Conversation
The `[RNCore] Replace React Native Core for the right configuration` script phase has never run in CI. The only CocoaPods prebuilt lane sets RCT_TESTONLY_RNCORE_TARBALL_PATH, and React-Core-prebuilt.podspec adds the phase only when that variable is absent, so #57803 reached 0.87.0-rc.2 with no lane able to catch it. The new lane installs a template app with prebuilt RNCore resolved the regular way, adds a pod that depends on nothing (nothing orders such a pod behind the script phase), marks the install as Debug and then builds Release. Because this commit's version is not published, a local Maven mirror serves the run's two flavor tarballs and redirects every other lookup to Maven Central. Two asserts after `pod install` keep the lane from passing vacuously if RNCore ever falls back to a source build. ## Changelog: [INTERNAL] - Add a CI lane for the prebuilt React Native Core Debug/Release configuration switch Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
chrfalch
marked this pull request as draft
August 4, 2026 16:21
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
Adds one CI lane,
test-ios-prebuilt-config-switch.yml, that builds a template app in Release on top of a Debug prebuilt-RNCore install — the situation that produced #57803.Nothing in CI runs
packages/react-native/scripts/replace-rncore-version.jstoday:e2e-ios-templateapp.ymlis the only CocoaPods prebuilt lane, and it exportsRCT_TESTONLY_RNCORE_TARBALL_PATH;React-Core-prebuilt.podspecadds the[RNCore] Replace React Native Core for the right configuration, if neededscript phase only when that variable is absent.So the phase never exists in CI. That is why #57803 shipped in 0.87.0-rc.2 and survived rc.3.
What it guards
RCT_TESTONLY_RNCORE_TARBALL_PATH, so the script phase is really there.scripts/e2e/fixtures/RNCoreConfigSwitchProbe, a pod with one.mfile and nospec.dependency. Without a dependency onReact-Core-prebuiltthere is no target-dependency edge ordering it behind the script phase, so its compilation can overlap with whatever that phase does toPods/React-Core-prebuilt. Real apps hit this through FirebaseCore, GoogleUtilities, SDWebImage and friends.Debugwritten toPods/React-Core-prebuilt/.last_build_configuration, then a Release build with empty DerivedData.Dropping
RCT_TESTONLY_RNCORE_TARBALL_PATHputs artifact resolution back on the download path, and a CI version is never published on Maven.scripts/e2e/local-maven-mirror.pytherefore serves this run's two flavor tarballs under their published names viaENTERPRISE_REPOSITORY, and redirects every other lookup (Hermes included) to Maven Central — so Hermes keeps resolving its prebuilt release tarball exactly as it does today.Two asserts run after
pod install, because a lane that silently falls back to a source build is how this bug got through in the first place:Pods/React-Core-prebuilt/Headers/module.modulemapexists;replace-rncore-version.jsappears inPods/Pods.xcodeproj/project.pbxproj.Test plan
Verified locally:
ReactNativeCoreUtils.setup_rncore+resolve_podspec_sourceagainst the local mirror with an unpublished version1000.0.0-deadbeefgivesbuild_from_source = false, a pod source pointing at the mirror, and bothreactnative-core-1000.0.0-deadbeef-{debug,release}.tar.gzinPods/ReactNativeCore-artifacts/— the exact namesreplace-rncore-version.jscomputes. Without the mirror the same version logsNo prebuilt artifacts found, reverting to building from source, which is what the two asserts catch.HERMES_VERSION_NAMElookup to Maven Central (200). A missing.sha1sidecar makesvalidate_tarballskip validation instead of failing.-fmodule-map-file=$(PODS_ROOT)/React-Core-prebuilt/Headers/module.modulemapin its xcconfig.prettier --list-differentis clean.Not verified: I did not run the full lane end to end, so I have not observed it go red on
mainand green with #57814. The reproduction it encodes is the one reported in #57803 and confirmed by hand on Xcode 26.3 (Debug→Release switch fails with a dependency-free pod; passes once that pod depends onReact-Core, or is removed).Expect this lane to be red until #57814 lands — that PR is the fix; this PR is the missing coverage. Please land #57814 first.
🤖 Generated with Claude Code