diff --git a/gapic-generator-java/src/main/java/com/google/api/generator/engine/ast/ClassDefinition.java b/gapic-generator-java/src/main/java/com/google/api/generator/engine/ast/ClassDefinition.java index 0456ace194..1e09e39f40 100644 --- a/gapic-generator-java/src/main/java/com/google/api/generator/engine/ast/ClassDefinition.java +++ b/gapic-generator-java/src/main/java/com/google/api/generator/engine/ast/ClassDefinition.java @@ -203,9 +203,6 @@ public ClassDefinition build() { expr instanceof AssignmentExpr, "Class expression statement must be assignment or variable declaration"); VariableExpr variableExpr = ((AssignmentExpr) expr).variableExpr(); - Preconditions.checkState( - !variableExpr.scope().equals(ScopeNode.LOCAL), - "Class variable in assignment statement cannot have a local scope"); } } } diff --git a/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/Composer.java b/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/Composer.java index da83ba8933..606176852b 100644 --- a/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/Composer.java +++ b/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/Composer.java @@ -69,6 +69,7 @@ public static List generateServiceClasses(GapicContext context) { clazzes.addAll(generateClientSettingsClasses(context)); clazzes.addAll(generateMockClasses(context, context.services())); clazzes.addAll(generateTestClasses(context)); + clazzes.addAll(generateVersionClasses(context)); return clazzes; } @@ -197,6 +198,15 @@ public static List generateTestClasses(GapicContext context) { return clazzes; } + public static List generateVersionClasses(GapicContext context) { + return context.services().stream() + .collect(Collectors.toMap(Service::pakkage, s -> s, (s1, s2) -> s1)) + .values() + .stream() + .map(service -> LibraryVersionClassComposer.instance().generate(context, service)) + .collect(Collectors.toList()); + } + @VisibleForTesting static List prepareExecutableSamples(List clazzes) { // Include license header, apiShortName, and apiVersion diff --git a/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/LibraryVersionClassComposer.java b/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/LibraryVersionClassComposer.java new file mode 100644 index 0000000000..a450526ac6 --- /dev/null +++ b/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/LibraryVersionClassComposer.java @@ -0,0 +1,95 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.gapic.composer; + +import com.google.api.generator.engine.ast.AnnotationNode; +import com.google.api.generator.engine.ast.AssignmentExpr; +import com.google.api.generator.engine.ast.ClassDefinition; +import com.google.api.generator.engine.ast.CommentStatement; +import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.ExprStatement; +import com.google.api.generator.engine.ast.LineComment; +import com.google.api.generator.engine.ast.ScopeNode; +import com.google.api.generator.engine.ast.StringObjectValue; +import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.engine.ast.ValueExpr; +import com.google.api.generator.engine.ast.Variable; +import com.google.api.generator.engine.ast.VariableExpr; +import com.google.api.generator.gapic.model.GapicClass; +import com.google.api.generator.gapic.model.GapicContext; +import com.google.api.generator.gapic.model.Service; +import java.util.Arrays; + +public class LibraryVersionClassComposer { + private static final LibraryVersionClassComposer INSTANCE = new LibraryVersionClassComposer(); + + private LibraryVersionClassComposer() {} + + public static LibraryVersionClassComposer instance() { + return INSTANCE; + } + + public GapicClass generate(GapicContext context, Service service) { + String packageName = service.pakkage() + ".stub"; + String className = "Version"; + + String artifact = context.artifact(); + String artifactId = artifact; + if (artifact != null && artifact.contains(":")) { + artifactId = artifact.split(":")[1]; + } + + VariableExpr versionVarExpr = + VariableExpr.withVariable( + Variable.builder().setType(TypeNode.STRING).setName("VERSION").build()); + AssignmentExpr versionAssignmentExpr = + AssignmentExpr.builder() + .setVariableExpr( + versionVarExpr.toBuilder() + .setIsDecl(true) + .setScope(ScopeNode.LOCAL) + .setIsStatic(true) + .setIsFinal(true) + .build()) + .setValueExpr(ValueExpr.withValue(StringObjectValue.withValue("0.0.0-SNAPSHOT"))) + .build(); + + ClassDefinition classDef = + ClassDefinition.builder() + .setPackageString(packageName) + .setAnnotations( + Arrays.asList( + AnnotationNode.builder() + .setType( + TypeNode.withReference( + ConcreteReference.withClazz(com.google.api.core.InternalApi.class))) + .setDescription("For internal use only") + .build())) + .setScope(ScopeNode.LOCAL) + .setIsFinal(true) + .setName(className) + .setStatements( + Arrays.asList( + CommentStatement.withComment( + LineComment.withComment( + String.format("{x-version-update-start:%s:current}", artifactId))), + ExprStatement.withExpr(versionAssignmentExpr), + CommentStatement.withComment( + LineComment.withComment("{x-version-update-end}")))) + .build(); + + return GapicClass.create(GapicClass.Kind.MAIN, classDef); + } +} diff --git a/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubSettingsClassComposer.java b/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubSettingsClassComposer.java index ef87b96d3f..698fd50a29 100644 --- a/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubSettingsClassComposer.java +++ b/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubSettingsClassComposer.java @@ -1063,7 +1063,7 @@ private List createClassMethods( SettingsCommentComposer.NEW_BUILDER_METHOD_COMMENT)); javaMethods.addAll(createBuilderHelperMethods(service, typeStore)); javaMethods.add(createClassConstructor(service, methodSettingsMemberVarExprs, typeStore)); - javaMethods.add(createGetLibraryMetadataMethod(context)); + javaMethods.add(createGetLibraryMetadataMethod(context, service)); return javaMethods; } @@ -2107,7 +2107,7 @@ private static MethodDefinition createNestedClassBuildMethod( .build(); } - private MethodDefinition createGetLibraryMetadataMethod(GapicContext context) { + private MethodDefinition createGetLibraryMetadataMethod(GapicContext context, Service service) { TypeNode returnType = FIXED_TYPESTORE.get("LibraryMetadata"); MethodInvocationExpr libraryMetadataBuilderExpr = MethodInvocationExpr.builder() @@ -2133,6 +2133,23 @@ private MethodDefinition createGetLibraryMetadataMethod(GapicContext context) { .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(); + Expr returnExpr = MethodInvocationExpr.builder() .setExprReferenceExpr(libraryMetadataBuilderExpr) diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/engine/ast/ClassDefinitionTest.java b/gapic-generator-java/src/test/java/com/google/api/generator/engine/ast/ClassDefinitionTest.java index 9511029d9a..964eefa3c8 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/engine/ast/ClassDefinitionTest.java +++ b/gapic-generator-java/src/test/java/com/google/api/generator/engine/ast/ClassDefinitionTest.java @@ -293,31 +293,6 @@ void invalidClassDefinition_extendsImplementsSameType() { }); } - @Test - void invalidClassDefinition_assignmentWithUnscopedVariableExprStatement() { - Variable variable = createVariable("x", TypeNode.INT); - VariableExpr variableExpr = - VariableExpr.builder().setVariable(variable).setIsDecl(true).build(); - - Variable anotherVariable = createVariable("y", TypeNode.INT); - Expr valueExpr = VariableExpr.builder().setVariable(anotherVariable).build(); - - AssignmentExpr assignmentExpr = - AssignmentExpr.builder().setVariableExpr(variableExpr).setValueExpr(valueExpr).build(); - - List statements = Arrays.asList(ExprStatement.withExpr(assignmentExpr)); - assertThrows( - IllegalStateException.class, - () -> { - ClassDefinition.builder() - .setPackageString("com.google.example.library.v1.stub") - .setName("LibraryServiceStub") - .setScope(ScopeNode.PUBLIC) - .setStatements(statements) - .build(); - }); - } - @Test void invalidClassDefinition_unscopedVariableExprStatement() { List statements = diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/LibraryVersionClassComposerTest.java b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/LibraryVersionClassComposerTest.java new file mode 100644 index 0000000000..75c82b44eb --- /dev/null +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/LibraryVersionClassComposerTest.java @@ -0,0 +1,34 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.gapic.composer; + +import com.google.api.generator.gapic.model.GapicClass; +import com.google.api.generator.gapic.model.GapicContext; +import com.google.api.generator.gapic.model.Service; +import com.google.api.generator.test.framework.Assert; +import com.google.api.generator.test.protoloader.GrpcTestProtoLoader; +import org.junit.Test; + +public class LibraryVersionClassComposerTest { + + @Test + public void generateVersionClasses() { + GapicContext context = GrpcTestProtoLoader.instance().parseShowcaseEcho(); + Service service = context.services().get(0); + GapicClass clazz = LibraryVersionClassComposer.instance().generate(context, service); + + Assert.assertGoldenClass(this.getClass(), clazz, "EchoVersion.golden"); + } +} diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoVersion.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoVersion.golden new file mode 100644 index 0000000000..b8b3199cba --- /dev/null +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoVersion.golden @@ -0,0 +1,11 @@ +package com.google.showcase.v1beta1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:gapic-showcase:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/ApiVersionTestingStubSettings.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/ApiVersionTestingStubSettings.golden index 86eb85a244..e6a8c4d47b 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/ApiVersionTestingStubSettings.golden +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/ApiVersionTestingStubSettings.golden @@ -170,7 +170,7 @@ public class EchoWithVersionStubSettings extends StubSettings { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/JobServiceStubSettings.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/JobServiceStubSettings.golden index 89ddd1d703..f064845177 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/JobServiceStubSettings.golden +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/JobServiceStubSettings.golden @@ -260,7 +260,7 @@ public class JobServiceStubSettings extends StubSettings @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for JobServiceStubSettings. */ diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/LoggingServiceV2StubSettings.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/LoggingServiceV2StubSettings.golden index e807465385..d90cf2f7c1 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/LoggingServiceV2StubSettings.golden +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/LoggingServiceV2StubSettings.golden @@ -512,7 +512,10 @@ public class LoggingServiceV2StubSettings extends StubSettings { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for PublisherStubSettings. */ diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoStubSettings.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoStubSettings.golden index c72a710298..86d7494823 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoStubSettings.golden +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoStubSettings.golden @@ -445,6 +445,7 @@ public class EchoStubSettings extends StubSettings { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/WickedStubSettings.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/WickedStubSettings.golden index 279e5e50f4..49780b5885 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/WickedStubSettings.golden +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/WickedStubSettings.golden @@ -192,6 +192,7 @@ public class WickedStubSettings extends StubSettings { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/ComplianceStubSettings.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/ComplianceStubSettings.golden index 1aa32cf67f..1633188ee0 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/ComplianceStubSettings.golden +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/ComplianceStubSettings.golden @@ -225,7 +225,7 @@ public class ComplianceStubSettings extends StubSettings @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for ComplianceStubSettings. */ diff --git a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonApiVersionTestingStubSettings.golden b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonApiVersionTestingStubSettings.golden index 8f5bfa77fd..924e9c5566 100644 --- a/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonApiVersionTestingStubSettings.golden +++ b/gapic-generator-java/src/test/java/com/google/api/generator/gapic/composer/rest/goldens/HttpJsonApiVersionTestingStubSettings.golden @@ -172,7 +172,7 @@ public class EchoWithVersionStubSettings extends StubSettingsExample: {@code "2.74.1"}. This maps to the {@code gcp.client.version} attribute. + * + * @return the version, or {@code null} if not set + */ @Nullable public abstract String version(); @@ -73,7 +80,7 @@ public static LibraryMetadata empty() { } public boolean isEmpty() { - return repository() == null && artifactName() == null; + return repository() == null && artifactName() == null && version() == null; } public static LibraryMetadata.Builder newBuilder() { @@ -86,7 +93,7 @@ public abstract static class Builder { public abstract Builder setArtifactName(@Nullable String artifactName); - public abstract Builder setVersion(@Nullable String version); + public abstract Builder setVersion(@Nullable String libraryVersion); public abstract LibraryMetadata build(); } diff --git a/gax-java/gax/src/main/java/com/google/api/gax/tracing/ApiTracerContext.java b/gax-java/gax/src/main/java/com/google/api/gax/tracing/ApiTracerContext.java index 60d560e319..4b239c05ac 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/tracing/ApiTracerContext.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/tracing/ApiTracerContext.java @@ -186,6 +186,9 @@ public Map getAttemptAttributes() { attributes.put( ObservabilityAttributes.ARTIFACT_ATTRIBUTE, libraryMetadata().artifactName()); } + if (!Strings.isNullOrEmpty(libraryMetadata().version())) { + attributes.put(ObservabilityAttributes.VERSION_ATTRIBUTE, libraryMetadata().version()); + } } if (transport() == Transport.GRPC && !Strings.isNullOrEmpty(fullMethodName())) { attributes.put(ObservabilityAttributes.GRPC_RPC_METHOD_ATTRIBUTE, fullMethodName()); diff --git a/gax-java/gax/src/main/java/com/google/api/gax/tracing/ObservabilityAttributes.java b/gax-java/gax/src/main/java/com/google/api/gax/tracing/ObservabilityAttributes.java index 6355dc0b9d..5ea52462ca 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/tracing/ObservabilityAttributes.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/tracing/ObservabilityAttributes.java @@ -53,6 +53,9 @@ public class ObservabilityAttributes { /** The artifact name of the client library (e.g., "google-cloud-vision"). */ public static final String ARTIFACT_ATTRIBUTE = "gcp.client.artifact"; + /** The version of the client library (e.g., "1.2.3"). */ + public static final String VERSION_ATTRIBUTE = "gcp.client.version"; + /** The full RPC method name, including package, service, and method. */ public static final String GRPC_RPC_METHOD_ATTRIBUTE = "rpc.method"; diff --git a/gax-java/gax/src/test/java/com/google/api/gax/tracing/ApiTracerContextTest.java b/gax-java/gax/src/test/java/com/google/api/gax/tracing/ApiTracerContextTest.java index a78063753f..10aff5e6dd 100644 --- a/gax-java/gax/src/test/java/com/google/api/gax/tracing/ApiTracerContextTest.java +++ b/gax-java/gax/src/test/java/com/google/api/gax/tracing/ApiTracerContextTest.java @@ -74,6 +74,16 @@ void testGetAttemptAttributes_artifact() { .containsEntry(ObservabilityAttributes.ARTIFACT_ATTRIBUTE, "test-artifact"); } + @Test + void testGetAttemptAttributes_version() { + LibraryMetadata libraryMetadata = LibraryMetadata.newBuilder().setVersion("1.2.3").build(); + ApiTracerContext context = + ApiTracerContext.newBuilder().setLibraryMetadata(libraryMetadata).build(); + Map attributes = context.getAttemptAttributes(); + + assertThat(attributes).containsEntry(ObservabilityAttributes.VERSION_ATTRIBUTE, "1.2.3"); + } + @Test void testGetAttemptAttributes_httpMethod() { ApiTracerContext context = @@ -165,7 +175,7 @@ void testGetAttemptAttributes_empty() { @Test void testGetAttemptAttributes_emptyStrings() { LibraryMetadata libraryMetadata = - LibraryMetadata.newBuilder().setRepository("").setArtifactName("").build(); + LibraryMetadata.newBuilder().setRepository("").setArtifactName("").setVersion("").build(); ApiTracerContext context = ApiTracerContext.newBuilder() .setLibraryMetadata(libraryMetadata) diff --git a/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 b/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 index 9ed63c4260..37096be0ee 100644 --- a/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 +++ b/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 @@ -21,6 +21,7 @@ deep-remove-regex: deep-preserve-regex: - "/{{ module_name }}/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java" +- "/{{ module_name }}/google-.*/src/main/java/com/google/cloud/.*/v.*/stub/Version.java" deep-copy-regex: - source: "/{{ proto_path }}/(v.*)/.*-java/proto-google-.*/src" diff --git a/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml b/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml index 225b4620bf..5aa364f72c 100644 --- a/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml +++ b/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml @@ -21,6 +21,7 @@ deep-remove-regex: deep-preserve-regex: - "/java-bare-metal-solution/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java" +- "/java-bare-metal-solution/google-.*/src/main/java/com/google/cloud/.*/v.*/stub/Version.java" deep-copy-regex: - source: "/google/cloud/baremetalsolution/(v.*)/.*-java/proto-google-.*/src" diff --git a/java-showcase/.OwlBot-hermetic.yaml b/java-showcase/.OwlBot-hermetic.yaml index 3f0224eefd..209ddb62d3 100644 --- a/java-showcase/.OwlBot-hermetic.yaml +++ b/java-showcase/.OwlBot-hermetic.yaml @@ -21,6 +21,7 @@ deep-remove-regex: deep-preserve-regex: - "/gapic-showcase/src/test" +- "/gapic-showcase/src/main/java/com/google/showcase/v1beta1/Version.java" deep-copy-regex: - source: "/schema/google/showcase/(v.*)/.*-java/proto-.*/src" diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/Version.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/Version.java new file mode 100644 index 0000000000..2e43dbff55 --- /dev/null +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.showcase.v1beta1; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +public final class Version { + // {x-version-update-start:gapic-showcase:current} + public static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/ComplianceStubSettings.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/ComplianceStubSettings.java index 4c1fc8b468..72c98e6400 100644 --- a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/ComplianceStubSettings.java +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/ComplianceStubSettings.java @@ -399,6 +399,7 @@ protected LibraryMetadata getLibraryMetadata() { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/EchoStubSettings.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/EchoStubSettings.java index 927f1b2698..ebd2807839 100644 --- a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/EchoStubSettings.java +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/EchoStubSettings.java @@ -588,6 +588,7 @@ protected LibraryMetadata getLibraryMetadata() { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/IdentityStubSettings.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/IdentityStubSettings.java index 69e2f917cb..e84b8628cb 100644 --- a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/IdentityStubSettings.java +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/IdentityStubSettings.java @@ -419,6 +419,7 @@ protected LibraryMetadata getLibraryMetadata() { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/MessagingStubSettings.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/MessagingStubSettings.java index cca83350cb..8da3288193 100644 --- a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/MessagingStubSettings.java +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/MessagingStubSettings.java @@ -594,6 +594,7 @@ protected LibraryMetadata getLibraryMetadata() { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/SequenceServiceStubSettings.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/SequenceServiceStubSettings.java index 8362011625..f2dbe6f1af 100644 --- a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/SequenceServiceStubSettings.java +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/SequenceServiceStubSettings.java @@ -390,6 +390,7 @@ protected LibraryMetadata getLibraryMetadata() { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/TestingStubSettings.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/TestingStubSettings.java index d97a9c18c0..55bde4b66e 100644 --- a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/TestingStubSettings.java +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/TestingStubSettings.java @@ -502,6 +502,7 @@ protected LibraryMetadata getLibraryMetadata() { return LibraryMetadata.newBuilder() .setArtifactName("com.google.cloud:gapic-showcase") .setRepository("googleapis/sdk-platform-java") + .setVersion(Version.VERSION) .build(); } diff --git a/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/Version.java b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/Version.java new file mode 100644 index 0000000000..4009043dd5 --- /dev/null +++ b/java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.showcase.v1beta1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:gapic-showcase:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracing.java b/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracing.java index d8ca71e848..e0f0295cc9 100644 --- a/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracing.java +++ b/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracing.java @@ -136,6 +136,13 @@ void testTracing_successfulEcho_grpc() throws Exception { .getAttributes() .get(AttributeKey.stringKey(ObservabilityAttributes.GRPC_RPC_METHOD_ATTRIBUTE))) .isEqualTo("google.showcase.v1beta1.Echo/Echo"); + // {x-version-update-start:gapic-showcase:current} + assertThat( + attemptSpan + .getAttributes() + .get(AttributeKey.stringKey(ObservabilityAttributes.VERSION_ATTRIBUTE))) + .isEqualTo("0.0.0-SNAPSHOT"); + // {x-version-update-end} } } diff --git a/release-please-config.json b/release-please-config.json index 113ec43bb5..db518b5db8 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -16,7 +16,8 @@ ".cloudbuild/library_generation/library_generation_airlock.Dockerfile", "hermetic_build/library_generation/owlbot/templates/java_library/.kokoro/presubmit/graalvm-native-a.cfg", "hermetic_build/library_generation/owlbot/templates/java_library/.kokoro/presubmit/graalvm-native-b.cfg", - "hermetic_build/library_generation/owlbot/templates/java_library/.kokoro/presubmit/graalvm-native-c.cfg" + "hermetic_build/library_generation/owlbot/templates/java_library/.kokoro/presubmit/graalvm-native-c.cfg", + "java-showcase/gapic-showcase/src/main/java/com/google/showcase/v1beta1/stub/Version.java" ] } diff --git a/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/ConnectionServiceStubSettings.java b/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/ConnectionServiceStubSettings.java index 184451d6db..b603e4ed4a 100644 --- a/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/ConnectionServiceStubSettings.java +++ b/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/ConnectionServiceStubSettings.java @@ -296,7 +296,7 @@ protected ConnectionServiceStubSettings(Builder settingsBuilder) throws IOExcept @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for ConnectionServiceStubSettings. */ diff --git a/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/TetherStubSettings.java b/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/TetherStubSettings.java index 227a68e91f..22d8803b31 100644 --- a/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/TetherStubSettings.java +++ b/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/TetherStubSettings.java @@ -195,7 +195,7 @@ protected TetherStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for TetherStubSettings. */ diff --git a/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/Version.java b/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/Version.java new file mode 100644 index 0000000000..4b240da5e8 --- /dev/null +++ b/test/integration/goldens/apigeeconnect/src/com/google/cloud/apigeeconnect/v1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.apigeeconnect.v1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/asset/src/com/google/cloud/asset/v1/stub/AssetServiceStubSettings.java b/test/integration/goldens/asset/src/com/google/cloud/asset/v1/stub/AssetServiceStubSettings.java index dddb8294c7..61865afb31 100644 --- a/test/integration/goldens/asset/src/com/google/cloud/asset/v1/stub/AssetServiceStubSettings.java +++ b/test/integration/goldens/asset/src/com/google/cloud/asset/v1/stub/AssetServiceStubSettings.java @@ -729,7 +729,7 @@ protected AssetServiceStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for AssetServiceStubSettings. */ diff --git a/test/integration/goldens/asset/src/com/google/cloud/asset/v1/stub/Version.java b/test/integration/goldens/asset/src/com/google/cloud/asset/v1/stub/Version.java new file mode 100644 index 0000000000..b62c82a4ce --- /dev/null +++ b/test/integration/goldens/asset/src/com/google/cloud/asset/v1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.asset.v1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/bigtable/src/com/google/cloud/bigtable/data/v2/stub/BigtableStubSettings.java b/test/integration/goldens/bigtable/src/com/google/cloud/bigtable/data/v2/stub/BigtableStubSettings.java index 23374ac780..93e179072d 100644 --- a/test/integration/goldens/bigtable/src/com/google/cloud/bigtable/data/v2/stub/BigtableStubSettings.java +++ b/test/integration/goldens/bigtable/src/com/google/cloud/bigtable/data/v2/stub/BigtableStubSettings.java @@ -261,7 +261,7 @@ protected BigtableStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for BigtableStubSettings. */ diff --git a/test/integration/goldens/bigtable/src/com/google/cloud/bigtable/data/v2/stub/Version.java b/test/integration/goldens/bigtable/src/com/google/cloud/bigtable/data/v2/stub/Version.java new file mode 100644 index 0000000000..b5dc9e1686 --- /dev/null +++ b/test/integration/goldens/bigtable/src/com/google/cloud/bigtable/data/v2/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.bigtable.data.v2.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/AddressesStubSettings.java b/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/AddressesStubSettings.java index 3ae9929a15..046706b2c8 100644 --- a/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/AddressesStubSettings.java +++ b/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/AddressesStubSettings.java @@ -404,7 +404,7 @@ protected AddressesStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for AddressesStubSettings. */ diff --git a/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/RegionOperationsStubSettings.java b/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/RegionOperationsStubSettings.java index b2d4479676..b3dbfe2957 100644 --- a/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/RegionOperationsStubSettings.java +++ b/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/RegionOperationsStubSettings.java @@ -206,7 +206,7 @@ protected RegionOperationsStubSettings(Builder settingsBuilder) throws IOExcepti @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for RegionOperationsStubSettings. */ diff --git a/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/Version.java b/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/Version.java new file mode 100644 index 0000000000..b3be881a77 --- /dev/null +++ b/test/integration/goldens/compute/src/com/google/cloud/compute/v1small/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.compute.v1small.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/credentials/src/com/google/cloud/iam/credentials/v1/stub/IamCredentialsStubSettings.java b/test/integration/goldens/credentials/src/com/google/cloud/iam/credentials/v1/stub/IamCredentialsStubSettings.java index 425b0e81fe..679064dd4c 100644 --- a/test/integration/goldens/credentials/src/com/google/cloud/iam/credentials/v1/stub/IamCredentialsStubSettings.java +++ b/test/integration/goldens/credentials/src/com/google/cloud/iam/credentials/v1/stub/IamCredentialsStubSettings.java @@ -259,7 +259,7 @@ protected IamCredentialsStubSettings(Builder settingsBuilder) throws IOException @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for IamCredentialsStubSettings. */ diff --git a/test/integration/goldens/credentials/src/com/google/cloud/iam/credentials/v1/stub/Version.java b/test/integration/goldens/credentials/src/com/google/cloud/iam/credentials/v1/stub/Version.java new file mode 100644 index 0000000000..f10f917913 --- /dev/null +++ b/test/integration/goldens/credentials/src/com/google/cloud/iam/credentials/v1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.iam.credentials.v1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/iam/src/com/google/iam/v1/stub/IAMPolicyStubSettings.java b/test/integration/goldens/iam/src/com/google/iam/v1/stub/IAMPolicyStubSettings.java index 23681831f5..673791070b 100644 --- a/test/integration/goldens/iam/src/com/google/iam/v1/stub/IAMPolicyStubSettings.java +++ b/test/integration/goldens/iam/src/com/google/iam/v1/stub/IAMPolicyStubSettings.java @@ -210,7 +210,7 @@ protected IAMPolicyStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for IAMPolicyStubSettings. */ diff --git a/test/integration/goldens/iam/src/com/google/iam/v1/stub/Version.java b/test/integration/goldens/iam/src/com/google/iam/v1/stub/Version.java new file mode 100644 index 0000000000..026380e791 --- /dev/null +++ b/test/integration/goldens/iam/src/com/google/iam/v1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.iam.v1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/kms/src/com/google/cloud/kms/v1/stub/KeyManagementServiceStubSettings.java b/test/integration/goldens/kms/src/com/google/cloud/kms/v1/stub/KeyManagementServiceStubSettings.java index 614f4a5b75..850140cc82 100644 --- a/test/integration/goldens/kms/src/com/google/cloud/kms/v1/stub/KeyManagementServiceStubSettings.java +++ b/test/integration/goldens/kms/src/com/google/cloud/kms/v1/stub/KeyManagementServiceStubSettings.java @@ -746,7 +746,7 @@ protected KeyManagementServiceStubSettings(Builder settingsBuilder) throws IOExc @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for KeyManagementServiceStubSettings. */ diff --git a/test/integration/goldens/kms/src/com/google/cloud/kms/v1/stub/Version.java b/test/integration/goldens/kms/src/com/google/cloud/kms/v1/stub/Version.java new file mode 100644 index 0000000000..0bca6dc5ab --- /dev/null +++ b/test/integration/goldens/kms/src/com/google/cloud/kms/v1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.kms.v1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/library/src/com/google/cloud/example/library/v1/stub/LibraryServiceStubSettings.java b/test/integration/goldens/library/src/com/google/cloud/example/library/v1/stub/LibraryServiceStubSettings.java index f4774ebdb5..23c398f5ad 100644 --- a/test/integration/goldens/library/src/com/google/cloud/example/library/v1/stub/LibraryServiceStubSettings.java +++ b/test/integration/goldens/library/src/com/google/cloud/example/library/v1/stub/LibraryServiceStubSettings.java @@ -428,7 +428,7 @@ protected LibraryServiceStubSettings(Builder settingsBuilder) throws IOException @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for LibraryServiceStubSettings. */ diff --git a/test/integration/goldens/library/src/com/google/cloud/example/library/v1/stub/Version.java b/test/integration/goldens/library/src/com/google/cloud/example/library/v1/stub/Version.java new file mode 100644 index 0000000000..4e7c1a4d04 --- /dev/null +++ b/test/integration/goldens/library/src/com/google/cloud/example/library/v1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.example.library.v1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/ConfigServiceV2StubSettings.java b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/ConfigServiceV2StubSettings.java index 76d8a31316..d96599c8aa 100644 --- a/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/ConfigServiceV2StubSettings.java +++ b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/ConfigServiceV2StubSettings.java @@ -681,7 +681,7 @@ protected ConfigServiceV2StubSettings(Builder settingsBuilder) throws IOExceptio @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for ConfigServiceV2StubSettings. */ diff --git a/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/LoggingServiceV2StubSettings.java b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/LoggingServiceV2StubSettings.java index 38a71668b1..6010757c6a 100644 --- a/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/LoggingServiceV2StubSettings.java +++ b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/LoggingServiceV2StubSettings.java @@ -528,7 +528,7 @@ protected LoggingServiceV2StubSettings(Builder settingsBuilder) throws IOExcepti @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for LoggingServiceV2StubSettings. */ diff --git a/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/MetricsServiceV2StubSettings.java b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/MetricsServiceV2StubSettings.java index 12ab94379c..1625572efc 100644 --- a/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/MetricsServiceV2StubSettings.java +++ b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/MetricsServiceV2StubSettings.java @@ -298,7 +298,7 @@ protected MetricsServiceV2StubSettings(Builder settingsBuilder) throws IOExcepti @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for MetricsServiceV2StubSettings. */ diff --git a/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/Version.java b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/Version.java new file mode 100644 index 0000000000..2bf3969c4d --- /dev/null +++ b/test/integration/goldens/logging/src/com/google/cloud/logging/v2/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.logging.v2.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java index 13b7cf117d..067d40923a 100644 --- a/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java +++ b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java @@ -566,7 +566,7 @@ protected PublisherStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for PublisherStubSettings. */ diff --git a/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SchemaServiceStubSettings.java b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SchemaServiceStubSettings.java index 801f9f04ac..6feb16de0c 100644 --- a/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SchemaServiceStubSettings.java +++ b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SchemaServiceStubSettings.java @@ -429,7 +429,7 @@ protected SchemaServiceStubSettings(Builder settingsBuilder) throws IOException @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for SchemaServiceStubSettings. */ diff --git a/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SubscriberStubSettings.java b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SubscriberStubSettings.java index c6e2c9714c..4e1bcbc259 100644 --- a/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SubscriberStubSettings.java +++ b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/SubscriberStubSettings.java @@ -481,7 +481,7 @@ protected SubscriberStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for SubscriberStubSettings. */ diff --git a/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/Version.java b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/Version.java new file mode 100644 index 0000000000..518f8c55e4 --- /dev/null +++ b/test/integration/goldens/pubsub/src/com/google/cloud/pubsub/v1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.pubsub.v1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/redis/src/com/google/cloud/redis/v1beta1/stub/CloudRedisStubSettings.java b/test/integration/goldens/redis/src/com/google/cloud/redis/v1beta1/stub/CloudRedisStubSettings.java index 6551856c0f..086b575f4b 100644 --- a/test/integration/goldens/redis/src/com/google/cloud/redis/v1beta1/stub/CloudRedisStubSettings.java +++ b/test/integration/goldens/redis/src/com/google/cloud/redis/v1beta1/stub/CloudRedisStubSettings.java @@ -481,7 +481,7 @@ protected CloudRedisStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for CloudRedisStubSettings. */ diff --git a/test/integration/goldens/redis/src/com/google/cloud/redis/v1beta1/stub/Version.java b/test/integration/goldens/redis/src/com/google/cloud/redis/v1beta1/stub/Version.java new file mode 100644 index 0000000000..1f91550304 --- /dev/null +++ b/test/integration/goldens/redis/src/com/google/cloud/redis/v1beta1/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.redis.v1beta1.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +} diff --git a/test/integration/goldens/storage/src/com/google/storage/v2/stub/StorageStubSettings.java b/test/integration/goldens/storage/src/com/google/storage/v2/stub/StorageStubSettings.java index 1cb7525963..2ffbba4bc9 100644 --- a/test/integration/goldens/storage/src/com/google/storage/v2/stub/StorageStubSettings.java +++ b/test/integration/goldens/storage/src/com/google/storage/v2/stub/StorageStubSettings.java @@ -699,7 +699,7 @@ protected StorageStubSettings(Builder settingsBuilder) throws IOException { @Override protected LibraryMetadata getLibraryMetadata() { - return LibraryMetadata.newBuilder().build(); + return LibraryMetadata.newBuilder().setVersion(Version.VERSION).build(); } /** Builder for StorageStubSettings. */ diff --git a/test/integration/goldens/storage/src/com/google/storage/v2/stub/Version.java b/test/integration/goldens/storage/src/com/google/storage/v2/stub/Version.java new file mode 100644 index 0000000000..54f11445df --- /dev/null +++ b/test/integration/goldens/storage/src/com/google/storage/v2/stub/Version.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.storage.v2.stub; + +import com.google.api.core.InternalApi; + +@InternalApi("For internal use only") +final class Version { + // {x-version-update-start:null:current} + static final String VERSION = "0.0.0-SNAPSHOT"; + // {x-version-update-end} + +}