Skip to content

feat(internal/container/java): enable multi-version API generation#2699

Merged
meltsufin merged 3 commits intomainfrom
java-multi-api
Oct 28, 2025
Merged

feat(internal/container/java): enable multi-version API generation#2699
meltsufin merged 3 commits intomainfrom
java-multi-api

Conversation

@meltsufin
Copy link
Copy Markdown
Member

Updates generate package to support the generation of client libraries with multiple API versions.

  • The Generate function now iterates through all API versions specified in the generate-request.json and processes each version independently.
  • The restructureOutput function has been updated to handle versioned output directories.
  • The invokeProtoc function now processes a single API at a time, allowing for version-specific output configurations.
  • Added extractVersion helper function to parse the API version from the path.
  • Updated protoc.go to include common_resources.proto in the compilation.

Tests:

  • Refactored TestRestructureOutput to be table-driven and added a new test case to verify multi-version generation.
  • Updated TestGenerate to correctly mock protoc output for multi-version scenarios.
  • Modified run-generate-library.sh to use a multi-version secret-manager-generate-request.json for testing.

Updates `generate` package to support the generation of client libraries with multiple API versions.

- The `Generate` function now iterates through all API versions specified in the `generate-request.json` and processes each version independently.
- The `restructureOutput` function has been updated to handle versioned output directories.
- The `invokeProtoc` function now processes a single API at a time, allowing for version-specific output configurations.
- Added `extractVersion` helper function to parse the API version from the path.
- Updated `protoc.go` to include `common_resources.proto` in the compilation.

Tests:
- Refactored `TestRestructureOutput` to be table-driven and added a new test case to verify multi-version generation.
- Updated `TestGenerate` to correctly mock `protoc` output for multi-version scenarios.
- Modified `run-generate-library.sh` to use a multi-version `secret-manager-generate-request.json` for testing.
@meltsufin
Copy link
Copy Markdown
Member Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the Java code generation process to support multiple API versions within a single library. The changes correctly iterate through APIs, create versioned output directories, and adjust file restructuring logic. The tests have also been updated to cover multi-version scenarios. My review includes a few suggestions for improvement: addressing a potential resource issue with deferred cleanup in a loop, simplifying an error message, and clarifying some confusing test data.

@codecov
Copy link
Copy Markdown

codecov bot commented Oct 28, 2025

Codecov Report

❌ Patch coverage is 66.66667% with 21 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.77%. Comparing base (50b95f2) to head (8793631).
⚠️ Report is 4 commits behind head on main.

Files with missing lines Patch % Lines
internal/container/java/generate/generator.go 66.12% 11 Missing and 10 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2699      +/-   ##
==========================================
- Coverage   86.85%   86.77%   -0.08%     
==========================================
  Files         118      118              
  Lines        9790     9877      +87     
==========================================
+ Hits         8503     8571      +68     
- Misses        911      921      +10     
- Partials      376      385       +9     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@meltsufin meltsufin marked this pull request as ready for review October 28, 2025 19:38
@meltsufin meltsufin requested a review from a team as a code owner October 28, 2025 19:38
@meltsufin meltsufin requested a review from suztomo October 28, 2025 19:39
@meltsufin meltsufin merged commit 86c5250 into main Oct 28, 2025
9 of 11 checks passed
@meltsufin meltsufin deleted the java-multi-api branch October 28, 2025 19:55
ldetmer added a commit that referenced this pull request Nov 6, 2025
PR created by the Librarian CLI to initialize a release. Merging this PR
will auto trigger a release.

Librarian Version: not available
Language Image:
us-central1-docker.pkg.dev/cloud-sdk-librarian-prod/images-prod/librarian-release-container:latest
<details><summary>librarian: 1.0.0</summary>

##
[1.0.0](v0.5.0...v1.0.0)
(2025-11-06)

### Features

* Remove `..._gax` dependency (#2713)
([01675b7](01675b72))

* add context to Librarian PRs (#2698)
([0523329](0523329a))

* add a package comment linter (#2712)
([1bd3e32](1bd3e32e))

* generate pom.xml files (#2682)
([50b95f2](50b95f20))

* add test-container test logic (#2656)
([514cf7e](514cf7e5))

* improve rust-publish logging (#2671)
([585ed50](585ed50b))

* write a timing log at the end of update-image (#2771)
([5fc9e3b](5fc9e3b6))

* migrate Java container from sdk-platform-java (#2670)
([69ac47f](69ac47fd))

* switch to original head after running update-image (#2696)
([7a3e404](7a3e404a))

* format bulk commit from other sources in release notes (#2665)
([7c52da2](7c52da2b))

* enable multi-version API generation (#2699)
([86c5250](86c52507))

* release stage to update pom.xml files (#2772)
([be56755](be567550))

* use proto presence info to generate null-safe code (#2726)
([e36fb81](e36fb81a))

* Base messages in google_cloud_protobuf (#2660)
([e607ea6](e607ea63))

### Bug Fixes

* retry Github 503 requests up to 3 times (#2650)
([09468fa](09468faf))

* Changed docs to ConfigurationException (#2697)
([0950c1e](0950c1e3))

* fix the reference to the old &#34;librariangen&#34; folder (#2677)
([09dc53f](09dc53fe))

* run godoclint via golangci-lint (#2751)
([264a6a0](264a6a0e))

* pass context as the first argument (#2769)
([298a3bd](298a3bd8))

* Move HTTP client creation to `_gax` (#2672)
([4968d63](4968d63d))

* deduplicate bulk commits (#2758)
([4dfae9a](4dfae9ae))

* Support additional api paths for an existing library (#2666)
([50046f5](50046f55))

* remove stray TODO (#2748)
([5072f0e](5072f0e0))

* omit status field when empty (#2654)
([572ae4f](572ae4f3))

* use T.Context in tests (#2768)
([7e7cd2d](7e7cd2dd))

* wrap error to provide more context for commitAndPush (#2767)
([a2a41a4](a2a41a4a))

* use t.Fatal in tests for proper failure handling (#2759)
([cdabb28](cdabb287))

* enforce removal before copying library files (#2765)
([d5ac6c8](d5ac6c87))

* change log level to debug (#2798)
([f042d0b](f042d0bd))

* change path to `doc.go` in docgen test (#2700)
([fd6bae4](fd6bae40))

### Documentation

* use consistent library id in flags and examples (#2770)
([87a1005](87a10056))

</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants