Skip to content

ci(e2e): Build the oldest RN E2E app with 0.73.11 instead of 0.71.19 - #6935

Closed
antonis wants to merge 2 commits into
mainfrom
ci/e2e-oldest-rn-0.73
Closed

antonis wants to merge 2 commits into
mainfrom
ci/e2e-oldest-rn-0.73

Conversation

@antonis

@antonis antonis commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Changes the oldest React Native version in the E2E build matrix from 0.71.19 to 0.73.11, for both iOS and Android. In .github/workflows/e2e-v2.yml this updates the version list, the iOS runner include entry and the three exclude entries. The test job only runs 0.88.0 and is unchanged.

It also fixes the iOS pod install for 0.73. The E2E CLI pinned json < 3.0 only for RN < 0.72. RN 0.71–0.74 Gemfiles cap activesupport < 7.1, which resolves ActiveSupport 7.0.x. Its JSON encoder passes quirks_mode: true, and json 3.x (3.1.0, released 2026-10-13) no longer accepts that option, so pod install fails with Invalid Podfile file: unknown keyword: quirks_mode. The pin now applies whenever the Gemfile caps activesupport below 7.1 (0.71–0.74; not 0.88).

💡 Motivation and Context

The RN 0.71 Android build broke when we bumped to sentry-android 8.61.1 (#6929, reverted in #6931). sentry-java 8.61.1 is compiled with JDK 21. Even without -parameters, javac 21 writes nameless MethodParameters entries (e.g. for bridge methods), and older D8 versions crash on them:

D8: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null
RN AGP Bundled D8 sentry-android 8.61.1
0.71.19 7.3.1 3.3.83 ❌ mergeExtDexRelease fails
0.73.11 8.1.1 8.1.65 ✅ builds

RN 0.73 is the first version whose default AGP (8.1) handles these jars. With 0.73.11, the E2E matrix can take sentry-android 8.61.1 and later. This raises our oldest tested RN version from 0.71 to 0.73. The declared peer range (react-native >=0.65.0) is unchanged.

We're fixing this in sentry-java separately, so apps on AGP ≤ 8.0 (RN ≤ 0.72) keep working.

💚 How did you test it?

Locally, with the E2E CLI, as CI runs it (RN_VERSION=0.73.11 ./dev-packages/e2e-tests/cli.mjs android --create --build, JDK 17, release build):

  • RN 0.73.11 against sentry-android 8.61.1: BUILD SUCCESSFUL. :app:mergeExtDexRelease ran, and the APK's classes.dex contains the 8.61.1 Sentry classes.
  • For comparison, RN 0.71.19 against 8.61.1 fails with the same D8 NPE as CI.

iOS 0.73.11 create with Ruby 3.3.0, as in CI:

  • With the pin: json 2.21.2 and activesupport 7.0.10 resolve, and pod install completes.
  • Without the pin (Gemfile re-resolved): json 3.1.0 resolves, and pod install fails with the same unknown keyword: quirks_mode error as CI.

I didn't run the iOS xcodebuild step locally; CI covers it through the ready-to-merge label.

📝 Checklist

  • I added tests to verify changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • All tests passing.
  • Public API changes reviewed by another Mobile SDK team member or implemented according to the develop docs spec.
  • No breaking changes.

🔮 Next steps

  • Bump sentry-android to a version with the sentry-java fix, once it's released.

🤖 Generated with Claude Code

RN 0.71's AGP 7.3.1 bundles D8 3.3.83, which crashes dexing sentry-android
8.61.1 (JDK 21 javac writes nameless MethodParameters entries). RN 0.73.11
uses AGP 8.1.1 (D8 8.1.65), which dexes it fine.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@antonis antonis added the ready-to-merge Triggers the full CI test suite label Oct 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

⚪ None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • ci(e2e): Build the oldest RN E2E app with 0.73.11 instead of 0.71.19 by antonis in #6935
  • chore(deps): update CLI to v3.8.2 by github-actions in #6933
  • ci: Move CI off end-of-life Node versions to Node 22 by antonis in #6927

🤖 This preview updates automatically when you update the PR.

ActiveSupport 7.0's JSON encoder passes `quirks_mode: true`, which json 3.x
removed, so `pod install` fails with "unknown keyword: quirks_mode" for any
RN Gemfile that keeps activesupport < 7.1 (0.71-0.74), not only RN < 0.72.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@antonis

antonis commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Closing for now since we still need test coverage for 0.71

@antonis antonis closed this Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Triggers the full CI test suite

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant