feat(internal/container/java): enable multi-version API generation#2699
feat(internal/container/java): enable multi-version API generation#2699
Conversation
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.
|
/gemini review |
There was a problem hiding this comment.
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 Report❌ Patch coverage is
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. 🚀 New features to boost your workflow:
|
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 "librariangen" 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>
Updates
generatepackage to support the generation of client libraries with multiple API versions.Generatefunction now iterates through all API versions specified in thegenerate-request.jsonand processes each version independently.restructureOutputfunction has been updated to handle versioned output directories.invokeProtocfunction now processes a single API at a time, allowing for version-specific output configurations.extractVersionhelper function to parse the API version from the path.protoc.goto includecommon_resources.protoin the compilation.Tests:
TestRestructureOutputto be table-driven and added a new test case to verify multi-version generation.TestGenerateto correctly mockprotocoutput for multi-version scenarios.run-generate-library.shto use a multi-versionsecret-manager-generate-request.jsonfor testing.