Skip to content

Commit 227f250

Browse files
authored
Add ApolloExtension.useGradleVariants (#6325)
* Publish Apollo metadata as variants in the main publication * fix tests * fix if
1 parent 7449aab commit 227f250

File tree

14 files changed

+148
-72
lines changed

14 files changed

+148
-72
lines changed

libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo/gradle/api/ApolloExtension.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.apollographql.apollo.gradle.api
22

3+
import com.apollographql.apollo.annotations.ApolloExperimental
34
import org.gradle.api.Action
45
import org.gradle.api.provider.Property
56

@@ -89,6 +90,9 @@ interface ApolloExtension {
8990
*/
9091
val generateSourcesDuringGradleSync: Property<Boolean>
9192

93+
@ApolloExperimental
94+
val useGradleVariants: Property<Boolean>
95+
9296
/**
9397
* Common apollo dependencies using the same version as the Apollo Gradle Plugin currently in the classpath
9498
*/

libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo/gradle/internal/DefaultApolloExtension.kt

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import org.gradle.util.GradleVersion
3535
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
3636
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
3737
import java.io.File
38+
import java.lang.reflect.Field
3839
import java.util.concurrent.Callable
3940
import javax.inject.Inject
4041

@@ -48,7 +49,9 @@ abstract class DefaultApolloExtension(
4849
private val checkVersionsTask: TaskProvider<Task>
4950
private val generateApolloSources: TaskProvider<Task>
5051
private var hasExplicitService = false
51-
private val adhocComponentWithVariants: AdhocComponentWithVariants
52+
private val adhocComponentWithVariants: AdhocComponentWithVariants by lazy {
53+
project.adhocComponentWithVariants()
54+
}
5255
private val apolloMetadataConfiguration: Configuration
5356
private var apolloBuildServiceProvider: Provider<ApolloBuildService>
5457

@@ -144,9 +147,6 @@ abstract class DefaultApolloExtension(
144147
"apollo-kotlin requires Gradle version $MIN_GRADLE_VERSION or greater"
145148
}
146149

147-
adhocComponentWithVariants = softwareComponentFactory.adhoc("apollo")
148-
project.components.add(adhocComponentWithVariants)
149-
150150
checkVersionsTask = registerCheckVersionsTask()
151151

152152
/**
@@ -386,7 +386,7 @@ abstract class DefaultApolloExtension(
386386
class Configurations(
387387
val scope: Configuration,
388388
val consumable: Configuration,
389-
val resolvable: Configuration
389+
val resolvable: Configuration,
390390
)
391391
private fun createConfigurations(
392392
serviceName: String,
@@ -1035,4 +1035,27 @@ abstract class DefaultApolloExtension(
10351035
}
10361036

10371037
override val deps: ApolloDependencies = ApolloDependencies(project.dependencies)
1038+
1039+
private fun Project.adhocComponentWithVariants(): AdhocComponentWithVariants {
1040+
if (useGradleVariants.getOrElse(false)) {
1041+
val javaComponent = project.components.findByName("java")
1042+
if (javaComponent != null) {
1043+
// JVM
1044+
return javaComponent as AdhocComponentWithVariants
1045+
}
1046+
1047+
val kotlin = project.kotlinMultiplatformExtension
1048+
if (kotlin != null) {
1049+
error("Adding variants to multiplatform project is not possible. See https://youtrack.jetbrains.com/issue/KT-58830/")
1050+
}
1051+
1052+
error("Impossible to find an AdHocComponent")
1053+
} else {
1054+
return softwareComponentFactory.adhoc("apollo").also {
1055+
project.components.add(it)
1056+
}
1057+
}
1058+
}
10381059
}
1060+
1061+

libraries/apollo-gradle-plugin/src/test-java11/kotlin/com/apollographql/apollo/gradle/test/MultiModulesTests.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,12 @@ class MultiModulesTests {
114114
@Test
115115
fun `metadata is published`() {
116116
TestUtils.withTestProject("multi-modules-publishing-producer") { dir ->
117-
TestUtils.executeTaskAndAssertSuccess(
118-
":publishAllPublicationsToPluginTestRepository",
117+
val result = TestUtils.executeTask(
118+
"publishAllPublicationsToPluginTestRepository",
119119
dir
120120
)
121+
Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":schema:publishAllPublicationsToPluginTestRepository")?.outcome)
122+
Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":fragments:publishAllPublicationsToPluginTestRepository")?.outcome)
121123
}
122124
TestUtils.withTestProject("multi-modules-publishing-consumer") { dir ->
123125
TestUtils.executeTaskAndAssertSuccess(

libraries/apollo-gradle-plugin/testProjects/multi-modules-publishing-consumer/build.gradle.kts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ plugins {
66

77
dependencies {
88
add("implementation", libs.apollo.api)
9-
add("implementation", "com.jvm:jvm-producer:1.0.0")
9+
add("implementation", "com.fragments:fragments:1.0.0")
1010
}
1111

1212
apollo {
13-
service("jvm") {
14-
packageName.set("com.consumer")
15-
dependsOn("com.jvm:jvm-producer-apollo:1.0.0")
13+
service("service1") {
14+
packageName.set("com.service1")
15+
dependsOn("com.fragments:fragments:1.0.0")
1616
}
17-
service("jvm2") {
18-
packageName.set("com.consumer2")
19-
dependsOn("com.jvm:jvm-producer-apollo:1.0.0")
17+
service("service2") {
18+
packageName.set("com.service2")
19+
dependsOn("com.fragments:fragments:1.0.0")
2020
}
2121
}
2222

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
query GetField($fieldInput: FieldInput!) {
2+
...QueryDetails
3+
}
4+

libraries/apollo-gradle-plugin/testProjects/multi-modules-publishing-consumer/src/main/graphql/some/path/operation.graphql

Lines changed: 0 additions & 8 deletions
This file was deleted.

libraries/apollo-gradle-plugin/testProjects/multi-modules-publishing-consumer/src/main/kotlin/Main.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@ fun main() {
22
/**
33
* This just ensures the classes are built and accessible
44
*/
5-
// Classes from the dependency
6-
println(com.jvm.type.FieldInput::class.java)
7-
println(com.jvm.type.FieldInput2::class.java)
8-
println(com.jvm2.type.FieldInput::class.java)
5+
// Classes from the schema
6+
println(com.service1.type.FieldInput::class.java)
7+
println(com.service1.type.FieldInput2::class.java)
8+
println(com.service2.type.FieldInput::class.java)
9+
println(com.service2.type.FieldInput2::class.java)
10+
11+
// Fragments
12+
println(com.service1.fragment.QueryDetails::class.java)
13+
println(com.service2.fragment.QueryDetails::class.java)
914

1015
// Classes from this module
11-
println(com.consumer.GetField2Query::class.java)
12-
println(com.consumer2.GetField2Query::class.java)
16+
println(com.service1.GetFieldQuery::class.java)
17+
println(com.service2.GetFieldQuery::class.java)
1318
}
Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,6 @@
11

22
plugins {
3-
alias(libs.plugins.kotlin.jvm)
4-
alias(libs.plugins.apollo)
5-
id("maven-publish")
3+
alias(libs.plugins.kotlin.jvm).apply(false)
4+
alias(libs.plugins.apollo).apply(false)
65
}
76

8-
group = "com.jvm"
9-
version = "1.0.0"
10-
11-
dependencies {
12-
add("implementation", libs.apollo.api)
13-
}
14-
15-
apollo {
16-
service("jvm") {
17-
packageName.set("com.jvm")
18-
generateApolloMetadata.set(true)
19-
alwaysGenerateTypesMatching.add(".*")
20-
}
21-
service("jvm2") {
22-
packageName.set("com.jvm2")
23-
generateApolloMetadata.set(true)
24-
alwaysGenerateTypesMatching.add(".*")
25-
}
26-
}
27-
28-
configure<PublishingExtension> {
29-
publications {
30-
create<MavenPublication>("mavenJava") {
31-
from(components["java"])
32-
}
33-
create<MavenPublication>("apollo") {
34-
from(components["apollo"])
35-
artifactId = "jvm-producer-apollo"
36-
}
37-
}
38-
repositories {
39-
maven {
40-
name = "pluginTest"
41-
url = uri("file://${rootProject.rootDir.parentFile}/localMaven")
42-
}
43-
}
44-
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
2+
plugins {
3+
alias(libs.plugins.kotlin.jvm)
4+
alias(libs.plugins.apollo)
5+
id("maven-publish")
6+
}
7+
8+
group = "com.fragments"
9+
version = "1.0.0"
10+
11+
dependencies {
12+
add("api", project(":schema"))
13+
}
14+
15+
apollo {
16+
useGradleVariants.set(true)
17+
18+
service("service1") {
19+
packageName.set("com.service1")
20+
dependsOn(project(":schema"))
21+
}
22+
service("service2") {
23+
packageName.set("com.service2")
24+
dependsOn(project(":schema"))
25+
}
26+
}
27+
28+
configure<PublishingExtension> {
29+
publications {
30+
create<MavenPublication>("default") {
31+
from(components["java"])
32+
}
33+
}
34+
repositories {
35+
maven {
36+
name = "pluginTest"
37+
url = uri("file://${rootProject.rootDir.parentFile}/localMaven")
38+
}
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
fragment QueryDetails on Query {
2+
field(fieldInput: $fieldInput)
3+
}

0 commit comments

Comments
 (0)