Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
0b4bb2f
fix: manual preservation of Version.java files
diegomarquezp Apr 20, 2026
f80f0d4
Update sdk-platform-java/hermetic_build/library_generation/utils/util…
diegomarquezp Apr 20, 2026
c088c4f
Update sdk-platform-java/hermetic_build/library_generation/utils/util…
diegomarquezp Apr 20, 2026
242c5b0
Merge branch 'main' into fix/version-java-owlbot-yaml
diegomarquezp Apr 20, 2026
80215df
fix: finish merge
diegomarquezp Apr 20, 2026
759bb65
test: add units for new logic
diegomarquezp Apr 20, 2026
cdb27b0
Merge branch 'fix/version-java-owlbot-yaml' of https://github.com/goo…
diegomarquezp Apr 20, 2026
ab85289
Merge branch 'main' into fix/version-java-owlbot-yaml
diegomarquezp Apr 20, 2026
64962c0
chore: update golden
diegomarquezp Apr 20, 2026
0ace657
Merge branch 'fix/version-java-owlbot-yaml' of https://github.com/goo…
diegomarquezp Apr 20, 2026
b53b9fc
fix: prevent generation of Version.java in self-service libraries
diegomarquezp Apr 24, 2026
557f9a7
chore: add flag to bazel rule
diegomarquezp Apr 24, 2026
5312129
Merge remote-tracking branch 'origin/main' into fix/no-version-java-s…
diegomarquezp Apr 24, 2026
5bb4e9f
chore: remove unrelated files
diegomarquezp Apr 29, 2026
17b1d19
test: test gapic opts utility
diegomarquezp Apr 29, 2026
b71964b
fix: use canonical empty list method
diegomarquezp Apr 29, 2026
77a734c
fix: do not reference Version.java from StubSettings
diegomarquezp Apr 30, 2026
b57c4c5
chore: format
diegomarquezp Apr 30, 2026
78c8d18
fix: try local reference to gapic_generator_java
diegomarquezp May 1, 2026
6669480
Merge remote-tracking branch 'origin/main' into fix/no-version-java-s…
diegomarquezp May 1, 2026
b34404c
Revert "fix: try local reference to gapic_generator_java"
diegomarquezp May 1, 2026
dfc4639
test: keep some libraries with Version.java
diegomarquezp May 1, 2026
2c126f5
fix: try local reference to gapic_generator_java
diegomarquezp May 1, 2026
0e8f087
debug: log failure of generate_library.sh
diegomarquezp May 1, 2026
a6159a2
build: log errors on sdk-platform-java IT failures
diegomarquezp May 1, 2026
916f1d3
fix: remove newline that breaks generation
diegomarquezp May 1, 2026
4a2ac35
test: update integration goldens
diegomarquezp May 1, 2026
6cfddbb
debug: remove xtrace from generate_library.sh
diegomarquezp May 1, 2026
c2d5720
docs: add comment on rationale for new logic in utilities.py
diegomarquezp May 1, 2026
bfddaa0
chore: remove unintended file
diegomarquezp May 1, 2026
d5dce71
chore: format hermetic_build py files
diegomarquezp May 1, 2026
63c8794
feat: handle missing version in tracer classes
diegomarquezp May 1, 2026
690e7d7
chore: restore local workspace change
diegomarquezp May 4, 2026
2288971
test(ggj): use goldens only on one unit test case
diegomarquezp May 4, 2026
d276f5c
test(bazel): use only one case with Version.java in generator ITs
diegomarquezp May 4, 2026
68097f8
test: remove redundant flag
diegomarquezp May 4, 2026
512432c
Merge branch 'main' into fix/no-version-java-self-service
diegomarquezp May 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/sdk-platform-java-ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ jobs:
JOB_TYPE: install
- name: Integration Tests
run: |
bazelisk --batch test //sdk-platform-java/test/integration/...
bazelisk --batch test //sdk-platform-java/test/integration/... --test_output=errors
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that flag is a convenience to understand generation diffs when the generator ITs are failing

bazel-25:
needs: filter
Expand Down
8 changes: 8 additions & 0 deletions rules_java_gapic/java_gapic.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ def _java_gapic_srcjar(
# possible values are: "grpc", "rest", "grpc+rest"
transport,
rest_numeric_enums,
generate_version_java = False,
# Can be used to provide a java_library with a customized generator,
# like the one which dumps descriptor to a file for future debugging.
java_generator_name = "java_gapic",
Expand Down Expand Up @@ -217,6 +218,9 @@ def _java_gapic_srcjar(
if rest_numeric_enums:
opt_args.append("rest-numeric-enums")

if generate_version_java:
opt_args.append("generate-version-java")

# Produces the GAPIC metadata file if this flag is set. to any value.
# Protoc invocation: --java_gapic_opt=metadata
plugin_args = ["metadata"]
Expand Down Expand Up @@ -245,6 +249,7 @@ def java_gapic_library(
# possible values are: "grpc", "rest", "grpc+rest"
transport = None,
rest_numeric_enums = False,
generate_version_java = False,
**kwargs):
srcjar_name = name + "_srcjar"
raw_srcjar_name = srcjar_name + "_raw"
Expand All @@ -257,6 +262,7 @@ def java_gapic_library(
service_yaml = service_yaml,
transport = transport,
rest_numeric_enums = rest_numeric_enums,
generate_version_java = generate_version_java,
java_generator_name = "java_gapic",
**kwargs
)
Expand Down Expand Up @@ -399,6 +405,7 @@ def java_generator_request_dump(
service_yaml = None,
transport = None,
rest_numeric_enums = False,
generate_version_java = False,
**kwargs):
_java_gapic_srcjar(
name = name,
Expand All @@ -408,6 +415,7 @@ def java_generator_request_dump(
service_yaml = service_yaml,
transport = transport,
rest_numeric_enums = rest_numeric_enums,
generate_version_java = generate_version_java,
java_generator_name = "code_generator_request_dumper",
**kwargs
)
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -199,6 +200,9 @@ public static List<GapicClass> generateTestClasses(GapicContext context) {
}

public static List<GapicClass> generateVersionClasses(GapicContext context) {
if (!context.generateVersionJava()) {
return Collections.emptyList();
}
return context.services().stream()
.collect(Collectors.toMap(Service::pakkage, s -> s, (s1, s2) -> s1))
.values()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2133,22 +2133,24 @@ private MethodDefinition createGetLibraryMetadataMethod(GapicContext context, Se
.build();
}

libraryMetadataBuilderExpr =
MethodInvocationExpr.builder()
.setExprReferenceExpr(libraryMetadataBuilderExpr)
.setMethodName("setVersion")
.setArguments(
VariableExpr.builder()
.setStaticReferenceType(
TypeNode.withReference(
VaporReference.builder()
.setName("Version")
.setPakkage(String.format("%s.stub", service.pakkage()))
.build()))
.setVariable(
Variable.builder().setName("VERSION").setType(TypeNode.STRING).build())
.build())
.build();
if (context.generateVersionJava()) {
libraryMetadataBuilderExpr =
MethodInvocationExpr.builder()
.setExprReferenceExpr(libraryMetadataBuilderExpr)
.setMethodName("setVersion")
.setArguments(
VariableExpr.builder()
.setStaticReferenceType(
TypeNode.withReference(
VaporReference.builder()
.setName("Version")
.setPakkage(String.format("%s.stub", service.pakkage()))
.build()))
.setVariable(
Variable.builder().setName("VERSION").setType(TypeNode.STRING).build())
.build())
.build();
}

Expr returnExpr =
MethodInvocationExpr.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public abstract class GapicContext {

public abstract boolean restNumericEnumsEnabled();

public abstract boolean generateVersionJava();

public GapicMetadata gapicMetadata() {
return gapicMetadata;
}
Expand Down Expand Up @@ -105,7 +107,8 @@ public static Builder builder() {
return new AutoValue_GapicContext.Builder()
.setMixinServices(Collections.emptyList())
.setGapicMetadataEnabled(false)
.setRestNumericEnumsEnabled(false);
.setRestNumericEnumsEnabled(false)
.setGenerateVersionJava(false);
}

@AutoValue.Builder
Expand Down Expand Up @@ -134,6 +137,8 @@ public Builder setHelperResourceNames(Set<ResourceName> helperResourceNames) {

public abstract Builder setRestNumericEnumsEnabled(boolean restNumericEnumsEnabled);

public abstract Builder setGenerateVersionJava(boolean generateVersionJava);

public abstract Builder setTransport(Transport transport);

public abstract Builder setRepo(String repo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ public static GapicContext parse(CodeGeneratorRequest request) {

boolean willGenerateMetadata = PluginArgumentParser.hasMetadataFlag(request);
boolean willGenerateNumericEnum = PluginArgumentParser.hasNumericEnumFlag(request);
boolean willGenerateVersionJava = PluginArgumentParser.hasGenerateVersionJavaFlag(request);

Optional<String> serviceConfigPathOpt = PluginArgumentParser.parseJsonConfigPath(request);
Optional<GapicServiceConfig> serviceConfigOpt =
Expand Down Expand Up @@ -255,6 +256,7 @@ public static GapicContext parse(CodeGeneratorRequest request) {
.setServiceYamlProto(serviceYamlProtoOpt.orElse(null))
.setTransport(transport)
.setRestNumericEnumsEnabled(willGenerateNumericEnum)
.setGenerateVersionJava(willGenerateVersionJava)
.setRepo(repoOpt.orElse(null))
.setArtifact(artifactOpt.orElse(null))
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ public class PluginArgumentParser {
@VisibleForTesting static final String KEY_GAPIC_CONFIG = "gapic-config";
@VisibleForTesting static final String KEY_METADATA = "metadata";
@VisibleForTesting static final String KEY_NUMERIC_ENUM = "rest-numeric-enums";
@VisibleForTesting static final String KEY_GENERATE_VERSION_JAVA = "generate-version-java";
@VisibleForTesting static final String KEY_SERVICE_YAML_CONFIG = "api-service-config";

@VisibleForTesting static final String KEY_TRANSPORT = "transport";
@VisibleForTesting static final String KEY_REPO = "repo";
@VisibleForTesting static final String KEY_ARTIFACT = "artifact";
Expand Down Expand Up @@ -71,6 +73,10 @@ static boolean hasNumericEnumFlag(CodeGeneratorRequest request) {
return hasFlag(request.getParameter(), KEY_NUMERIC_ENUM);
}

static boolean hasGenerateVersionJavaFlag(CodeGeneratorRequest request) {
return hasFlag(request.getParameter(), KEY_GENERATE_VERSION_JAVA);
}

/** Expects a comma-separated list of file paths. */
@VisibleForTesting
static Optional<String> parseJsonConfigPath(String pluginProtocArgument) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,17 @@ void testEmptyGapicContext_doesNotThrow() {
assertTrue(Composer.composeServiceClasses(GapicContext.EMPTY).isEmpty());
}

@Test
void testGenerateVersionClasses_generateVersionJavaFalse_returnsEmptyList() {
GapicContext contextWithFlagFalse = context.toBuilder().setGenerateVersionJava(false).build();
assertTrue(Composer.generateVersionClasses(contextWithFlagFalse).isEmpty());
}

@Test
void testGapicContext_generateVersionJava_disabledByDefault() {
assertFalse(GapicContext.EMPTY.generateVersionJava());
}

@Test
void testComposePackageInfo_emptyGapicContext_returnsNull() {
assertNull(Composer.composePackageInfo(GapicContext.EMPTY));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ public class EchoWithVersionStubSettings extends StubSettings<EchoWithVersionStu

@Override
protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build();
return LibraryMetadata.newBuilder().build();
}

/** Builder for EchoWithVersionStubSettings. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ public class DeprecatedServiceStubSettings extends StubSettings<DeprecatedServic

@Override
protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build();
return LibraryMetadata.newBuilder().build();
}

/** Builder for DeprecatedServiceStubSettings. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ public class EchoServiceShouldGeneratePartialUsualStubSettings

@Override
protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build();
return LibraryMetadata.newBuilder().build();
}

/** Builder for EchoServiceShouldGeneratePartialUsualStubSettings. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,6 @@ public class EchoStubSettings extends StubSettings<EchoStubSettings> {
return LibraryMetadata.newBuilder()
.setArtifactName("com.google.cloud:gapic-showcase")
.setRepository("googleapis/google-cloud-java")
.setVersion(Version.VERSION)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ public class JobServiceStubSettings extends StubSettings<JobServiceStubSettings>

@Override
protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build();
return LibraryMetadata.newBuilder().build();
}

/** Builder for JobServiceStubSettings. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -514,7 +514,6 @@ public class LoggingServiceV2StubSettings extends StubSettings<LoggingServiceV2S
protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder()
.setArtifactName("com.google.cloud:google-cloud-logging")
.setVersion(Version.VERSION)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,7 @@ public class PublisherStubSettings extends StubSettings<PublisherStubSettings> {

@Override
protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build();
return LibraryMetadata.newBuilder().build();
}

/** Builder for PublisherStubSettings. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@ class ServiceStubSettingsClassComposerTest {
static Stream<Arguments> data() {
return Stream.of(
Arguments.of(
"EchoStubSettings.golden", GrpcRestTestProtoLoader.instance().parseShowcaseEcho()),
"EchoStubSettings.golden",
GrpcRestTestProtoLoader.instance().parseShowcaseEcho().toBuilder()
.setGenerateVersionJava(true)
.build()),
Arguments.of(
"WickedStubSettings.golden", GrpcRestTestProtoLoader.instance().parseShowcaseWicked()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,6 @@ public class WickedStubSettings extends StubSettings<WickedStubSettings> {
return LibraryMetadata.newBuilder()
.setArtifactName("com.google.cloud:gapic-showcase")
.setRepository("googleapis/google-cloud-java")
.setVersion(Version.VERSION)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ static Stream<Arguments> data() {
"ComplianceStubSettings.golden", RestTestProtoLoader.instance().parseCompliance()),
Arguments.of(
"HttpJsonApiVersionTestingStubSettings.golden",
RestTestProtoLoader.instance().parseApiVersionTesting()));
RestTestProtoLoader.instance().parseApiVersionTesting().toBuilder()
.setGenerateVersionJava(true)
.build()));
}

@ParameterizedTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ public class ComplianceStubSettings extends StubSettings<ComplianceStubSettings>

@Override
protected LibraryMetadata getLibraryMetadata() {
return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build();
return LibraryMetadata.newBuilder().build();
}

/** Builder for ComplianceStubSettings. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,10 @@ public ApiTracerFactory withContext(ApiTracerContext context) {
if (metadata == null || metadata.isEmpty() || Strings.isNullOrEmpty(metadata.artifactName())) {
return new BaseApiTracerFactory();
}
Tracer newTracer = openTelemetry.getTracer(metadata.artifactName(), metadata.version());
Tracer newTracer =
Strings.isNullOrEmpty(metadata.version())
? openTelemetry.getTracer(metadata.artifactName())
: openTelemetry.getTracer(metadata.artifactName(), metadata.version());
ApiTracerContext mergedContext = this.apiTracerContext.merge(context);
return new OpenTelemetryTracingFactory(openTelemetry, newTracer, mergedContext);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,4 +144,12 @@ void create_shouldReturnNull_whenArtifactNameIsEmpty() {
GoldenSignalsMetricsRecorder.create(OpenTelemetry.noop(), metadata);
assertThat(actual).isNull();
}

@Test
void create_shouldNotThrow_whenVersionIsNull() {
LibraryMetadata metadata = LibraryMetadata.newBuilder().setArtifactName(ARTIFACT_NAME).build();
GoldenSignalsMetricsRecorder actual =
GoldenSignalsMetricsRecorder.create(OpenTelemetry.noop(), metadata);
assertThat(actual).isNotNull();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ void setUp() {
span = mock(Span.class);
when(openTelemetry.getTracer(nullable(String.class), nullable(String.class)))
.thenReturn(tracer);
when(openTelemetry.getTracer(anyString())).thenReturn(tracer);
when(tracer.spanBuilder(anyString())).thenReturn(spanBuilder);
when(spanBuilder.setSpanKind(any())).thenReturn(spanBuilder);
when(spanBuilder.setAllAttributes(any(Attributes.class))).thenReturn(spanBuilder);
Expand Down Expand Up @@ -405,4 +406,17 @@ void testNeedsContext_returnsFalseWhenContextIsNotEmpty() {

assertThat(factoryWithContext.needsContext()).isFalse();
}

@Test
void testWithContext_nullVersion_createsFactorySuccessfully() {
LibraryMetadata metadata = mock(LibraryMetadata.class);
when(metadata.artifactName()).thenReturn("gax-java");
when(metadata.version()).thenReturn(null);
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();

OpenTelemetryTracingFactory factory =
new OpenTelemetryTracingFactory(openTelemetry, tracer, ApiTracerContext.empty());
ApiTracerFactory factoryWithContext = factory.withContext(context);
assertThat(factoryWithContext).isInstanceOf(OpenTelemetryTracingFactory.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ case $key in
rest_numeric_enums="$2"
shift
;;
--generate_version_java)
generate_version_java="$2"
shift
;;

--gapic_yaml)
gapic_yaml="$2"
shift
Expand Down Expand Up @@ -75,6 +80,11 @@ if [ -z "${proto_only}" ]; then
proto_only="false"
fi

if [ -z "${generate_version_java}" ]; then
generate_version_java="true"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The default value for generate_version_java is set to "true", which contradicts the pull request title. It should be set to "false" to ensure that Version.java files are not generated by default in the hermetic build process.

Suggested change
generate_version_java="true"
generate_version_java="false"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for our open source library generation, which does require Version.java generation

fi


if [ -z "${gapic_additional_protos}" ]; then
gapic_additional_protos="google/cloud/common_resources.proto"
fi
Expand Down Expand Up @@ -190,7 +200,7 @@ if [[ "${proto_only}" == "false" ]]; then
"$protoc_path"/protoc --experimental_allow_proto3_optional \
"--plugin=protoc-gen-java_gapic=${script_dir}/gapic-generator-java-wrapper" \
"--java_gapic_out=metadata:${temp_destination_path}/java_gapic_srcjar_raw.srcjar.zip" \
"--java_gapic_opt=$(get_gapic_opts "${transport}" "${rest_numeric_enums}" "${gapic_yaml}" "${service_config}" "${service_yaml}" "${repo}" "${artifact}")" \
"--java_gapic_opt=$(get_gapic_opts "${transport}" "${rest_numeric_enums}" "${gapic_yaml}" "${service_config}" "${service_yaml}" "${repo}" "${artifact}" "${generate_version_java}")" \
${proto_files} ${gapic_additional_protos}

unzip -o -q "${temp_destination_path}/java_gapic_srcjar_raw.srcjar.zip" -d "${temp_destination_path}"
Expand Down
Loading
Loading