diff --git a/.circleci/configurations/jobs.yml b/.circleci/configurations/jobs.yml index fc15c96f7b8263..4072fd09925646 100644 --- a/.circleci/configurations/jobs.yml +++ b/.circleci/configurations/jobs.yml @@ -286,7 +286,10 @@ jobs: - packages/react-native/ReactAndroid/hermes-engine/build/ - packages/react-native/ReactAndroid/src/main/jni/prebuilt/ - packages/react-native-gradle-plugin/.gradle/ - - packages/react-native-gradle-plugin/build/ + - packages/react-native-gradle-plugin/react-native-gradle-plugin/build/ + - packages/react-native-gradle-plugin/settings-plugin/build/ + - packages/react-native-gradle-plugin/shared/build/ + - packages/react-native-gradle-plugin/shared-testutil/build/ - packages/react-native-codegen/lib/ # ------------------------- diff --git a/packages/react-native-gradle-plugin/.gitignore b/packages/react-native-gradle-plugin/.gitignore index 7b987dbf0c939a..8d5168254d8020 100644 --- a/packages/react-native-gradle-plugin/.gitignore +++ b/packages/react-native-gradle-plugin/.gitignore @@ -2,3 +2,4 @@ build/ app-plugin/build/ settings-plugin/build/ shared/build/ +shared-testutil/build/ \ No newline at end of file diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/build.gradle.kts b/packages/react-native-gradle-plugin/react-native-gradle-plugin/build.gradle.kts index b34e30a678630b..344ac62ef259ff 100644 --- a/packages/react-native-gradle-plugin/react-native-gradle-plugin/build.gradle.kts +++ b/packages/react-native-gradle-plugin/react-native-gradle-plugin/build.gradle.kts @@ -50,6 +50,7 @@ dependencies { implementation(libs.javapoet) testImplementation(libs.junit) + testImplementation(project(":shared-testutil")) testRuntimeOnly( files( diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/Os.kt b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/Os.kt index e00a793ca86d66..a741fde8e43dbd 100644 --- a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/Os.kt +++ b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/Os.kt @@ -10,7 +10,7 @@ package com.facebook.react.utils import com.facebook.react.utils.KotlinStdlibCompatUtils.lowercaseCompat import java.io.File -internal object Os { +object Os { fun isWindows(): Boolean = System.getProperty("os.name")?.lowercaseCompat()?.contains("windows") ?: false diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/TaskUtils.kt b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/TaskUtils.kt index df99d06e47bc26..7a8c5e2c02426c 100644 --- a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/TaskUtils.kt +++ b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/TaskUtils.kt @@ -7,17 +7,17 @@ package com.facebook.react.utils -internal fun windowsAwareCommandLine(vararg args: Any): List = +fun windowsAwareCommandLine(vararg args: Any): List = windowsAwareCommandLine(args.toList()) -internal fun windowsAwareCommandLine(args: List): List = +fun windowsAwareCommandLine(args: List): List = if (Os.isWindows()) { listOf("cmd", "/c") + args } else { args } -internal fun windowsAwareBashCommandLine( +fun windowsAwareBashCommandLine( vararg args: String, bashWindowsHome: String? = null ): List = diff --git a/packages/react-native-gradle-plugin/settings-plugin/build.gradle.kts b/packages/react-native-gradle-plugin/settings-plugin/build.gradle.kts index b6687a8a04d6cc..92a44acee9267b 100644 --- a/packages/react-native-gradle-plugin/settings-plugin/build.gradle.kts +++ b/packages/react-native-gradle-plugin/settings-plugin/build.gradle.kts @@ -40,6 +40,7 @@ dependencies { implementation(libs.javapoet) testImplementation(libs.junit) + testImplementation(project(":shared-testutil")) testRuntimeOnly( files( diff --git a/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt b/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt index 6d4f60e6fb48ca..8f2f4476d6dcae 100644 --- a/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt +++ b/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt @@ -8,6 +8,7 @@ package com.facebook.react import com.facebook.react.utils.JsonUtils +import com.facebook.react.utils.windowsAwareCommandLine import java.io.File import java.math.BigInteger import java.security.MessageDigest @@ -25,6 +26,11 @@ abstract class ReactSettingsExtension @Inject constructor(val settings: Settings private val outputFolder = settings.layout.rootDirectory.file("build/generated/autolinking/").asFile + private val defaultConfigCommand: List = + windowsAwareCommandLine(listOf("npx", "@react-native-community/cli", "config")).map { + it.toString() + } + /** * Utility function to autolink libraries using an external command as source of truth. * @@ -39,7 +45,7 @@ abstract class ReactSettingsExtension @Inject constructor(val settings: Settings */ @JvmOverloads public fun autolinkLibrariesFromCommand( - command: List = listOf("npx", "@react-native-community/cli", "config"), + command: List = defaultConfigCommand, workingDirectory: File? = settings.layout.rootDirectory.dir("../").asFile, lockFiles: FileCollection = settings.layout.rootDirectory diff --git a/packages/react-native-gradle-plugin/settings.gradle.kts b/packages/react-native-gradle-plugin/settings.gradle.kts index f342618821e50c..565cea4473c630 100644 --- a/packages/react-native-gradle-plugin/settings.gradle.kts +++ b/packages/react-native-gradle-plugin/settings.gradle.kts @@ -19,6 +19,7 @@ include( ":react-native-gradle-plugin", ":settings-plugin", ":shared", + ":shared-testutil", ) rootProject.name = "gradle-plugins-root" diff --git a/packages/react-native-gradle-plugin/shared-testutil/build.gradle.kts b/packages/react-native-gradle-plugin/shared-testutil/build.gradle.kts new file mode 100644 index 00000000000000..5f447e83e6a991 --- /dev/null +++ b/packages/react-native-gradle-plugin/shared-testutil/build.gradle.kts @@ -0,0 +1,38 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { alias(libs.plugins.kotlin.jvm) } + +repositories { mavenCentral() } + +group = "com.facebook.react" + +dependencies { implementation(libs.junit) } + +java { targetCompatibility = JavaVersion.VERSION_11 } + +kotlin { jvmToolchain(17) } + +tasks.withType().configureEach { + kotlinOptions { + apiVersion = "1.6" + jvmTarget = "11" + allWarningsAsErrors = true + } +} + +tasks.withType().configureEach { + testLogging { + exceptionFormat = TestExceptionFormat.FULL + showExceptions = true + showCauses = true + showStackTraces = true + } +} \ No newline at end of file diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/OsRule.kt b/packages/react-native-gradle-plugin/shared-testutil/src/main/kotlin/com/facebook/react/tests/OsRule.kt similarity index 100% rename from packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/OsRule.kt rename to packages/react-native-gradle-plugin/shared-testutil/src/main/kotlin/com/facebook/react/tests/OsRule.kt diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/WithOs.kt b/packages/react-native-gradle-plugin/shared-testutil/src/main/kotlin/com/facebook/react/tests/WithOs.kt similarity index 100% rename from packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/WithOs.kt rename to packages/react-native-gradle-plugin/shared-testutil/src/main/kotlin/com/facebook/react/tests/WithOs.kt diff --git a/packages/react-native-gradle-plugin/shared/build.gradle.kts b/packages/react-native-gradle-plugin/shared/build.gradle.kts index bccaeb47e853e7..fa76599233ef37 100644 --- a/packages/react-native-gradle-plugin/shared/build.gradle.kts +++ b/packages/react-native-gradle-plugin/shared/build.gradle.kts @@ -18,6 +18,7 @@ dependencies { implementation(libs.gson) implementation(libs.guava) testImplementation(libs.junit) + testImplementation(project(":shared-testutil")) } java { targetCompatibility = JavaVersion.VERSION_11 } diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtils.kt b/packages/react-native-gradle-plugin/shared/src/main/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtils.kt similarity index 100% rename from packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtils.kt rename to packages/react-native-gradle-plugin/shared/src/main/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtils.kt diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtilsTest.kt b/packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtilsTest.kt similarity index 100% rename from packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtilsTest.kt rename to packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtilsTest.kt diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/OsTest.kt b/packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt similarity index 100% rename from packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/OsTest.kt rename to packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/OsTest.kt diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/TaskUtilsTest.kt b/packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/TaskUtilsTest.kt similarity index 100% rename from packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/TaskUtilsTest.kt rename to packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/TaskUtilsTest.kt