diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 606a712ea66..170e36776e9 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -21,7 +21,7 @@ jobs: ulimit -c unlimited # Workaround an issue where kotlinNpmInstall outputs # 'Resolving NPM dependencies using yarn' returns 137 - ./gradlew compileKotlinJsIr compileKotlinJsLegacy + ./gradlew compileKotlinJs ./gradlew --stop - run: | # Build the libs diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index bd1bcc921ac..ab2e6605931 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -26,7 +26,7 @@ jobs: ulimit -c unlimited # Workaround an issue where kotlinNpmInstall outputs # 'Resolving NPM dependencies using yarn' returns 137 - ./gradlew compileKotlinJsIr compileKotlinJsLegacy + ./gradlew compileKotlinJs ./gradlew --stop ./gradlew ciTestsGradle - name: Collect Diagnostics @@ -52,7 +52,7 @@ jobs: ulimit -c unlimited # Workaround an issue where kotlinNpmInstall outputs # 'Resolving NPM dependencies using yarn' returns 137 - ./gradlew compileKotlinJsIr compileKotlinJsLegacy --stacktrace + ./gradlew compileKotlinJs --stacktrace ./gradlew --stop ./gradlew ciTestsNoGradle --stacktrace - name: Collect Diagnostics @@ -78,7 +78,7 @@ jobs: ulimit -c unlimited # Workaround an issue where kotlinNpmInstall outputs # 'Resolving NPM dependencies using yarn' returns 137 - ./gradlew compileKotlinJsIr compileKotlinJsLegacy + ./gradlew compileKotlinJs ./gradlew --stop ./gradlew -p tests ciBuild - name: Collect Diagnostics diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 8521d1b56b8..4a6266c8e80 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -23,7 +23,7 @@ jobs: ulimit -c unlimited # Workaround an issue where kotlinNpmInstall outputs # 'Resolving NPM dependencies using yarn' returns 137 - ./gradlew --no-build-cache compileKotlinJsIr compileKotlinJsLegacy + ./gradlew --no-build-cache compileKotlinJs ./gradlew --stop ./gradlew --no-build-cache ciBuild ./gradlew --stop diff --git a/build-logic/src/main/kotlin/Mpp.kt b/build-logic/src/main/kotlin/Mpp.kt index 77462ce4b14..601a34b07dd 100644 --- a/build-logic/src/main/kotlin/Mpp.kt +++ b/build-logic/src/main/kotlin/Mpp.kt @@ -1,6 +1,5 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget @@ -37,7 +36,6 @@ fun Project.configureMppDefaults(withJs: Boolean, withLinux: Boolean, withAndroi withLinux = withLinux, appleTargets = enabledAppleTargets, withAndroid = withAndroid, - kotlinJsCompilerType = KotlinJsCompilerType.BOTH, newMemoryManager = null ) } @@ -59,7 +57,6 @@ fun Project.configureMppTestsDefaults( withLinux = false, withAndroid = false, appleTargets = appleTargets, - kotlinJsCompilerType = KotlinJsCompilerType.IR, newMemoryManager = newMemoryManager ) } @@ -70,7 +67,6 @@ fun Project.configureMpp( withLinux: Boolean, withAndroid: Boolean, appleTargets: Collection, - kotlinJsCompilerType: KotlinJsCompilerType, newMemoryManager: Boolean?, ) { val kotlinExtension = extensions.findByName("kotlin") as? KotlinMultiplatformExtension @@ -83,7 +79,7 @@ fun Project.configureMpp( } if (enabledJs && withJs) { - js(kotlinJsCompilerType) { + js(IR) { nodejs { testTask { useMocha { @@ -135,7 +131,7 @@ private fun KotlinMultiplatformExtension.createAndConfigureAppleTargets(presetNa if (presetNames.isEmpty()) { return } - + if (System.getProperty("idea.sync.active") != null) { // Early return. Inside intelliJ, only configure one target targetFromPreset(presets.getByName(hostTarget), "apple") diff --git a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/BuildDirLayout.kt b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/BuildDirLayout.kt index 47c51c1a659..bf7e7ea31e5 100644 --- a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/BuildDirLayout.kt +++ b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/BuildDirLayout.kt @@ -49,6 +49,12 @@ object BuildDirLayout { ) } + internal fun legacyJsTargetCheck(project: Project): Provider { + return project.layout.buildDirectory.file( + "generated/checks/apollo/legacyJsTargetCheck" + ) + } + internal fun duplicatesCheck(project: Project, service: Service): Provider { return project.layout.buildDirectory.file( "generated/checks/apollo/${service.name}/duplicatesCheck" diff --git a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt index 043053e0700..d246cb08fae 100644 --- a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt +++ b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt @@ -15,7 +15,6 @@ import com.apollographql.apollo3.compiler.hooks.ApolloCompilerKotlinHooks import com.apollographql.apollo3.compiler.hooks.internal.AddInternalCompilerHooks import com.apollographql.apollo3.compiler.hooks.internal.ApolloCompilerJavaHooksChain import com.apollographql.apollo3.compiler.hooks.internal.ApolloCompilerKotlinHooksChain -import com.apollographql.apollo3.compiler.toUsedCoordinates import com.apollographql.apollo3.gradle.api.AndroidProject import com.apollographql.apollo3.gradle.api.ApolloAttributes import com.apollographql.apollo3.gradle.api.ApolloExtension @@ -41,6 +40,7 @@ import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.tasks.TaskProvider import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import java.io.File import java.util.concurrent.Callable import javax.inject.Inject @@ -131,7 +131,7 @@ abstract class DefaultApolloExtension( project.afterEvaluate { if (registerDefaultService) { - val packageNameLine = if (defaultService.packageName.isPresent) { + val packageNameLine = if (defaultService.packageName.isPresent) { "packageName.set(\"${defaultService.packageName.get()}\")" } else { "packageNamesFromFilePaths()" @@ -184,6 +184,16 @@ abstract class DefaultApolloExtension( } maybeLinkSqlite() + + checkForLegacyJsTarget() + } + } + + private fun checkForLegacyJsTarget() { + val kotlin = project.extensions.findByName("kotlin") as? KotlinMultiplatformExtension + val hasLegacyJsTarget = kotlin?.targets?.any { target -> target is KotlinJsTarget && target.irTarget == null } == true + check(!hasLegacyJsTarget) { + "Apollo: LEGACY js target is not supported by Apollo, please use IR." } } diff --git a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ModelNames.kt b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ModelNames.kt index 557c670a742..8317e5baa99 100644 --- a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ModelNames.kt +++ b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ModelNames.kt @@ -47,4 +47,4 @@ object ModelNames { * A resolvable configuration that will collect all metadata for a given service name */ fun duplicatesConsumerConfiguration(service: Service) = camelCase("apollo", service.name, "DuplicatesConsumer") -} \ No newline at end of file +} diff --git a/libraries/apollo-gradle-plugin/src/test/kotlin/com/apollographql/apollo3/gradle/test/ServiceTests.kt b/libraries/apollo-gradle-plugin/src/test/kotlin/com/apollographql/apollo3/gradle/test/ServiceTests.kt index e709bda9810..a73c11033f7 100644 --- a/libraries/apollo-gradle-plugin/src/test/kotlin/com/apollographql/apollo3/gradle/test/ServiceTests.kt +++ b/libraries/apollo-gradle-plugin/src/test/kotlin/com/apollographql/apollo3/gradle/test/ServiceTests.kt @@ -281,6 +281,19 @@ class ServiceTests { } } + @Test + fun `legacy js target is not supported`() { + withTestProject("legacyJsTarget") { dir -> + var exception: Exception? = null + try { + TestUtils.executeTask("generateApolloSources", dir) + } catch (e: UnexpectedBuildFailure) { + exception = e + Truth.assertThat(e.message).contains("Apollo: LEGACY js target is not supported by Apollo, please use IR.") + } + assertNotNull(exception) + } + } @Test fun `operationOutput uses same id as the query`() { diff --git a/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/build.gradle.kts b/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/build.gradle.kts new file mode 100644 index 00000000000..cd77ef5bfbf --- /dev/null +++ b/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.apollo) +} + +kotlin { + js(LEGACY) { + browser() + } +} + +apollo { + service("service") { + packageNamesFromFilePaths() + } +} diff --git a/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/settings.gradle.kts b/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/settings.gradle.kts new file mode 100644 index 00000000000..fa2cf0ea160 --- /dev/null +++ b/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/settings.gradle.kts @@ -0,0 +1 @@ +apply(from = "../../../../gradle/test.settings.gradle.kts") diff --git a/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/src/commonMain/graphql/schema.graphqls b/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/src/commonMain/graphql/schema.graphqls new file mode 100644 index 00000000000..748c06ead0d --- /dev/null +++ b/libraries/apollo-gradle-plugin/testProjects/legacyJsTarget/src/commonMain/graphql/schema.graphqls @@ -0,0 +1,3 @@ +type Query { + random: Int! +} \ No newline at end of file