-
Notifications
You must be signed in to change notification settings - Fork 53
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
feat: parse BUILD.bzel
to determine whether a commit that only changed BUILD.bazel
is a qualified commit
#2937
Conversation
BUILD.bzel
to find qualified commitBUILD.bzel
to determine whether a commit that only changed BUILD.bzel
is a qualified commit
BUILD.bzel
to determine whether a commit that only changed BUILD.bzel
is a qualified commitBUILD.bzel
to determine whether a commit that only changed BUILD.bazel
is a qualified commit
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.
Thank you. Just a few small nits.
@@ -156,3 +170,30 @@ def __create_qualified_commit( | |||
if len(libraries) == 0: | |||
return None | |||
return QualifiedCommit(commit=commit, libraries=libraries) | |||
|
|||
@staticmethod | |||
def __qualified_build_change(commit: Commit, build_file_path: str) -> bool: |
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.
readability nit: __is_qualified_build_change
may help to quickly understand the check in line 159.
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.
Done.
def __qualified_build_change(commit: Commit, build_file_path: str) -> bool: | ||
""" | ||
Checks if the given commit containing a BUILD.bazel change is a | ||
qualified commit. |
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 add another sentence explaining that the function parses the gapic_inputs
from both versions to tell if there is a relevant change?
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.
Done.
versioned_proto_path = find_versioned_proto_path(file) | ||
if versioned_proto_path in proto_paths: | ||
# determine a commit that only contains `BUILD.bazel` |
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.
I think the if
statement this comment refers to will skip the commit if the only affected file in the commit is the BUILD file and doesn't contain relevant changes. Can you please explain that in the comment?
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.
Done.
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.
Is there going to be another PR to actually creates the PR description or it should be already taken care of by existing logics?
# generation, e.g., transport, rest_numeric_enum. | ||
if ( | ||
file.endswith("BUILD.bazel") | ||
and file_change_num == 1 |
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.
What if a commit contains changes to multiple BUILD.bazel
files? It is a common use case for multi-module library.
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.
Good catch, I need to make some changes when a commit contains multiple BUILD.bazel
.
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.
Done.
I changed the logic to qualify commits that adding BUILD.bazel
because it's unlikely that a commit added a BUILD.bazel
without proto change.
Commits that changed BUILD.bazel
will be determined by parsing BUILD.bazel
.
""" | ||
versioned_proto_path = find_versioned_proto_path(build_file_path) | ||
build = str((commit.tree / build_file_path).data_stream.read()) | ||
parent_commit = commit.parents[0] |
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.
I know we are getting it from commit.parents
, but conceptually I guess this is the last/previous commit?
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.
Maybe.
However, there might be multiple commits changed a BUILD.bazel
between baseline and current commit.
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.
there might be multiple commits changed a BUILD.bazel between baseline and current commit
Can you elaborate on this with an example?
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 elaborate on this with an example?
I don't have a concrete example but now I understand your original question.
Yes, the parent commit contains the last commit touching this file.
The existing logic should take care of creating pr description as long as the commit is marked as a qualified commit. |
@@ -208,6 +208,29 @@ def test_get_qualified_commits_success(self): | |||
qualified_commits[2].commit.hexsha, | |||
) | |||
|
|||
def test_get_qualified_commits_build_only_commit_returns_a_commit(self): |
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.
It's not clear to me that what this test is testing just based on the name, I guess this is for the basic scenario that a commit contains rest_numeric_enums
changes in BUILD.bazel?
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.
I changed the test name to test_get_qualified_commits_rest_numeric_enum_change_returns_a_qualified_commit
. WDYT?
self.assertTrue(len(config_change.get_qualified_commits()) == 0) | ||
|
||
def test_get_qualified_commits_new_client_commit_returns_a_commit(self): |
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.
Same question here, the test name is not clear. Also since we are using real commits for the tests, it makes the problem worse that it's not easy for developers to see the test data, but that's a different problem to solve.
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.
I changed the test name to test_get_qualified_commits_add_build_file_returns_a_qualified_commit
. WDYT?
versioned_proto_path = find_versioned_proto_path(file) | ||
if versioned_proto_path in proto_paths: | ||
if ( | ||
file.endswith("BUILD.bazel") |
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.
Why do we use endswith
instead of ==
? Any special cases we need to handle?
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.
The file is a relative path starting from google
, e.g., google/cloud/aiplatform/v1/BUILD.bazel
.
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.
Makes sense. A nit improvement, rename file
to file_path
, I thought it is a file_name
that is only BUILD.bazel
.
""" | ||
versioned_proto_path = find_versioned_proto_path(build_file_path) | ||
build = str((commit.tree / build_file_path).data_stream.read()) | ||
parent_commit = commit.parents[0] |
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.
there might be multiple commits changed a BUILD.bazel between baseline and current commit
Can you elaborate on this with an example?
versioned_proto_path = find_versioned_proto_path(file) | ||
if versioned_proto_path in proto_paths: | ||
if ( | ||
file.endswith("BUILD.bazel") |
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.
Makes sense. A nit improvement, rename file
to file_path
, I thought it is a file_name
that is only BUILD.bazel
.
Quality Gate passed for 'gapic-generator-java-root'Issues Measures |
Quality Gate passed for 'java_showcase_integration_tests'Issues Measures |
🤖 I have created a release *beep* *boop* --- <details><summary>2.43.0</summary> ## [2.43.0](v2.42.0...v2.43.0) (2024-07-25) ### Features * add `transport` option to `generation_config.yaml` ([#3052](#3052)) ([3b1a915](3b1a915)) * get released version from versions.txt to render `README.md` ([#3007](#3007)) ([99bb2b3](99bb2b3)) * Introduce java.time to Gax-Java ([#1872](#1872)) ([308aeaf](308aeaf)) * Mark `getDefaultEndpoint()` with @ObsoleteApi ([#2347](#2347)) ([e46648f](e46648f)) * parse `BUILD.bzel` to determine whether a commit that only changed `BUILD.bazel` is a qualified commit ([#2937](#2937)) ([502f801](502f801)) ### Bug Fixes * Fix: ([d996c2d](d996c2d)) * `BaseApiTracer` to noop on attemptFailed via overloaded method call ([#3016](#3016)) ([2fc938a](2fc938a)) * Generator to skip generation for empty services. ([#3051](#3051)) ([ff2c485](ff2c485)) * restore hermetic build image publication ([#2952](#2952)) ([97a6d67](97a6d67)) ### Dependencies * update dependency com.fasterxml.jackson:jackson-bom to v2.17.2 ([#3028](#3028)) ([d16f9d1](d16f9d1)) * update dependency com.google.cloud.opentelemetry:detector-resources-support to v0.30.0 ([#2975](#2975)) ([b3ec93f](b3ec93f)) * update dependency com.google.cloud.opentelemetry:detector-resources-support to v0.31.0 ([#3044](#3044)) ([6bd07dc](6bd07dc)) * update dependency com.google.errorprone:error_prone_annotations to v2.29.2 ([#3058](#3058)) ([8ea0868](8ea0868)) * update dependency com.google.errorprone:error_prone_annotations to v2.29.2 ([#3059](#3059)) ([81b23dc](81b23dc)) * update dependency com.google.guava:guava to v33.2.1-jre ([#3027](#3027)) ([12ee456](12ee456)) * update dependency commons-codec:commons-codec to v1.17.1 ([#3049](#3049)) ([58d94b7](58d94b7)) * update dependency dev.cel:cel to v0.6.0 ([#3050](#3050)) ([bc332d9](bc332d9)) * update dependency net.bytebuddy:byte-buddy to v1.14.18 ([#3029](#3029)) ([8799cf6](8799cf6)) * update dependency org.apache.commons:commons-lang3 to v3.15.0 ([#3060](#3060)) ([2538334](2538334)) * update dependency org.checkerframework:checker-qual to v3.45.0 ([#2988](#2988)) ([4edd216](4edd216)) * update google api dependencies ([#2951](#2951)) ([c16f6c9](c16f6c9)) * update google auth library dependencies to v1.24.0 ([#3039](#3039)) ([98b5bd7](98b5bd7)) * update googleapis/java-cloud-bom digest to 47c5dbc ([#2974](#2974)) ([57623f0](57623f0)) * update grpc dependencies to v1.65.1 ([#3061](#3061)) ([27497e2](27497e2)) * update junit5 monorepo to v5.10.3 ([#2963](#2963)) ([bc55fe1](bc55fe1)) * update netty dependencies to v4.1.112.final ([#3057](#3057)) ([5af127b](5af127b)) * update opentelemetry-java monorepo to v1.40.0 ([#3035](#3035)) ([5c31c42](5c31c42)) * Use Gapic-Showcase v0.35.1 ([#3018](#3018)) ([43773f0](43773f0)) ### Documentation * add support option to 'new issue' choices ([#3055](#3055)) ([6a2a17d](6a2a17d)) </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>
In this PR:
BUILD.bzel
, parse theBUILD.bazel
to determine whether this is a qualified commit. The commit is a qualified commit if the twoGapic_Inputs
objects parsed from the commit and its parent are different.