Skip to content

Commit a00dc1b

Browse files
authored
expose regular configurations for multi-module projects (#6408)
1 parent bfdffdd commit a00dc1b

File tree

28 files changed

+199
-54
lines changed

28 files changed

+199
-54
lines changed

libraries/apollo-compiler/src/main/kotlin/com/apollographql/apollo/compiler/entrypoints.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ internal fun Consumer<String>.toLogger(): ApolloCompiler.Logger {
186186
@ApolloInternal
187187
fun Iterable<File>.findCodegenSchemaFile(): File {
188188
return firstOrNull {
189+
/*
190+
* TODO v5: simplify this and add a schema { } block to the Gradle configuration
191+
*/
189192
it.length() > 0
190193
} ?: error("Cannot find CodegenSchema in $this")
191194
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ internal enum class ApolloDirection {
1818
}
1919

2020
internal enum class ConfigurationKind {
21-
DependencyScope,
2221
Consumable,
2322
Resolvable
2423
}

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

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ abstract class DefaultApolloExtension(
7272

7373
internal fun registerDownstreamProject(serviceName: String, projectPath: String) {
7474
project.configurations.configureEach {
75-
if (it.name == ModelNames.configuration(serviceName, ApolloDirection.Downstream, ApolloUsage.Ir, ConfigurationKind.DependencyScope)) {
75+
if (it.name == ModelNames.scopeConfiguration(serviceName, ApolloDirection.Downstream)) {
7676
it.dependencies.add(project.dependencies.project(mapOf("path" to projectPath)))
7777
}
7878
}
@@ -391,36 +391,32 @@ abstract class DefaultApolloExtension(
391391
}
392392

393393
class Configurations(
394-
val scope: Configuration,
395394
val consumable: Configuration,
396395
val resolvable: Configuration,
397396
)
397+
398398
private fun createConfigurations(
399399
serviceName: String,
400400
apolloUsage: ApolloUsage,
401401
direction: ApolloDirection,
402+
extendsFrom: Configuration
402403
): Configurations {
403-
val dependencyScope = project.configurations.create(ModelNames.configuration(serviceName, direction, apolloUsage, ConfigurationKind.DependencyScope )) {
404-
it.isCanBeConsumed = false
405-
it.isCanBeResolved = false
406-
}
407404
val consumable = project.configurations.create(ModelNames.configuration(serviceName, direction, apolloUsage, ConfigurationKind.Consumable )) {
408405
it.isCanBeConsumed = true
409406
it.isCanBeResolved = false
410407

411-
it.extendsFrom(dependencyScope)
408+
it.extendsFrom(extendsFrom)
412409
it.attributes(serviceName, apolloUsage, direction)
413410
}
414411
val resolvable = project.configurations.create(ModelNames.configuration(serviceName, direction, apolloUsage, ConfigurationKind.Resolvable )) {
415412
it.isCanBeConsumed = false
416413
it.isCanBeResolved = true
417414

418-
it.extendsFrom(dependencyScope)
415+
it.extendsFrom(extendsFrom)
419416
it.attributes(serviceName, apolloUsage, direction)
420417
}
421418

422419
return Configurations(
423-
scope = dependencyScope,
424420
consumable = consumable,
425421
resolvable = resolvable
426422
)
@@ -455,10 +451,20 @@ abstract class DefaultApolloExtension(
455451

456452
val sourcesBaseTaskProvider: TaskProvider<*>
457453

454+
val upstreamScope = project.configurations.create(ModelNames.scopeConfiguration(service.name, ApolloDirection.Upstream)) {
455+
it.isCanBeConsumed = false
456+
it.isCanBeResolved = false
457+
}
458+
val downstreamScope = project.configurations.create(ModelNames.scopeConfiguration(service.name, ApolloDirection.Downstream)) {
459+
it.isCanBeConsumed = false
460+
it.isCanBeResolved = false
461+
}
462+
458463
val otherOptions = createConfigurations(
459464
serviceName = service.name,
460465
apolloUsage = ApolloUsage.OtherOptions,
461466
direction = ApolloDirection.Upstream,
467+
extendsFrom = upstreamScope
462468
)
463469

464470
val compilerConfiguration = project.configurations.create(ModelNames.compilerConfiguration(service)) {
@@ -489,24 +495,28 @@ abstract class DefaultApolloExtension(
489495
serviceName = service.name,
490496
apolloUsage = ApolloUsage.CodegenSchema,
491497
direction = ApolloDirection.Upstream,
498+
extendsFrom = upstreamScope
492499
)
493500

494501
val upstreamIr = createConfigurations(
495502
serviceName = service.name,
496503
apolloUsage = ApolloUsage.Ir,
497504
direction = ApolloDirection.Upstream,
505+
extendsFrom = upstreamScope
498506
)
499507

500508
val downstreamIr = createConfigurations(
501509
serviceName = service.name,
502510
apolloUsage = ApolloUsage.Ir,
503511
direction = ApolloDirection.Downstream,
512+
extendsFrom = downstreamScope
504513
)
505514

506515
val codegenMetadata = createConfigurations(
507516
serviceName = service.name,
508517
apolloUsage = ApolloUsage.CodegenMetadata,
509518
direction = ApolloDirection.Upstream,
519+
extendsFrom = upstreamScope
510520
)
511521

512522
/**
@@ -607,14 +617,11 @@ abstract class DefaultApolloExtension(
607617
}
608618

609619
service.upstreamDependencies.forEach {
610-
otherOptions.scope.dependencies.add(it)
611-
codegenSchema.scope.dependencies.add(it)
612-
upstreamIr.scope.dependencies.add(it)
613-
codegenMetadata.scope.dependencies.add(it)
620+
upstreamScope.dependencies.add(it)
614621
}
615622

616623
service.downstreamDependencies.forEach {
617-
downstreamIr.scope.dependencies.add(it)
624+
downstreamScope.dependencies.add(it)
618625
}
619626
}
620627

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

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,40 @@ internal object ModelNames {
3333
@Deprecated("Unused. Use dependsOn() instead.")
3434
@ApolloDeprecatedSince(ApolloDeprecatedSince.Version.v4_0_0)
3535
fun metadataConfiguration() = "apolloMetadata"
36-
fun configuration(serviceName: String, apolloDirection: ApolloDirection, apolloUsage: ApolloUsage, configurationKind: ConfigurationKind): String {
36+
37+
fun scopeConfiguration(
38+
serviceName: String,
39+
apolloDirection: ApolloDirection,
40+
): String {
3741
return camelCase(
3842
"apollo",
3943
serviceName,
4044
apolloDirection.pretty(),
41-
apolloUsage.name,
42-
configurationKind.pretty()
4345
)
4446
}
45-
fun compilerConfiguration(service: Service) = camelCase("apollo", service.name, "Compiler")
46-
}
4747

48-
private fun ConfigurationKind.pretty(): String {
49-
return when(this) {
50-
ConfigurationKind.DependencyScope -> ""
51-
else -> name
48+
fun configuration(
49+
serviceName: String,
50+
apolloDirection: ApolloDirection,
51+
apolloUsage: ApolloUsage,
52+
configurationKind: ConfigurationKind,
53+
): String {
54+
return camelCase(
55+
"apollo",
56+
serviceName,
57+
apolloDirection.pretty(),
58+
apolloUsage.name,
59+
configurationKind.name
60+
)
5261
}
62+
63+
fun compilerConfiguration(service: Service) = camelCase("apollo", service.name, "Compiler")
5364
}
5465

5566

5667
private fun ApolloDirection.pretty(): String {
57-
return when(this) {
68+
return when (this) {
5869
ApolloDirection.Upstream -> ""
59-
ApolloDirection.Downstream -> name
70+
ApolloDirection.Downstream -> "UsedCoordinates"
6071
}
6172
}

libraries/apollo-gradle-plugin/testProjects/configuration-cache/leaf/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ dependencies {
1313
apollo {
1414
service("service") {
1515
packageName.set("com.example.leaf")
16-
dependsOn(project(":root"))
16+
alwaysGenerateTypesMatching.set(emptyList())
17+
generateApolloMetadata.set(true)
1718
}
1819
}
20+
21+
dependencies {
22+
add("apolloService", project(":root"))
23+
}

libraries/apollo-gradle-plugin/testProjects/configuration-cache/root/build.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@ apollo {
77
service("service") {
88
packageName.set("com.example")
99
generateApolloMetadata.set(true)
10-
isADependencyOf(project(":leaf"))
10+
alwaysGenerateTypesMatching.set(emptyList())
1111

1212
introspection {
1313
this.endpointUrl.set("ENDPOINT")
1414
schemaFile.set(file("schema.json"))
1515
}
1616
}
1717
}
18+
19+
dependencies {
20+
add("apolloServiceUsedCoordinates", project(":leaf"))
21+
}

libraries/apollo-gradle-plugin/testProjects/multi-modules-badconfig/leaf/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ dependencies {
1111
apollo {
1212
service("service") {
1313
// PLACEHOLDER
14+
alwaysGenerateTypesMatching.set(emptyList())
15+
generateApolloMetadata.set(true)
1416
packageNamesFromFilePaths()
15-
dependsOn(project(":root"))
1617
}
1718
}
19+
20+
dependencies {
21+
add("apolloService", project(":root"))
22+
}

libraries/apollo-gradle-plugin/testProjects/multi-modules-badconfig/root/build.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@ apollo {
1515
service("service") {
1616
packageNamesFromFilePaths()
1717
// PLACEHOLDER
18+
alwaysGenerateTypesMatching.set(emptyList())
1819
generateApolloMetadata.set(true)
19-
isADependencyOf(project(":leaf"))
2020
mapScalar("Date", "java.util.Date")
2121
}
2222
}
23+
24+
dependencies {
25+
add("apolloServiceUsedCoordinates", project(":leaf"))
26+
}

libraries/apollo-gradle-plugin/testProjects/multi-modules-custom-scalar-defined-in-leaf/leaf/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ apollo {
1515
service("service") {
1616
packageName.set("com.library")
1717
mapScalar("Long", "java.lang.Long")
18+
/**
19+
* We need to call `dependsOn` here to know at graph build time that the schema is coming
20+
* from a dependency and do the checks for the redundant scalar configuration.
21+
*
22+
* TODO v5: add a specific `schema` block so that we can know this
23+
*/
1824
dependsOn(project(":root"))
1925
}
2026
}
27+

libraries/apollo-gradle-plugin/testProjects/multi-modules-custom-scalar/leaf/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ application {
1919
apollo {
2020
service("service") {
2121
packageName.set("com.library")
22-
dependsOn(project(":root"))
22+
alwaysGenerateTypesMatching.set(emptyList())
23+
generateApolloMetadata.set(true)
2324
}
2425
}
26+
27+
dependencies {
28+
add("apolloService", project(":root"))
29+
}

0 commit comments

Comments
 (0)