From 4967776eaa61c491b8a13667cfa25b5cc84f522c Mon Sep 17 00:00:00 2001 From: "Philip K. Warren" Date: Mon, 2 Jun 2025 11:04:45 -0500 Subject: [PATCH 1/2] Filter buf.gen.yaml files based on protoc version Update the buf.gen.yaml files to filter based on the protoc version, removing a manual step required when updating to newer protoc versions. --- buf.gen.yaml | 2 +- build.gradle.kts | 35 +++++++++++++------ conformance/buf.gen.yaml | 2 +- conformance/build.gradle.kts | 13 +++++-- gradle/libs.versions.toml | 5 --- .../proto/buf.gen.cel.testtypes.yaml | 2 +- src/test/resources/proto/buf.gen.cel.yaml | 2 +- src/test/resources/proto/buf.gen.imports.yaml | 2 +- .../resources/proto/buf.gen.noimports.yaml | 2 +- 9 files changed, 42 insertions(+), 23 deletions(-) diff --git a/buf.gen.yaml b/buf.gen.yaml index 8853c3ab..3d3c5a49 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -1,5 +1,5 @@ version: v2 clean: true plugins: - - remote: buf.build/protocolbuffers/java:v31.1 + - remote: buf.build/protocolbuffers/java:$protocJavaPluginVersion out: build/generated/sources/bufgen diff --git a/build.gradle.kts b/build.gradle.kts index 894fd20e..36a71625 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -72,32 +72,46 @@ tasks.register("licenseHeader") { ) } +tasks.register("filterBufGenYaml") { + from(".") + include("buf.gen.yaml", "src/**/buf*gen*.yaml") + includeEmptyDirs = false + into(layout.buildDirectory.dir("buf-gen-templates")) + expand("protocJavaPluginVersion" to "v${libs.versions.protobuf.get().substringAfter('.')}") + filteringCharset = "UTF-8" +} + tasks.register("generateTestSourcesImports") { - dependsOn("exportProtovalidateModule") + dependsOn("exportProtovalidateModule", "filterBufGenYaml") description = "Generates code with buf generate --include-imports for unit tests." commandLine( buf.asPath, "generate", "--template", - "src/test/resources/proto/buf.gen.imports.yaml", + "${layout.buildDirectory.get()}/buf-gen-templates/src/test/resources/proto/buf.gen.imports.yaml", "--include-imports", ) } tasks.register("generateTestSourcesNoImports") { - dependsOn("exportProtovalidateModule") + dependsOn("exportProtovalidateModule", "filterBufGenYaml") description = "Generates code with buf generate --include-imports for unit tests." - commandLine(buf.asPath, "generate", "--template", "src/test/resources/proto/buf.gen.noimports.yaml") + commandLine( + buf.asPath, + "generate", + "--template", + "${layout.buildDirectory.get()}/buf-gen-templates/src/test/resources/proto/buf.gen.noimports.yaml", + ) } tasks.register("generateCelConformance") { - dependsOn("generateCelConformanceTestTypes") + dependsOn("generateCelConformanceTestTypes", "filterBufGenYaml") description = "Generates CEL conformance code with buf generate for unit tests." commandLine( buf.asPath, "generate", "--template", - "src/test/resources/proto/buf.gen.cel.yaml", + "${layout.buildDirectory.get()}/buf-gen-templates/src/test/resources/proto/buf.gen.cel.yaml", "buf.build/google/cel-spec:${project.findProperty("cel.spec.version")}", "--exclude-path", "cel/expr/conformance/proto2", @@ -112,13 +126,13 @@ tasks.register("generateCelConformance") { // specified in these proto files is "dev.cel.expr.conformance.proto3". So, to get around this, // we're generating these separately and specifying a java_package override of the package we need. tasks.register("generateCelConformanceTestTypes") { - dependsOn("exportProtovalidateModule") + dependsOn("exportProtovalidateModule", "filterBufGenYaml") description = "Generates CEL conformance test types with buf generate for unit tests using a Java package override." commandLine( buf.asPath, "generate", "--template", - "src/test/resources/proto/buf.gen.cel.testtypes.yaml", + "${layout.buildDirectory.get()}/buf-gen-templates/src/test/resources/proto/buf.gen.cel.testtypes.yaml", "buf.build/google/cel-spec:${project.findProperty("cel.spec.version")}", "--path", "cel/expr/conformance/proto3", @@ -166,9 +180,9 @@ tasks.register("exportProtovalidateModule") { } tasks.register("generateSources") { - dependsOn("exportProtovalidateModule") + dependsOn("exportProtovalidateModule", "filterBufGenYaml") description = "Generates sources for the bufbuild/protovalidate module sources to build/generated/sources/bufgen." - commandLine(buf.asPath, "generate", "--template", "buf.gen.yaml", "src/main/resources") + commandLine(buf.asPath, "generate", "--template", "${layout.buildDirectory.get()}/buf-gen-templates/buf.gen.yaml", "src/main/resources") } tasks.register("generate") { @@ -177,6 +191,7 @@ tasks.register("generate") { "generateTestSources", "generateSources", "licenseHeader", + "filterBufGenYaml", ) } diff --git a/conformance/buf.gen.yaml b/conformance/buf.gen.yaml index c5e3cf1f..aafad4c4 100644 --- a/conformance/buf.gen.yaml +++ b/conformance/buf.gen.yaml @@ -6,5 +6,5 @@ managed: - file_option: java_package_prefix value: build plugins: - - remote: buf.build/protocolbuffers/java:v31.1 + - remote: buf.build/protocolbuffers/java:$protocJavaPluginVersion out: build/generated/sources/bufgen diff --git a/conformance/build.gradle.kts b/conformance/build.gradle.kts index 64a3789b..7ee5cd51 100644 --- a/conformance/build.gradle.kts +++ b/conformance/build.gradle.kts @@ -53,14 +53,23 @@ tasks.register("conformance") { commandLine(*(listOf(conformanceCLIPath) + conformanceArgs + listOf(conformanceAppScript)).toTypedArray()) } +tasks.register("filterBufGenYaml") { + from(".") + include("buf.gen.yaml") + includeEmptyDirs = false + into(layout.buildDirectory.dir("buf-gen-templates")) + expand("protocJavaPluginVersion" to "v${libs.versions.protobuf.get().substringAfter('.')}") + filteringCharset = "UTF-8" +} + tasks.register("generateConformance") { - dependsOn("configureBuf") + dependsOn("configureBuf", "filterBufGenYaml") description = "Generates sources for the bufbuild/protovalidate-testing module to build/generated/sources/bufgen." commandLine( buf.asPath, "generate", "--template", - "buf.gen.yaml", + "${layout.buildDirectory.get()}/buf-gen-templates/buf.gen.yaml", "buf.build/bufbuild/protovalidate-testing:${project.findProperty("protovalidate.version")}", ) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1dd6f133..3d58bb4b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,11 +5,6 @@ cel = "0.5.3" error-prone = "2.38.0" junit = "5.13.0" maven-publish = "0.32.0" -# When updating, make sure to update versions in the following files to match and regenerate code with 'make generate'. -# - buf.gen.yaml -# - conformance/buf.gen.yaml -# - src/test/resources/proto/buf.gen.imports.yaml -# - src/test/resources/proto/buf.gen.noimports.yaml protobuf = "4.31.1" [libraries] diff --git a/src/test/resources/proto/buf.gen.cel.testtypes.yaml b/src/test/resources/proto/buf.gen.cel.testtypes.yaml index d282abf8..47ec585c 100644 --- a/src/test/resources/proto/buf.gen.cel.testtypes.yaml +++ b/src/test/resources/proto/buf.gen.cel.testtypes.yaml @@ -5,5 +5,5 @@ managed: - file_option: java_package value: cel.expr.conformance.proto3 plugins: - - remote: buf.build/protocolbuffers/java:v31.1 + - remote: buf.build/protocolbuffers/java:$protocJavaPluginVersion out: build/generated/test-sources/bufgen diff --git a/src/test/resources/proto/buf.gen.cel.yaml b/src/test/resources/proto/buf.gen.cel.yaml index 78dd8c14..175f6083 100644 --- a/src/test/resources/proto/buf.gen.cel.yaml +++ b/src/test/resources/proto/buf.gen.cel.yaml @@ -2,5 +2,5 @@ version: v2 managed: enabled: true plugins: - - remote: buf.build/protocolbuffers/java:v31.1 + - remote: buf.build/protocolbuffers/java:$protocJavaPluginVersion out: build/generated/test-sources/bufgen diff --git a/src/test/resources/proto/buf.gen.imports.yaml b/src/test/resources/proto/buf.gen.imports.yaml index e1e2d3c5..5ed4410f 100644 --- a/src/test/resources/proto/buf.gen.imports.yaml +++ b/src/test/resources/proto/buf.gen.imports.yaml @@ -5,7 +5,7 @@ managed: - file_option: java_package_prefix value: com.example.imports plugins: - - remote: buf.build/protocolbuffers/java:v31.1 + - remote: buf.build/protocolbuffers/java:$protocJavaPluginVersion out: build/generated/test-sources/bufgen inputs: - directory: src/test/resources/proto diff --git a/src/test/resources/proto/buf.gen.noimports.yaml b/src/test/resources/proto/buf.gen.noimports.yaml index 811aa47d..7eecf2ac 100644 --- a/src/test/resources/proto/buf.gen.noimports.yaml +++ b/src/test/resources/proto/buf.gen.noimports.yaml @@ -8,7 +8,7 @@ managed: - file_option: java_package_prefix value: com.example.noimports plugins: - - remote: buf.build/protocolbuffers/java:v31.1 + - remote: buf.build/protocolbuffers/java:$protocJavaPluginVersion out: build/generated/test-sources/bufgen inputs: - directory: src/main/resources From 54062e3662c83ffe9a1c33d9d3cfe9d4b73ed7a7 Mon Sep 17 00:00:00 2001 From: "Philip K. Warren" Date: Mon, 2 Jun 2025 11:12:16 -0500 Subject: [PATCH 2/2] Remove unneeded filter at top-level generate --- build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 36a71625..b1525593 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -191,7 +191,6 @@ tasks.register("generate") { "generateTestSources", "generateSources", "licenseHeader", - "filterBufGenYaml", ) }