Skip to content

Commit

Permalink
Upgrade react-native 0.72.0-rc.5 (#22588)
Browse files Browse the repository at this point in the history
# Why

upgrade react-native 0.72 for sdk 49
close ENG-8011

# How

- bump package versions
  - `react-native 0.71.3 -> 0.72.0-rc.5`
  - `metro-react-native-babel-preset 0.73.9 -> 0.76.5`
- [bare-expo][templates][fabric-tester] migrate template base on [upgrade-helper](https://react-native-community.github.io/upgrade-helper/?from=0.71.7&to=0.72.0-rc.5)
- [expo-template-tabs] remove the metro version overrides for expo-router.
- [core][dev-laucher][dev-menu][media-library][screen-orientation][splash-screen][updates-interface][updates] add the `install_modules_dependencies` to support new architecture + use_frameworks!
- [core][autolinking] fix some new architecture error on ios
- [react-native-lab] update our fork to 0.72.0-rc.5 based
- [go][tools] fix **react-native-lab/react-native/packages/react-native** path move because of react-native's repo monorepo changes
- [go][android] fix gradle 8 errors
- [go][ios] add `RCT_REMOTE_PROFILE=0` to fix the `RCT_ENABLE_INSPECTOR needs to be set to fulfill RCT_REMOTE_PROFILE` build error
- [ncl] remove `ProgressViewIOS` / `ProgressBarAndroid` since they are deprecated/removed in 0.72
- [dev-menu][dev-launcher] rebuild bundles

# Note

- react-native-web is not bumped because of the [issue](necolas/react-native-web#2523), so it's still react-native-web@~0.18.10.
- currently disable ci typecheck for @expo/cli because of upstream metro typescript support. i'll have another pr to fix those errors.
- updates e2e ci on android is broken at [here](https://github.com/expo/expo/blob/fada3d764957779fbfc3d7b723d185db1d933d95/packages/expo-updates/e2e/fixtures/Updates.e2e.ts#L518). i doubt if that's related to the react scheduler change. i'd disabled the failed test case.
- the react-native upstream [migrated away the `@types/jest`](facebook/react-native#36068). i was afraid that will be a breaking change to the existing jest test code since it requires the explicit `@jest/globals` import. i didn't do this in this upgrade.

# Test Plan

- ✅ fabric-tester (without expo-dev-client)
- ✅ ci passed. there are some errors which are known:
  - updates e2e on android: as mentioned above
  - ios expo go on eas build: versioned expo go are broken on eas build m1 worker. this is also happening on main.
  - android client: no space left on the ubuntu worker. this is also happening on main.
- ✅ bare-expo
- ✅ unversioned expo go + ncl

---------

Co-authored-by: Tomasz Sapeta <tomasz.sapeta@swmansion.com>
  • Loading branch information
Kudo and tsapeta committed Jun 7, 2023
1 parent 062dc72 commit c0a9667
Show file tree
Hide file tree
Showing 134 changed files with 6,788 additions and 6,305 deletions.
14 changes: 7 additions & 7 deletions .github/actions/expo-caches/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -175,14 +175,14 @@ runs:
uses: actions/cache@v3
with:
path: android/prebuiltHermes
key: hermes-engine-aar-v2-${{ hashFiles('react-native-lab/react-native/sdks/.hermesversion') }}
key: hermes-engine-aar-v2-${{ hashFiles('react-native-lab/react-native/packages/react-native/sdks/.hermesversion') }}
- name: Check hermes-engine cache-hit
if: inputs.hermes-engine-aar == 'true'
id: cache-hermes-engine-aar
shell: bash
run: |
CURRENT_VERSION=$(test -f android/prebuiltHermes/.hermesversion && cat android/prebuiltHermes/.hermesversion) || true
TARGET_VERSION=$(test -f react-native-lab/react-native/sdks/.hermesversion && cat react-native-lab/react-native/sdks/.hermesversion) || true
TARGET_VERSION=$(test -f react-native-lab/react-native/packages/react-native/sdks/.hermesversion && cat react-native-lab/react-native/packages/react-native/sdks/.hermesversion) || true
if [[ $CURRENT_VERSION == $TARGET_VERSION ]]; then
echo "cache-hit=true" >> $GITHUB_OUTPUT
else
Expand All @@ -195,11 +195,11 @@ runs:
# Ensure node packages are installed when yarn-workspace cache miss
yarn install --frozen-lockfile
mkdir -p prebuiltHermes
cp -f ../react-native-lab/react-native/sdks/.hermesversion prebuiltHermes/
./gradlew :ReactAndroid:hermes-engine:assembleRelease
./gradlew :ReactAndroid:hermes-engine:assembleDebug
cp -f ../react-native-lab/react-native/ReactAndroid/hermes-engine/build/outputs/aar/hermes-engine-release.aar prebuiltHermes/
cp -f ../react-native-lab/react-native/ReactAndroid/hermes-engine/build/outputs/aar/hermes-engine-debug.aar prebuiltHermes/
cp -f ../react-native-lab/react-native/packages/react-native/sdks/.hermesversion prebuiltHermes/
./gradlew :packages:react-native:ReactAndroid:hermes-engine:assembleRelease
./gradlew :packages:react-native:ReactAndroid:hermes-engine:assembleDebug
cp -f ../react-native-lab/react-native/packages/react-native/ReactAndroid/hermes-engine/build/outputs/aar/hermes-engine-release.aar prebuiltHermes/
cp -f ../react-native-lab/react-native/packages/react-native/ReactAndroid/hermes-engine/build/outputs/aar/hermes-engine-debug.aar prebuiltHermes/
env:
# Reset reactNativeArchitectures to build all architectures
ORG_GRADLE_PROJECT_reactNativeArchitectures:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/android-instrumentation-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ concurrency:
jobs:
test:
runs-on: macos-12
timeout-minutes: 120
timeout-minutes: 150
env:
ORG_GRADLE_PROJECT_reactNativeArchitectures: x86_64
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=1024m
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ jobs:
- name: 🧶 Install node modules in root dir
if: steps.expo-caches.outputs.yarn-workspace-hit != 'true'
run: yarn install --frozen-lockfile
- name: 🔎 Type Check CLI
run: yarn typecheck
working-directory: packages/@expo/cli
# - name: 🔎 Type Check CLI
# run: yarn typecheck
# working-directory: packages/@expo/cli
- name: 🛠 Build CLI
run: yarn prepare
working-directory: packages/@expo/cli
Expand Down
8 changes: 4 additions & 4 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ plugins {
// WHEN_DISTRIBUTING_REMOVE_TO_HERE

def reactProperties = new Properties()
file("${project(':ReactAndroid').projectDir}/gradle.properties").withInputStream { reactProperties.load(it) }
file("${project(':packages:react-native:ReactAndroid').projectDir}/gradle.properties").withInputStream { reactProperties.load(it) }

allprojects {
repositories {
Expand Down Expand Up @@ -91,13 +91,13 @@ allprojects {
// WHEN_DISTRIBUTING_REMOVE_FROM_HERE
resolutionStrategy.dependencySubstitution {
substitute(module("com.facebook.react:react-native"))
.using(project(":ReactAndroid"))
.using(project(":packages:react-native:ReactAndroid"))
.because("Building React Native from source")
substitute(module("com.facebook.react:react-native:+"))
.using(project(":ReactAndroid"))
.using(project(":packages:react-native:ReactAndroid"))
.because("Building React Native from source")
substitute(module("com.facebook.react:react-android"))
.using(project(":ReactAndroid"))
.using(project(":packages:react-native:ReactAndroid"))
.because("Building React Native from source")
}
// WHEN_DISTRIBUTING_REMOVE_TO_HERE
Expand Down
22 changes: 10 additions & 12 deletions android/expoview/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,19 @@ apply plugin: 'kotlin-kapt'
apply from: new File(rootDir, "versioning_linking.gradle")

def reactProperties = new Properties()
file("${project(':ReactAndroid').projectDir}/gradle.properties").withInputStream { reactProperties.load(it) }
file("${project(':packages:react-native:ReactAndroid').projectDir}/gradle.properties").withInputStream { reactProperties.load(it) }

// WHEN_VERSIONING_REMOVE_FROM_HERE
//maven repository info
group = 'host.exp.exponent'
version = '45.0.0'

// Creating sources with comments
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}

afterEvaluate {
publishing {
publications {
// use `versionedRelease` configuration when publishing to maven
versionedRelease(MavenPublication) {
from components.versionedRelease
// Add additional sourcesJar to artifacts
artifact(androidSourcesJar)
}
}
repositories {
Expand All @@ -40,7 +32,7 @@ afterEvaluate {

def prebuiltHermesDir = findProperty("expo.prebuiltHermesDir") ?: file("${rootDir}/prebuiltHermes")
def prebuiltHermesVersion = file("${prebuiltHermesDir}/.hermesversion").exists() ? file("${prebuiltHermesDir}/.hermesversion").text : null
def currentHermesVersion = file("${project(':ReactAndroid').projectDir}/../sdks/.hermesversion").exists() ? file("${project(':ReactAndroid').projectDir}/../sdks/.hermesversion").text : null
def currentHermesVersion = file("${project(':packages:react-native:ReactAndroid').projectDir}/../sdks/.hermesversion").exists() ? file("${project(':packages:react-native:ReactAndroid').projectDir}/../sdks/.hermesversion").text : null
def buildHermesSource = currentHermesVersion != prebuiltHermesVersion
logger.info(":expoview - buildHermesSource[${buildHermesSource}]")

Expand Down Expand Up @@ -132,6 +124,12 @@ android {

// use `versionedRelease` configuration when publishing to maven
defaultPublishConfig "versionedRelease"

publishing {
singleVariant("release") {
withSourcesJar()
}
}
}

// WHEN_VERSIONING_REMOVE_FROM_HERE
Expand Down Expand Up @@ -190,13 +188,13 @@ dependencies {

api 'org.webkit:android-jsc:r250231' // needs to be before react-native

api project(':ReactAndroid')
api project(':packages:react-native:ReactAndroid')

if (!buildHermesSource) {
debugImplementation(files("${prebuiltHermesDir}/hermes-engine-debug.aar"))
releaseImplementation(files("${prebuiltHermesDir}/hermes-engine-release.aar"))
} else {
implementation(project(':ReactAndroid:hermes-engine')) {
implementation(project(':packages:react-native:ReactAndroid:hermes-engine')) {
exclude(group:'com.facebook.fbjni', module: 'fbjni')
}
}
Expand Down
8 changes: 4 additions & 4 deletions android/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ includeBuild('../react-native-lab/react-native/packages/react-native-gradle-plug

include ':expoview'
include ':tools'
include ':ReactAndroid'
project(':ReactAndroid').projectDir = new File(rootDir, '../react-native-lab/react-native/ReactAndroid')
include ':ReactAndroid:hermes-engine'
project(':ReactAndroid:hermes-engine').projectDir = new File(rootDir, '../react-native-lab/react-native/ReactAndroid/hermes-engine')
include ':packages:react-native:ReactAndroid'
project(':packages:react-native:ReactAndroid').projectDir = new File(rootDir, '../react-native-lab/react-native/packages/react-native/ReactAndroid')
include ':packages:react-native:ReactAndroid:hermes-engine'
project(':packages:react-native:ReactAndroid:hermes-engine').projectDir = new File(rootDir, '../react-native-lab/react-native/packages/react-native/ReactAndroid/hermes-engine')
include ':expo-modules-test-core'
project(':expo-modules-test-core').projectDir = new File(rootDir, '../packages/expo-modules-test-core/android')

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

public class ReactAndroidCodeTransformer {

private static final String REACT_ANDROID_DEST_ROOT = "react-native-lab/react-native/ReactAndroid";
private static final String REACT_ANDROID_DEST_ROOT = "react-native-lab/react-native/packages/react-native/ReactAndroid";
private static final String SOURCE_PATH = "src/main/java/com/facebook/react/";

private static abstract class MethodVisitor {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@ tasks.all({ task ->
if (rootProject.ext.has('reactNativeAndroidRoot')) {
defaultDir = rootProject.ext.get('reactNativeAndroidRoot')
androidSourcesDir = defaultDir.parentFile.toString()
} else if (findProject(':ReactAndroid') != null) {
} else if (findProject(':packages:react-native:ReactAndroid') != null) {
sourceBuild = false
defaultDir = project(':ReactAndroid').projectDir
defaultDir = project(':packages:react-native:ReactAndroid').projectDir
androidSourcesDir = defaultDir.parentFile.toString()
} else {
defaultDir = file("$nodeModules/versioned-react-native/android")
Expand All @@ -81,7 +81,7 @@ if (!defaultDir.exists()) {
}

def prebuiltDir = sourceBuild
? Paths.get(findProject(":ReactAndroid").getProjectDir().toString(), "build", "intermediates", "library_*", "*", "jni")
? Paths.get(findProject(":packages:react-native:ReactAndroid").getProjectDir().toString(), "build", "intermediates", "library_*", "*", "jni")
: "$buildDir/reactandroid-abi*/jni"


Expand Down Expand Up @@ -208,27 +208,6 @@ dependencies {
}
}

afterEvaluate { project ->
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
include '**/*.java'
}

android.libraryVariants.all { variant ->
def name = variant.name.capitalize()
def javaCompileTask = variant.javaCompileProvider.get()

task "jar${name}"(type: Jar, dependsOn: javaCompileTask) {
from javaCompileTask.destinationDir
}
}

artifacts {
archives androidSourcesJar
}
}

task extractAARHeaders {
doLast {
configurations.extractHeaders.files.each {
Expand Down Expand Up @@ -275,10 +254,10 @@ tasks.whenTaskAdded { task ->
if (!task.name.contains("Clean") && (task.name.contains('externalNativeBuild') || task.name.startsWith('configureCMake'))) {
if (sourceBuild) {
def currentBuildType = task.name.endsWith('Debug') ? 'Debug' : 'Release'
task.dependsOn(":ReactAndroid:copy${currentBuildType}JniLibsProjectOnly")
task.dependsOn(":packages:react-native:ReactAndroid:copy${currentBuildType}JniLibsProjectOnly")
}
} else if (task.name.startsWith('generateJsonModel') && sourceBuild) {
def currentBuildType = task.name.endsWith('Debug') ? 'Debug' : 'Release'
task.dependsOn(":ReactAndroid:copy${currentBuildType}JniLibsProjectOnly")
task.dependsOn(":packages:react-native:ReactAndroid:copy${currentBuildType}JniLibsProjectOnly")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def kotlin_version = safeExtGet('kotlinVersion', project.properties['RNGH_kotlin
dependencies {
//noinspection GradleDynamicVersion
if (isNewArchitectureEnabled()) {
implementation project(':ReactAndroid')
implementation project(':packages:react-native:ReactAndroid')
} else {
implementation 'host.exp:reactandroid-abi47_0_0:1.0.0'
compileOnly 'com.facebook.fbjni:fbjni:+'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ if (CLIENT_SIDE_BUILD) {
def reactNativeRootDir = Paths.get(projectDir.getPath(), '../../../../versioned-react-native').toFile()

def reactProperties = new Properties()
file("$reactNativeRootDir/../../react-native-lab/react-native/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
file("$reactNativeRootDir/../../react-native-lab/react-native/packages/react-native/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }

def BOOST_VERSION = reactProperties.getProperty("BOOST_VERSION")
def DOUBLE_CONVERSION_VERSION = reactProperties.getProperty("DOUBLE_CONVERSION_VERSION")
Expand Down Expand Up @@ -614,7 +614,7 @@ Task resolveFolly = resolveTaskFactory("resolveFolly", "folly-${FOLLY_VERSION}.t
Task resolveGlog = resolveTaskFactory("resolveGlog", "glog-${GLOG_VERSION}.tar.gz", reactNativeAndroidDownloadDir, downloadsDir)

if (isNewArchitectureEnabled()) {
def reactNativeAndroidProject = findProject(":ReactAndroid")
def reactNativeAndroidProject = findProject(":packages:react-native:ReactAndroid")
if (reactNativeAndroidProject != null) {
reactNativeAndroidProject.afterEvaluate {
def resolveTasks = [resolveBoost, resolveGlog, resolveDoubleConversion, resolveFolly]
Expand All @@ -624,13 +624,13 @@ if (isNewArchitectureEnabled()) {
if (reactAndroidDownloadTask != null) {
task.dependsOn(reactAndroidDownloadTask)
} else {
logger.warn("[Reanimated] Failed to find task named `$reactAndroidDownloadTaskName` in `:ReactAndroid` project." +
logger.warn("[Reanimated] Failed to find task named `$reactAndroidDownloadTaskName` in `:packages:react-native:ReactAndroid` project." +
" Explicit dependency between it and $task.name task can not be set.")
}
})
}
} else {
throw new GradleScriptException("[Reanimated] Failed to find `:ReactAndroid` project. Explicit dependency between download tasks can not be set.")
throw new GradleScriptException("[Reanimated] Failed to find `:packages:react-native:ReactAndroid` project. Explicit dependency between download tasks can not be set.")
}
}

Expand Down Expand Up @@ -1026,7 +1026,7 @@ if (CLIENT_SIDE_BUILD) {
tasks.whenTaskAdded { task ->
def buildType = task.name.endsWith('Debug') ? 'Debug' : 'Release'
if (!task.name.contains("Clean") && (task.name.contains('externalNativeBuild') || task.name.startsWith('configureCMake') || task.name.startsWith('buildCMake') || task.name.startsWith('generateJsonModel'))) {
task.dependsOn(":ReactAndroid:copy${buildType}JniLibsProjectOnly")
task.dependsOn(":packages:react-native:ReactAndroid:copy${buildType}JniLibsProjectOnly")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ repositories {

dependencies {
if (isNewArchitectureEnabled()) {
implementation project(":ReactAndroid")
implementation project(":packages:react-native:ReactAndroid")
} else {
implementation 'host.exp:reactandroid-abi47_0_0:1.0.0'
compileOnly 'com.facebook.fbjni:fbjni:+'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ def defaultDir

if (rootProject.ext.has('reactNativeAndroidRoot')) {
defaultDir = rootProject.ext.get('reactNativeAndroidRoot')
} else if (findProject(':ReactAndroid') != null) {
} else if (findProject(':packages:react-native:ReactAndroid') != null) {
sourceBuild = false
defaultDir = project(':ReactAndroid').projectDir
defaultDir = project(':packages:react-native:ReactAndroid').projectDir
} else {
defaultDir = file("$nodeModules/react-native")
}
Expand Down Expand Up @@ -220,27 +220,6 @@ dependencies {
}
}

afterEvaluate { project ->
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
include '**/*.java'
}

android.libraryVariants.all { variant ->
def name = variant.name.capitalize()
def javaCompileTask = variant.javaCompileProvider.get()

task "jar${name}"(type: Jar, dependsOn: javaCompileTask) {
from javaCompileTask.destinationDir
}
}

artifacts {
archives androidSourcesJar
}
}

task extractAARHeaders {
doLast {
configurations.extractHeaders.files.each {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ if (CLIENT_SIDE_BUILD) {
def reactNativeRootDir = Paths.get(projectDir.getPath(), '../../../../versioned-react-native').toFile()

def reactProperties = new Properties()
file("$rootDir/../react-native-lab/react-native/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
file("$rootDir/../react-native-lab/react-native/packages/react-native/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }

def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME")
def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger()
Expand Down Expand Up @@ -734,7 +734,7 @@ if (REACT_NATIVE_MINOR_VERSION < 71) {
Task resolveGlog = resolveTaskFactory("resolveGlog", "glog-${GLOG_VERSION}.tar.gz", reactNativeAndroidDownloadDir, downloadsDir)

if (isNewArchitectureEnabled()) {
def reactNativeAndroidProject = findProject(":ReactAndroid")
def reactNativeAndroidProject = findProject(":packages:react-native:ReactAndroid")
if (reactNativeAndroidProject != null) {
reactNativeAndroidProject.afterEvaluate {
def resolveTasks = [resolveBoost, resolveGlog, resolveDoubleConversion, resolveFolly]
Expand All @@ -744,13 +744,13 @@ if (REACT_NATIVE_MINOR_VERSION < 71) {
if (reactAndroidDownloadTask != null) {
task.dependsOn(reactAndroidDownloadTask)
} else {
logger.warn("[Reanimated] Failed to find task named `$reactAndroidDownloadTaskName` in `:ReactAndroid` project." +
logger.warn("[Reanimated] Failed to find task named `$reactAndroidDownloadTaskName` in `:packages:react-native:ReactAndroid` project." +
" Explicit dependency between it and $task.name task can not be set.")
}
})
}
} else {
throw new GradleException("[Reanimated] Failed to find `:ReactAndroid` project. Explicit dependency between download tasks can not be set.")
throw new GradleException("[Reanimated] Failed to find `:packages:react-native:ReactAndroid` project. Explicit dependency between download tasks can not be set.")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ repositories {

dependencies {
if (isNewArchitectureEnabled()) {
implementation project(":ReactAndroid")
implementation project(":packages:react-native:ReactAndroid")
} else {
implementation 'host.exp:reactandroid-abi48_0_0:1.0.0'
compileOnly 'com.facebook.fresco:fresco:+'
Expand Down

0 comments on commit c0a9667

Please sign in to comment.