Skip to content

feat(examples): integrate mobile-devtools plugin for all examples#1246

Draft
abueide wants to merge 19 commits intomasterfrom
feat/devbox-e2e-latest
Draft

feat(examples): integrate mobile-devtools plugin for all examples#1246
abueide wants to merge 19 commits intomasterfrom
feat/devbox-e2e-latest

Conversation

@abueide
Copy link
Copy Markdown
Contributor

@abueide abueide commented May 7, 2026

Summary

Integrates the mobile-devtools devbox plugin into all three example apps for reproducible device management and E2E testing via CI.

Changes

  • Add devbox.json and device configurations to E2E-latest (RN 0.84.1)
  • Add devbox.json and device configurations to E2E-compat (RN 0.72.9)
  • Add devbox.json and device configurations to AnalyticsReactNativeExample (RN 0.85.0)
  • Add env-var-driven SDK version resolution in build.gradle files (for Nix-provided Android SDK)
  • Add .github/workflows/e2e-mobile.yml for CI E2E testing
  • Add devbox state dirs to .gitignore

CI Strategy

Each job targets one device set:

Stack


🤖 Generated with Claude Code

abueide and others added 2 commits May 7, 2026 13:42
Integrates the mobile-devtools devbox plugin for reproducible device
management in E2E-latest. Enables New Architecture (newArchEnabled=true)
to match RN 0.84's default behavior and catch interop issues in CI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds devbox.json and device configurations to E2E-compat and
AnalyticsReactNativeExample. Both keep Old Architecture (compat).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@abueide abueide added the chore Maintenance tasks, dependency updates, tooling label May 7, 2026
abueide and others added 17 commits May 7, 2026 14:13
Adds a workflow that runs Detox E2E tests for both E2E-latest
(RN 0.84 + New Arch) and E2E-compat (RN 0.72 + Old Arch) on
Android and iOS. Triggered on push to feat/devbox-e2e-latest for
testing, can be expanded to PR triggers once validated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use --no-immutable for yarn install (lockfile drifts with Yarn version)
- Pull Android SDK versions from devbox plugin env vars
- Add || true to stop:emu/stop:sim cleanup steps
- Update Kotlin and build tools to match RN version requirements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Android E2E-latest (RN 0.84):
- Update settings.gradle to use com.facebook.react.settings plugin
- Add @react-native-community/cli packages to devDependencies
- Remove deprecated native_modules.gradle apply from app/build.gradle
- Add org.jetbrains.kotlin.android plugin

Android E2E-compat (RN 0.72):
- Disable lint for release builds (avoids needing SDK 35 in Nix)
- Align build-tools version with Nix flake defaults (36.1.0)

iOS E2E-latest (RN 0.84):
- Simplify Podfile (remove deprecated get_default_flags)
- CLI packages added via devDependencies fix autolinking

iOS E2E-compat (RN 0.72):
- Add root yarn install step to CI for workspace dep resolution
- Metro bundling needs @babel/runtime from root node_modules

All jobs:
- Add "Install root dependencies" CI step for monorepo Metro resolution
- Override ANDROID_BUILD_TOOLS_VERSION in devbox.json to match Nix SDK

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- metro.config.js: block uuid from root node_modules (v14 is ESM-only,
  breaks Metro's CommonJS resolution)
- devbox.json: add jdk@17, pin ANDROID_COMPILE_SDK=33 and TARGET_SDK=33
  to match available Nix SDK platforms
- android/build.gradle: force all subprojects to use root buildToolsVersion
  and compileSdkVersion (prevents AGP 7.2.1 from requesting build-tools
  30.0.3 which isn't in the Nix SDK)
- android.lock: add hash_overrides for platform-tools SHA1 mismatch
  (Google updated the zip on their servers)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Doctor now exits 0 on successful fix, but || true provides a safety
net in case of unexpected failures during dependency installation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- E2E-compat: Android API 24 (min), iOS 18.5 (min) on macos-15
- E2E-latest: Android API 36 (max), iOS 26.2 (max) on macos-26
- Set ANDROID_DEVICES/IOS_DEVICES to limit flake evaluation to one device
- Add EMU_HEADLESS=1 / SIM_HEADLESS=1 for CI
- Add Gradle and CocoaPods caching
- Pin Xcode version via xcode-select
- Set IOS_DOWNLOAD_RUNTIME=0 to avoid 7GB runtime downloads
- Update iOS min device to 18.5 (pre-installed on macos-15)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move New Arch enablement (newArchEnabled=true, autolinking rewrite,
Podfile cleanup, Kotlin 2.1.20, package.json deps) to a separate PR.
Keep only the env-var-driven build config needed for Nix SDK and the
lint fix needed for CI release builds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Matches mobile-devtools plugin default. iOS 18.5 is pre-installed on
macos-15 runners (Xcode 16.4), avoiding runtime downloads in CI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
E2E-compat only needs min devices (API 24, iOS 18.5).
E2E-latest only needs max devices (API 36, iOS 26.2).
Remove the unused counterparts to simplify and speed up flake eval.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Aligns with mobile-devtools plugin which now exposes ANDROID_MIN_SDK
through android.lock and the devbox environment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Nix flake reads ANDROID_COMPILE_SDK from android.lock to include
that platform version in the SDK. Without it, only the device API (24)
was included, causing Gradle to fail trying to download platform 33
into the read-only Nix store.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Maintenance tasks, dependency updates, tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant