@@ -14,21 +14,34 @@ group = "com.github.gabrielfeo"
1414version = " SNAPSHOT"
1515val repoUrl = " https://github.com/gabrielfeo/gradle-enterprise-api-kotlin"
1616
17+ val localSpecPath = providers.gradleProperty(" localSpecPath" )
18+ val remoteSpecUrl = providers.gradleProperty(" remoteSpecUrl" ).orElse(
19+ providers.gradleProperty(" gradle.enterprise.version" ).map { geVersion ->
20+ val specName = " gradle-enterprise-$geVersion -api.yaml"
21+ " https://docs.gradle.com/enterprise/api-manual/ref/$specName "
22+ }
23+ )
24+
1725val downloadApiSpec by tasks.registering {
18- val geVersion = providers.gradleProperty( " gradle.enterprise.version " ).get()
19- val specName = " gradle-enterprise- $geVersion -api.yaml "
20- val spec = resources.text.fromUri( " https://docs.gradle.com/enterprise/api-manual/ref/ $specName " )
26+ onlyIf { ! localSpecPath.isPresent() }
27+ val spec = resources.text.fromUri(remoteSpecUrl)
28+ val specName = remoteSpecUrl.map { it.substringAfterLast( ' / ' ) }
2129 val outFile = project.layout.buildDirectory.file(specName)
22- inputs.property(" GE version " , geVersion )
30+ inputs.property(" Spec URL " , remoteSpecUrl )
2331 outputs.file(outFile)
2432 doLast {
33+ logger.info(" Downloaded API spec from ${remoteSpecUrl.get()} " )
2534 spec.asFile().renameTo(outFile.get().asFile)
2635 }
2736}
2837
2938openApiGenerate {
3039 generatorName.set(" kotlin" )
31- inputSpec.set(downloadApiSpec.map { it.outputs.files.first().absolutePath })
40+ val spec = when {
41+ localSpecPath.isPresent() -> localSpecPath.map { File (it).absolutePath }
42+ else -> downloadApiSpec.map { it.outputs.files.first().absolutePath }
43+ }
44+ inputSpec.set(spec)
3245 val generateDir = project.layout.buildDirectory.file(" generated/openapi-generator" )
3346 outputDir.set(generateDir.map { it.asFile.absolutePath })
3447 val ignoreFile = project.layout.projectDirectory.file(" .openapi-generator-ignore" )
@@ -42,6 +55,9 @@ openApiGenerate {
4255}
4356
4457tasks.openApiGenerate.configure {
58+ doFirst {
59+ logger.info(" Using API spec ${inputSpec.get()} " )
60+ }
4561 // Replace Response<X> with X in every method return type of GradleEnterpriseApi.kt
4662 doLast {
4763 val apiFile = File (
@@ -57,6 +73,38 @@ tasks.openApiGenerate.configure {
5773 )
5874 }
5975 }
76+ // Workaround for properties generated with `arrayListOf(null,null)` as default value
77+ doLast {
78+ val srcDir = File (outputDir.get(), " src/main/kotlin" )
79+ ant.withGroovyBuilder {
80+ " replaceregexp" (
81+ " match" to """ arrayListOf\(null,null\)""" ,
82+ " replace" to """ emptyList()""" ,
83+ " flags" to " gm" ,
84+ ) {
85+ " fileset" (
86+ " dir" to srcDir
87+ )
88+ }
89+ }
90+ }
91+ // Workaround for missing imports of exploded queries
92+ doLast {
93+ val srcDir = File (outputDir.get(), " src/main/kotlin" )
94+ val modelPackage = openApiGenerate.modelPackage.get()
95+ val modelPackagePattern = modelPackage.replace(" ." , " \\ ." )
96+ ant.withGroovyBuilder {
97+ " replaceregexp" (
98+ " match" to """ (?:import $modelPackagePattern .[.\w]+\s)+""" ,
99+ " replace" to " import $modelPackage .*\n " ,
100+ " flags" to " m" ,
101+ ) {
102+ " fileset" (
103+ " dir" to srcDir
104+ )
105+ }
106+ }
107+ }
60108}
61109
62110sourceSets {
0 commit comments