RNGP - ENTRY_FILE should resolve relative paths from root (#36193)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/36193

Fixes #36186

Changelog:
[Android] [Fixed] - ENTRY_FILE should resolve relative paths from root

Reviewed By: cipolleschi

Differential Revision: D43392121

fbshipit-source-id: ddf302d333c5fc5f822e0635a73e5b52470140ee
This commit is contained in:
Nicola Corti
2023-02-17 07:40:09 -08:00
committed by Lorenzo Sciandra
parent de512cd127
commit f2bfe912cf
3 changed files with 26 additions and 5 deletions
@@ -51,13 +51,14 @@ internal fun Project.configureReactTasks(variant: Variant, config: ReactExtensio
configureJsEnginePackagingOptions(config, variant, isHermesEnabledInThisVariant)
if (!isDebuggableVariant) {
val entryFileEnvVariable = System.getenv("ENTRY_FILE")
val bundleTask =
tasks.register("createBundle${targetName}JsAndAssets", BundleHermesCTask::class.java) {
it.root.set(config.root)
it.nodeExecutableAndArgs.set(config.nodeExecutableAndArgs)
it.cliFile.set(cliFile)
it.bundleCommand.set(config.bundleCommand)
it.entryFile.set(detectedEntryFile(config))
it.entryFile.set(detectedEntryFile(config, entryFileEnvVariable))
it.extraPackagerArgs.set(config.extraPackagerArgs)
it.bundleConfig.set(config.bundleConfig)
it.bundleAssetName.set(config.bundleAssetName)
@@ -25,9 +25,11 @@ import org.gradle.api.file.DirectoryProperty
*
* @param config The [ReactExtension] configured for this project
*/
internal fun detectedEntryFile(config: ReactExtension): File =
internal fun detectedEntryFile(config: ReactExtension, envVariableOverride: String? = null): File =
detectEntryFile(
entryFile = config.entryFile.orNull?.asFile, reactRoot = config.root.get().asFile)
entryFile = config.entryFile.orNull?.asFile,
reactRoot = config.root.get().asFile,
envVariableOverride = envVariableOverride)
/**
* Computes the CLI file for React Native. The Algo follows this order:
@@ -54,9 +56,13 @@ internal fun detectedCliFile(config: ReactExtension): File =
internal fun detectedHermesCommand(config: ReactExtension): String =
detectOSAwareHermesCommand(config.root.get().asFile, config.hermesCommand.get())
private fun detectEntryFile(entryFile: File?, reactRoot: File): File =
private fun detectEntryFile(
entryFile: File?,
reactRoot: File,
envVariableOverride: String? = null
): File =
when {
System.getenv("ENTRY_FILE") != null -> File(System.getenv("ENTRY_FILE"))
envVariableOverride != null -> File(reactRoot, envVariableOverride)
entryFile != null -> entryFile
File(reactRoot, "index.android.js").exists() -> File(reactRoot, "index.android.js")
else -> File(reactRoot, "index.js")
@@ -57,6 +57,20 @@ class PathUtilsTest {
assertEquals(File(tempFolder.root, "index.js"), actual)
}
@Test
fun detectedEntryFile_withEnvironmentVariable() {
val extension = TestReactExtension(ProjectBuilder.builder().build())
val expected = tempFolder.newFile("./fromenv.index.js")
// As we can't override env variable for tests, we're going to emulate them here.
val envVariable = "./fromenv.index.js"
extension.root.set(tempFolder.root)
val actual = detectedEntryFile(extension, envVariable)
assertEquals(expected, actual)
}
@Test
fun detectedCliPath_withCliPathFromExtensionAndFileExists_returnsIt() {
val project = ProjectBuilder.builder().build()