Skip to content

Conversation

@meltsufin
Copy link
Member

This will be used for constructing the protoc command for generating Java GAPICs.

Based on https://github.com/googleapis/google-cloud-go/tree/main/internal/librariangen/protoc with the following important changes:

  • The Build function in protoc.go is updated to construct the protoc command with the correct arguments for Java GAPIC generation.
  • The tests in protoc_test.go are updated to reflect the changes in protoc.go.
  • The gapicImportPath is removed from the test configuration, as it is not relevant for Java.'
  • The testdata is included with modifications for Java.

This will be used for constructing the protoc command for generating Java GAPICs.

Based on https://github.com/googleapis/google-cloud-go/tree/main/internal/librariangen/protoc with the following important changes:
 * The `Build` function in `protoc.go` is updated to construct the `protoc` command with the correct arguments for Java GAPIC generation.
 * The tests in `protoc_test.go` are updated to reflect the changes in `protoc.go`.
 * The `gapicImportPath` is removed from the test configuration, as it is not relevant for Java.'
@product-auto-label product-auto-label bot added the size: l Pull request size is large. label Oct 11, 2025
@meltsufin meltsufin requested a review from suztomo October 11, 2025 03:21
suztomo
suztomo previously approved these changes Oct 13, 2025
@@ -0,0 +1,22 @@
{
Copy link
Member

Choose a reason for hiding this comment

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

Is this used?

Copy link
Member Author

Choose a reason for hiding this comment

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

Good catch. It will be used in the next PR. I'll remove it.

@codecov
Copy link

codecov bot commented Oct 13, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.02%. Comparing base (f32325e) to head (ec1e063).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3935      +/-   ##
==========================================
- Coverage   97.53%   94.02%   -3.51%     
==========================================
  Files           3        4       +1     
  Lines          81      134      +53     
==========================================
+ Hits           79      126      +47     
- Misses          2        6       +4     
- Partials        0        2       +2     
Flag Coverage Δ
librariangen 94.02% <ø> (-3.51%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.

suztomo
suztomo previously approved these changes Oct 13, 2025
@meltsufin
Copy link
Member Author

/gemini review

Copy link

@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 introduces a new protoc package for constructing protoc commands to generate Java GAPICs. The implementation is clean and well-tested. I've identified a couple of areas for improvement related to unused code, which will enhance clarity and maintainability. My suggestions involve removing unused function parameters and test struct fields, along with updating the corresponding call sites.

Copy link
Contributor

Choose a reason for hiding this comment

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

Is this rewriting part of generate_library.sh in go? If yes, there are some special cases need to be handled. cc: @JoeWang1127

Copy link
Member Author

Choose a reason for hiding this comment

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

This is just scaffolding for now. Yes, we'll be rewriting the needed logic in Go.

@meltsufin
Copy link
Member Author

/gemini review

Copy link

@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 introduces a new protoc package for constructing protoc commands, specifically for Java GAPIC generation. The changes include the core logic in protoc.go, comprehensive tests in protoc_test.go, and necessary test data. The code is well-structured and the approach of using a ConfigProvider interface is good for decoupling. I have a couple of suggestions to improve code clarity and maintainability.

Comment on lines +58 to +74
if config.HasGAPIC() {
if config.ServiceYAML() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("api-service-config=%s", filepath.Join(apiServiceDir, config.ServiceYAML())))
}
if config.GapicYAML() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("gapic-config=%s", filepath.Join(apiServiceDir, config.GapicYAML())))
}
if config.GRPCServiceConfig() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("grpc-service-config=%s", filepath.Join(apiServiceDir, config.GRPCServiceConfig())))
}
if config.Transport() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("transport=%s", config.Transport()))
}
if config.HasRESTNumericEnums() {
gapicOpts = append(gapicOpts, "rest-numeric-enums")
}
}

Choose a reason for hiding this comment

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

medium

This block has some repetition when constructing gapicOpts. You can refactor this to be more data-driven for the file-based options, which improves readability and makes it easier to add more options in the future.

Suggested change
if config.HasGAPIC() {
if config.ServiceYAML() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("api-service-config=%s", filepath.Join(apiServiceDir, config.ServiceYAML())))
}
if config.GapicYAML() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("gapic-config=%s", filepath.Join(apiServiceDir, config.GapicYAML())))
}
if config.GRPCServiceConfig() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("grpc-service-config=%s", filepath.Join(apiServiceDir, config.GRPCServiceConfig())))
}
if config.Transport() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("transport=%s", config.Transport()))
}
if config.HasRESTNumericEnums() {
gapicOpts = append(gapicOpts, "rest-numeric-enums")
}
}
if config.HasGAPIC() {
fileOpts := []struct{ key, val string }{
{"api-service-config", config.ServiceYAML()},
{"gapic-config", config.GapicYAML()},
{"grpc-service-config", config.GRPCServiceConfig()},
}
for _, opt := range fileOpts {
if opt.val != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("%s=%s", opt.key, filepath.Join(apiServiceDir, opt.val)))
}
}
if config.Transport() != "" {
gapicOpts = append(gapicOpts, fmt.Sprintf("transport=%s", config.Transport()))
}
if config.HasRESTNumericEnums() {
gapicOpts = append(gapicOpts, "rest-numeric-enums")
}
}

tests := []struct {
name string
apiPath string
reqID string

Choose a reason for hiding this comment

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

medium

The reqID field is unused in the test logic. Please remove it from the struct definition. The Go compiler will then flag the now-unused values in the test cases, which should also be removed.

@sonarqubecloud
Copy link

@sonarqubecloud
Copy link

Quality Gate Passed Quality Gate passed for 'java_showcase_integration_tests'

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code

See analysis details on SonarQube Cloud

@meltsufin meltsufin merged commit 598de06 into main Oct 13, 2025
48 of 49 checks passed
@meltsufin meltsufin deleted the librariangen-protoc branch October 13, 2025 17:37
lqiu96 pushed a commit that referenced this pull request Oct 16, 2025
🤖 I have created a release *beep* *boop*
---


<details><summary>2.63.0</summary>

##
[2.63.0](v2.62.3...v2.63.0)
(2025-10-16)


### Features

* **librariangen:** add bazel package
([#3940](#3940))
([feabef3](feabef3))
* **librariangen:** add execv package
([#3932](#3932))
([f6b0b47](f6b0b47))
* **librariangen:** add protoc package
([#3935](#3935))
([598de06](598de06))
* **librariangen:** add request package
([#3933](#3933))
([fe44aed](fe44aed))
* **librariangen:** scaffold Java language container for Librarian
([#3926](#3926))
([29d188d](29d188d))


### Dependencies

* Bump errorprone-annotations to v2.42.0
([8d6c1f9](8d6c1f9))
* Bump guava to v33.5.0
([8d6c1f9](8d6c1f9))
* Bump j2objc-annotations to v3.1
([8d6c1f9](8d6c1f9))
* update google auth library dependencies to v1.40.0
([#3945](#3945))
([1d74663](1d74663))
* Upgrade Google Http Java Client to v2.0.2
([#3946](#3946))
([7fb4f15](7fb4f15))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
meltsufin added a commit that referenced this pull request Oct 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size: l Pull request size is large.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants