Skip to content

feat: add expo 56 support beta testing#363

Draft
valentin-callstack wants to merge 4 commits into
callstack:mainfrom
valentin-callstack:feat/add-expo-beta-testing
Draft

feat: add expo 56 support beta testing#363
valentin-callstack wants to merge 4 commits into
callstack:mainfrom
valentin-callstack:feat/add-expo-beta-testing

Conversation

@valentin-callstack

Copy link
Copy Markdown

Summary

Test plan

@valentin-callstack valentin-callstack marked this pull request as draft June 10, 2026 07:26
Comment on lines +71 to +84
- name: Apply Expo beta to ExpoApp56
run: node --experimental-strip-types --no-warnings ./scripts/check-expo-beta.ts --expo-version "~55.0.23" --apply --github-step-summary "$GITHUB_STEP_SUMMARY"

- name: Install Expo beta dependencies
run: |
cd apps/ExpoApp56
npx expo install --fix

- name: Run ExpoApp56 -> AndroidApp road test
uses: ./.github/actions/androidapp-road-test
with:
flavor: expo56
rn-project-path: apps/ExpoApp56
rn-project-maven-path: com/callstack/rnbrownfield/demo/expoapp56/brownfieldlib

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make this ExpoAppBeta?

@artus9033 artus9033 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left a few comments on the approach so we reduce the committed code for maintainability & a cleaner way to do this. This is mostly cosmetic, other than that, it's great work & we're on the right track!

Comment on lines +95 to +107
- name: Apply Expo beta to ExpoApp56
run: node --experimental-strip-types --no-warnings ./scripts/check-expo-beta.ts --expo-version "~55.0.23" --apply --github-step-summary "$GITHUB_STEP_SUMMARY"

- name: Install Expo beta dependencies
run: |
cd apps/ExpoApp56
npx expo install --fix

- name: Run ExpoApp56 -> AppleApp road test
uses: ./.github/actions/appleapp-road-test
with:
variant: expo56
rn-project-path: apps/ExpoApp56

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment on lines +38 to +40
create("expo56") {
dimension = "app"
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's go with expobeta

[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
brownfieldlib-expo55 = { module = "com.callstack.rnbrownfield.demo.expoapp55:brownfieldlib", version.ref = "brownfieldlib" }
brownfieldlib-expo56 = { module = "com.callstack.rnbrownfield.demo.expoapp56:brownfieldlib", version.ref = "brownfieldlib" }

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's do expobeta

Comment on lines +32 to +34
BuildableName = "Brownfield Apple App (ExpoApp56).app"
BlueprintName = "Brownfield Apple App (ExpoApp56)"
ReferencedContainer = "container:Brownfield Apple App.xcodeproj">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's do ExpoAppBeta

Comment on lines +181 to +187
if (shouldTest && options.apply) {
const packageJson = readExpoApp56PackageJson();
applied = updateExpoVersion(packageJson, latestVersion);
if (applied) {
writeExpoApp56PackageJson(packageJson);
}
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we not commit the expo beta app to the git repo, instead make this script generate it on-the-fly with create-expo-app with the right expo version flag; then let's inject brownfield plugin into it from this script. WDYT @hurali97 @valentin-callstack ?

"build:example:ios-consumer:expo": "yarn build:example:ios-consumer:expo55",
"build:example:ios-consumer:expo54": "node prepareXCFrameworks.js --appName ExpoApp54 && yarn internal::build::common -scheme \"Brownfield Apple App Expo 54\" -configuration Release",
"build:example:ios-consumer:expo55": "node prepareXCFrameworks.js --appName ExpoApp55 && yarn internal::build::common -scheme \"Brownfield Apple App Expo 55\" -configuration Release",
"build:example:ios-consumer:expo56": "node prepareXCFrameworks.js --appName ExpoApp56 && yarn internal::build::common -scheme \"Brownfield Apple App Expo 56\" -configuration Release",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's do 2 things:

  1. ExpoAppBeta
  2. let's make this script actually re-generate that dir - please see more here: https://github.com/callstack/react-native-brownfield/pull/363/changes#r3388048979

const EXPO_APP_56_PACKAGE_JSON_PATH = path.join(
REPO_ROOT,
'apps',
'ExpoApp56',

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here - let's do ExpoAppBeta

Comment thread apps/README.md
Comment on lines +8 to +16
- `ExpoApp56` - a canary Expo application used to test incoming Expo beta releases before support lands in the stable CI matrix
- `AndroidApp` - the native Android application that integrates the RNApp AAR package (a "consumer" of the RNApp library); it comes in two flavors:
- `expo` - which uses the artifact produced from `ExpoApp`
- `vanilla` - which uses the artifact produced from `RNApp`
- `AppleApp` - the native iOS application that integrates packaged XCFrameworks (a "consumer" of the RN apps); the Xcode project defines one target per consumed RN app:
- `Brownfield Apple App (RNApp)` — vanilla; uses the artifact from `RNApp` (scheme **Brownfield Apple App Vanilla**, configuration `Release Vanilla`)
- `Brownfield Apple App (ExpoApp54)` — uses the artifact from `ExpoApp54` (scheme **Brownfield Apple App Expo 54**, configuration `Release`)
- `Brownfield Apple App (ExpoApp55)` — uses the artifact from `ExpoApp55` (scheme **Brownfield Apple App Expo 55**, configuration `Release`)
- `Brownfield Apple App (ExpoApp56)` — uses the artifact from `ExpoApp56` (scheme **Brownfield Apple App Expo 56**, configuration `Release`)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's do ExpoAppBeta + note it'll be generated on-the-fly, not committed, as in https://github.com/callstack/react-native-brownfield/pull/363/changes#r3388048979

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.

2 participants