-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: generate poms with grpc dependencies as test scoped #3072
Changes from 5 commits
eb912d5
daf93fb
0c4be79
1fabb63
fdd9d27
c915614
18591bd
06e2f56
176fa8c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -92,7 +92,10 @@ def _is_cloud_client(existing_modules: List[module.Module]) -> bool: | |||||||||||||||||||||
|
||||||||||||||||||||||
|
||||||||||||||||||||||
def update_cloud_pom( | ||||||||||||||||||||||
filename: str, proto_modules: List[module.Module], grpc_modules: List[module.Module] | ||||||||||||||||||||||
filename: str, | ||||||||||||||||||||||
proto_modules: List[module.Module], | ||||||||||||||||||||||
grpc_modules: List[module.Module], | ||||||||||||||||||||||
repo_metadata: dict, | ||||||||||||||||||||||
): | ||||||||||||||||||||||
tree = etree.parse(filename) | ||||||||||||||||||||||
root = tree.getroot() | ||||||||||||||||||||||
|
@@ -104,6 +107,43 @@ def update_cloud_pom( | |||||||||||||||||||||
if m.find("{http://maven.apache.org/POM/4.0.0}artifactId") is not None | ||||||||||||||||||||||
] | ||||||||||||||||||||||
|
||||||||||||||||||||||
# as of July 2024, we have two dependencies that should be declared as | ||||||||||||||||||||||
# test-scoped: grpc-google-common-protos and grpc-google-iam-v1. Only in | ||||||||||||||||||||||
# java-storage, java-spanner and java-dataproc we keep them as they are | ||||||||||||||||||||||
TEST_SCOPED_DEPENDENCIES = ["grpc-google-common-protos", "grpc-google-iam-v1"] | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure I understand why we need this part. Is the template change not enough? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The template is rendered only on new libraries, otherwise the function sdk-platform-java/library_generation/owlbot/src/fix_poms.py Lines 532 to 541 in fdd9d27
|
||||||||||||||||||||||
print( | ||||||||||||||||||||||
'converting old dependencies "grpc-google-common-protos" and "grpc-google-iam-v1" to test-scoped' | ||||||||||||||||||||||
) | ||||||||||||||||||||||
for d in dependencies: | ||||||||||||||||||||||
if repo_metadata["repo_short"] in [ | ||||||||||||||||||||||
"java-spanner", | ||||||||||||||||||||||
"java-storage", | ||||||||||||||||||||||
"java-dataproc", | ||||||||||||||||||||||
]: | ||||||||||||||||||||||
print( | ||||||||||||||||||||||
f"skipping test-scoped-dependency fix for special case repo: {repo_metadata['repo_short']}" | ||||||||||||||||||||||
) | ||||||||||||||||||||||
continue | ||||||||||||||||||||||
artifact_query = "{http://maven.apache.org/POM/4.0.0}artifactId" | ||||||||||||||||||||||
scope_query = "{http://maven.apache.org/POM/4.0.0}scope" | ||||||||||||||||||||||
current_scope = d.find(scope_query) | ||||||||||||||||||||||
artifact_id_elem = d.find(artifact_query) | ||||||||||||||||||||||
if artifact_id_elem is None: | ||||||||||||||||||||||
continue | ||||||||||||||||||||||
artifact_id = artifact_id_elem.text | ||||||||||||||||||||||
is_test_scoped = ( | ||||||||||||||||||||||
current_scope.text == "test" if current_scope is not None else False | ||||||||||||||||||||||
) | ||||||||||||||||||||||
if artifact_id in TEST_SCOPED_DEPENDENCIES and not is_test_scoped: | ||||||||||||||||||||||
new_scope = etree.Element(scope_query) | ||||||||||||||||||||||
new_scope.text = "test" | ||||||||||||||||||||||
if current_scope is not None: | ||||||||||||||||||||||
d.replace(current_scope, new_scope) | ||||||||||||||||||||||
else: | ||||||||||||||||||||||
d.append(new_scope) | ||||||||||||||||||||||
new_scope.tail = "\n " | ||||||||||||||||||||||
new_scope.getprevious().tail = "\n " | ||||||||||||||||||||||
|
||||||||||||||||||||||
try: | ||||||||||||||||||||||
grpc_index = _find_dependency_index( | ||||||||||||||||||||||
dependencies, "com.google.api.grpc", "grpc-" | ||||||||||||||||||||||
|
@@ -492,7 +532,9 @@ def main(versions_file, monorepo): | |||||||||||||||||||||
if os.path.isfile(f"{artifact_id}/pom.xml"): | ||||||||||||||||||||||
print("updating modules in cloud pom.xml") | ||||||||||||||||||||||
if artifact_id not in excluded_poms_list: | ||||||||||||||||||||||
update_cloud_pom(f"{artifact_id}/pom.xml", proto_modules, grpc_modules) | ||||||||||||||||||||||
update_cloud_pom( | ||||||||||||||||||||||
f"{artifact_id}/pom.xml", proto_modules, grpc_modules, repo_metadata | ||||||||||||||||||||||
) | ||||||||||||||||||||||
elif artifact_id not in excluded_poms_list: | ||||||||||||||||||||||
print("creating missing cloud pom.xml") | ||||||||||||||||||||||
templates.render( | ||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,10 +39,12 @@ | |
<groupId>com.google.protobuf</groupId> | ||
<artifactId>protobuf-java</artifactId> | ||
</dependency> | ||
{%- if repo in ['java-storage', 'java-spanner', 'java-dataproc'] %} | ||
<dependency> | ||
<groupId>com.google.api.grpc</groupId> | ||
<artifactId>proto-google-common-protos</artifactId> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think what was asked is There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. True, my bad! I corrected it. |
||
</dependency> | ||
{%- endif %} | ||
{% for module in proto_modules %} | ||
<dependency> | ||
<groupId>{{module.group_id}}</groupId> | ||
|
@@ -72,16 +74,30 @@ | |
<groupId>com.google.api.grpc</groupId> | ||
<artifactId>proto-google-iam-v1</artifactId> | ||
</dependency> | ||
{%- if repo in ['java-storage', 'java-spanner', 'java-dataproc'] %} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I know I said hardcoding is not too bad if there is only a few, but I noticed that we already have excluded_dependencies that is used in pom generation, how much effort would it be to introduce a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Each gRPC module (from
Edit: I misunderstood your point. I'll address it in the next comment of this thread. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Adding a I think the effort is small when it comes to The other part would be to have a mini-script to create a PR for all libraries in google-cloud-java except java-dataproc. I guess we can keep adding entries to Conclusion: small effort. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We decided to rely on the |
||
<dependency> | ||
<groupId>com.google.api.grpc</groupId> | ||
<artifactId>grpc-google-iam-v1</artifactId> | ||
</dependency> | ||
{%- endif %} | ||
<dependency> | ||
<groupId>org.threeten</groupId> | ||
<artifactId>threetenbp</artifactId> | ||
</dependency> | ||
|
||
<!-- Test dependencies --> | ||
{%- if repo not in ['java-storage', 'java-spanner','java-dataproc'] %} | ||
<dependency> | ||
<groupId>com.google.api.grpc</groupId> | ||
<artifactId>proto-google-common-protos</artifactId> | ||
<scope>test</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.google.api.grpc</groupId> | ||
<artifactId>grpc-google-iam-v1</artifactId> | ||
<scope>test</scope> | ||
</dependency> | ||
{%- endif %} | ||
<dependency> | ||
<groupId>junit</groupId> | ||
<artifactId>junit</artifactId> | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This golden file tests the changes in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @blakeli0 yes, this is the unit test that deals with this golden:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you please remind me when
fix_poms.py
is called? IIRC, both on new client library generation and as part of the post-processing?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it's part of running our owlbot postprocessor
sdk-platform-java/library_generation/owlbot/bin/entrypoint.sh
Lines 61 to 64 in 6913db5