11import com.diffplug.gradle.spotless.SpotlessExtension
22import com.vanniktech.maven.publish.JavaLibrary
33import com.vanniktech.maven.publish.JavadocJar
4+ import com.vanniktech.maven.publish.SourcesJar
45import net.ltgt.gradle.errorprone.CheckSeverity
56import net.ltgt.gradle.errorprone.errorprone
67
@@ -56,6 +57,7 @@ tasks.register("configureBuf") {
5657tasks.register<Exec >(" installLicenseHeader" ) {
5758 description = " Installs the Buf license-header CLI."
5859 environment(" GOBIN" , bufLicenseHeaderCLIFile.parentFile.absolutePath)
60+ inputs.property(" bufVersion" , libs.versions.buf.get())
5961 outputs.file(bufLicenseHeaderCLIFile)
6062 commandLine(" go" , " install" , " github.com/bufbuild/buf/private/pkg/licenseheader/cmd/license-header@v${libs.versions.buf.get()} " )
6163}
@@ -81,8 +83,11 @@ tasks.register<Exec>("licenseHeader") {
8183}
8284
8385tasks.register<Copy >(" filterBufGenYaml" ) {
84- from(" ." )
85- include(" buf.gen.yaml" , " src/**/buf*gen*.yaml" )
86+ from(files(" buf.gen.yaml" ))
87+ from(" src/test/resources/proto" ) {
88+ include(" buf*gen*.yaml" )
89+ into(" src/test/resources/proto" )
90+ }
8691 includeEmptyDirs = false
8792 into(layout.buildDirectory.dir(" buf-gen-templates" ))
8893 expand(" protocJavaPluginVersion" to " v${libs.versions.protobuf.get().substringAfter(' .' )} " )
@@ -92,34 +97,50 @@ tasks.register<Copy>("filterBufGenYaml") {
9297tasks.register<Exec >(" generateTestSourcesImports" ) {
9398 dependsOn(" exportProtovalidateModule" , " filterBufGenYaml" )
9499 description = " Generates code with buf generate --include-imports for unit tests."
100+ val template = layout.buildDirectory.file(" buf-gen-templates/src/test/resources/proto/buf.gen.imports.yaml" )
101+ inputs.files(buf)
102+ inputs.file(template)
103+ inputs.dir(" src/test/resources/proto" )
104+ outputs.dir(layout.buildDirectory.dir(" generated/test-sources/bufgen-imports" ))
95105 commandLine(
96106 buf.asPath,
97107 " generate" ,
98108 " --template" ,
99- " ${layout.buildDirectory. get()} /buf-gen-templates/src/test/resources/proto/buf.gen.imports.yaml " ,
109+ template. get().asFile.absolutePath ,
100110 " --include-imports" ,
101111 )
102112}
103113
104114tasks.register<Exec >(" generateTestSourcesNoImports" ) {
105115 dependsOn(" exportProtovalidateModule" , " filterBufGenYaml" )
106116 description = " Generates code with buf generate --include-imports for unit tests."
117+ val template = layout.buildDirectory.file(" buf-gen-templates/src/test/resources/proto/buf.gen.noimports.yaml" )
118+ inputs.files(buf)
119+ inputs.file(template)
120+ inputs.dir(" src/main/resources" )
121+ inputs.dir(" src/test/resources/proto" )
122+ outputs.dir(layout.buildDirectory.dir(" generated/test-sources/bufgen-noimports" ))
107123 commandLine(
108124 buf.asPath,
109125 " generate" ,
110126 " --template" ,
111- " ${layout.buildDirectory. get()} /buf-gen-templates/src/test/resources/proto/buf.gen.noimports.yaml " ,
127+ template. get().asFile.absolutePath ,
112128 )
113129}
114130
115131tasks.register<Exec >(" generateCelConformance" ) {
116132 dependsOn(" generateCelConformanceTestTypes" , " filterBufGenYaml" )
117133 description = " Generates CEL conformance code with buf generate for unit tests."
134+ val template = layout.buildDirectory.file(" buf-gen-templates/src/test/resources/proto/buf.gen.cel.yaml" )
135+ inputs.files(buf)
136+ inputs.file(template)
137+ inputs.property(" celSpecVersion" , project.findProperty(" cel.spec.version" ).toString())
138+ outputs.dir(layout.buildDirectory.dir(" generated/test-sources/bufgen-cel" ))
118139 commandLine(
119140 buf.asPath,
120141 " generate" ,
121142 " --template" ,
122- " ${layout.buildDirectory. get()} /buf-gen-templates/src/test/resources/proto/buf.gen.cel.yaml " ,
143+ template. get().asFile.absolutePath ,
123144 " buf.build/google/cel-spec:${project.findProperty(" cel.spec.version" )} " ,
124145 " --exclude-path" ,
125146 " cel/expr/conformance/proto2" ,
@@ -136,11 +157,16 @@ tasks.register<Exec>("generateCelConformance") {
136157tasks.register<Exec >(" generateCelConformanceTestTypes" ) {
137158 dependsOn(" exportProtovalidateModule" , " filterBufGenYaml" )
138159 description = " Generates CEL conformance test types with buf generate for unit tests using a Java package override."
160+ val template = layout.buildDirectory.file(" buf-gen-templates/src/test/resources/proto/buf.gen.cel.testtypes.yaml" )
161+ inputs.files(buf)
162+ inputs.file(template)
163+ inputs.property(" celSpecVersion" , project.findProperty(" cel.spec.version" ).toString())
164+ outputs.dir(layout.buildDirectory.dir(" generated/test-sources/bufgen-cel-testtypes" ))
139165 commandLine(
140166 buf.asPath,
141167 " generate" ,
142168 " --template" ,
143- " ${layout.buildDirectory. get()} /buf-gen-templates/src/test/resources/proto/buf.gen.cel.testtypes.yaml " ,
169+ template. get().asFile.absolutePath ,
144170 " buf.build/google/cel-spec:${project.findProperty(" cel.spec.version" )} " ,
145171 " --path" ,
146172 " cel/expr/conformance/proto3" ,
@@ -184,6 +210,9 @@ tasks.register<Exec>("exportProtovalidateModule") {
184210 if (! semverRegex.matches(version)) {
185211 input = " https://github.com/bufbuild/protovalidate.git#subdir=proto/protovalidate,ref=$version "
186212 }
213+ inputs.files(buf)
214+ inputs.property(" protovalidateVersion" , version)
215+ outputs.dir(" src/main/resources/buf" )
187216 commandLine(
188217 buf.asPath,
189218 " export" ,
@@ -196,7 +225,12 @@ tasks.register<Exec>("exportProtovalidateModule") {
196225tasks.register<Exec >(" generateSources" ) {
197226 dependsOn(" exportProtovalidateModule" , " filterBufGenYaml" )
198227 description = " Generates sources for the bufbuild/protovalidate module sources to build/generated/sources/bufgen."
199- commandLine(buf.asPath, " generate" , " --template" , " ${layout.buildDirectory.get()} /buf-gen-templates/buf.gen.yaml" , " src/main/resources" )
228+ val template = layout.buildDirectory.file(" buf-gen-templates/buf.gen.yaml" )
229+ inputs.files(buf)
230+ inputs.file(template)
231+ inputs.dir(" src/main/resources/buf" )
232+ outputs.dir(layout.buildDirectory.dir(" generated/sources/bufgen" ))
233+ commandLine(buf.asPath, " generate" , " --template" , template.get().asFile.absolutePath, " src/main/resources" )
200234}
201235
202236tasks.register(" generate" ) {
@@ -205,9 +239,16 @@ tasks.register("generate") {
205239 " generateTestSources" ,
206240 " generateSources" ,
207241 " licenseHeader" ,
242+ " :conformance:generateConformance" ,
208243 )
209244}
210245
246+ // src/main/resources and build/generated/sources/bufgen are generate-task outputs; consumers need explicit ordering.
247+ tasks.named(" processResources" ) { dependsOn(" exportProtovalidateModule" ) }
248+ tasks.matching { it.name == " sourcesJar" }.configureEach {
249+ dependsOn(" exportProtovalidateModule" , " generateSources" )
250+ }
251+
211252tasks.withType<JavaCompile > {
212253 dependsOn(" generate" )
213254 if (JavaVersion .current().isJava9Compatible) {
@@ -251,15 +292,18 @@ sourceSets {
251292 }
252293 test {
253294 java {
254- srcDir(layout.buildDirectory.dir(" generated/test-sources/bufgen" ))
295+ srcDir(layout.buildDirectory.dir(" generated/test-sources/bufgen-imports" ))
296+ srcDir(layout.buildDirectory.dir(" generated/test-sources/bufgen-noimports" ))
297+ srcDir(layout.buildDirectory.dir(" generated/test-sources/bufgen-cel" ))
298+ srcDir(layout.buildDirectory.dir(" generated/test-sources/bufgen-cel-testtypes" ))
255299 }
256300 }
257301}
258302
259303apply (plugin = " com.diffplug.spotless" )
260304configure<SpotlessExtension > {
261305 java {
262- targetExclude(" build/generated/sources/bufgen/build/buf/validate/**/*.java" , " build/generated/test-sources/bufgen/**/*.java" )
306+ targetExclude(" build/generated/sources/bufgen/build/buf/validate/**/*.java" , " build/generated/test-sources/bufgen-* /**/*.java" )
263307 }
264308 kotlinGradle {
265309 ktlint()
@@ -319,8 +363,7 @@ mavenPublishing {
319363 // - `JavadocJar.Empty()` publish an empty jar
320364 // - `JavadocJar.Javadoc()` to publish standard javadocs
321365 javadocJar = JavadocJar .Javadoc (),
322- // whether to publish a sources jar
323- sourcesJar = true ,
366+ sourcesJar = SourcesJar .Sources (),
324367 ),
325368 )
326369 pom {
0 commit comments