@@ -109,16 +109,43 @@ tasks.register("publishAllToMavenTempLocal") {
109109tasks.register(" publishAndroidToSonatype" ) {
110110 description = " Publish the Android artifacts to Sonatype (Maven Central or Snapshot repository)"
111111 dependsOn(" :packages:react-native:ReactAndroid:publishToSonatype" )
112- dependsOn(" :packages:react-native:ReactAndroid:hermes-engine:publishToSonatype" )
113112}
114113
115- if (project.findProperty(" react.internal.useHermesNightly" )?.toString()?.toBoolean() == true ) {
114+ var hermesSubstitution: Pair <String , String >? = null
115+
116+ if (project.findProperty(" react.internal.useHermesStable" )?.toString()?.toBoolean() == true ) {
117+ val hermesVersions = java.util.Properties ()
118+ val hermesVersionPropertiesFile =
119+ File (" ./packages/react-native/sdks/hermes-engine/version.properties" )
120+ hermesVersionPropertiesFile.inputStream().use { hermesVersions.load(it) }
121+ val selectedHermesVersion = hermesVersions[" HERMES_VERSION_NAME" ] as String
122+
123+ hermesSubstitution = selectedHermesVersion to " Users opted to use stable hermes release"
124+ } else if (
125+ project.findProperty(" react.internal.useHermesNightly" )?.toString()?.toBoolean() == true
126+ ) {
127+ val reactNativePackageJson = File (" ./packages/react-native/package.json" )
128+ val reactNativePackageJsonContent = reactNativePackageJson.readText()
129+ val packageJson = groovy.json.JsonSlurper ().parseText(reactNativePackageJsonContent) as Map <* , * >
130+
131+ val hermesCompilerVersion =
132+ (packageJson[" dependencies" ] as Map <* , * >)[" hermes-compiler" ] as String
133+
134+ if (hermesCompilerVersion == " 0.0.0" ) {
135+ throw RuntimeException (
136+ " Trying to use Hermes Nightly but hermes-compiler version is not specified"
137+ )
138+ }
139+
140+ hermesSubstitution = " $hermesCompilerVersion -SNAPSHOT" to " Users opted to use hermes nightly"
141+ } else {
116142 logger.warn(
117143 """
118144 ********************************************************************************
119- INFO: You're using Hermes from nightly as you set
145+ INFO: You're building Hermes from source as you set
120146
121- react.internal.useHermesNightly=true
147+ react.internal.useHermesStable=false
148+ react.internal.useHermesNightly=false
122149
123150 in the ./gradle.properties file.
124151
@@ -127,12 +154,20 @@ if (project.findProperty("react.internal.useHermesNightly")?.toString()?.toBoole
127154 """
128155 .trimIndent()
129156 )
157+ }
158+
159+ if (hermesSubstitution != null ) {
160+ val (hermesVersion, reason) = hermesSubstitution!!
161+ project(" :packages:react-native:ReactAndroid:hermes-engine" ) {
162+ tasks.configureEach { enabled = false }
163+ }
164+
130165 allprojects {
131166 configurations.all {
132167 resolutionStrategy.dependencySubstitution {
133168 substitute(project(" :packages:react-native:ReactAndroid:hermes-engine" ))
134- .using(module(" com.facebook.hermes:hermes-android:0.+ " ))
135- .because(" Users opted to use hermes from nightly " )
169+ .using(module(" com.facebook.hermes:hermes-android:$hermesVersion " ))
170+ .because(reason )
136171 }
137172 }
138173 }
0 commit comments