From 8f6af81b6e1ff6baa1f5230dcdf28a325912b086 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 25 May 2023 16:14:20 +0000 Subject: [PATCH 1/7] build(deps): bump requests to 2.31.0 [autoapprove] (#405) Source-Link: https://togithub.com/googleapis/synthtool/commit/30bd01b4ab78bf1b2a425816e15b3e7e090993dd Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:9bc5fa3b62b091f60614c08a7fb4fd1d3e1678e326f34dd66ce1eefb5dc3267b --- .github/.OwlBot.lock.yaml | 3 ++- .kokoro/requirements.txt | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index b8edda51..32b3c486 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,4 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:2e247c7bf5154df7f98cce087a20ca7605e236340c7d6d1a14447e5c06791bd6 + digest: sha256:9bc5fa3b62b091f60614c08a7fb4fd1d3e1678e326f34dd66ce1eefb5dc3267b +# created: 2023-05-25T14:56:16.294623272Z diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt index 66a2172a..3b8d7ee8 100644 --- a/.kokoro/requirements.txt +++ b/.kokoro/requirements.txt @@ -419,9 +419,9 @@ readme-renderer==37.3 \ --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 # via twine -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via # gcp-releasetool # google-api-core From 5ce2b5a684c73e0189405abe262a0252d2dc8551 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 3 Jun 2023 21:54:18 +0000 Subject: [PATCH 2/7] build(deps): bump cryptography to 41.0.0 [autoapprove] (#407) Source-Link: https://togithub.com/googleapis/synthtool/commit/d0f51a0c2a9a6bcca86911eabea9e484baadf64b Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:240b5bcc2bafd450912d2da2be15e62bc6de2cf839823ae4bf94d4f392b451dc --- .github/.OwlBot.lock.yaml | 4 ++-- .kokoro/requirements.txt | 42 +++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 32b3c486..02a4dedc 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:9bc5fa3b62b091f60614c08a7fb4fd1d3e1678e326f34dd66ce1eefb5dc3267b -# created: 2023-05-25T14:56:16.294623272Z + digest: sha256:240b5bcc2bafd450912d2da2be15e62bc6de2cf839823ae4bf94d4f392b451dc +# created: 2023-06-03T21:25:37.968717478Z diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt index 3b8d7ee8..c7929db6 100644 --- a/.kokoro/requirements.txt +++ b/.kokoro/requirements.txt @@ -113,28 +113,26 @@ commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 # via rich -cryptography==39.0.1 \ - --hash=sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4 \ - --hash=sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f \ - --hash=sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502 \ - --hash=sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41 \ - --hash=sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965 \ - --hash=sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e \ - --hash=sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc \ - --hash=sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad \ - --hash=sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505 \ - --hash=sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388 \ - --hash=sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6 \ - --hash=sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2 \ - --hash=sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac \ - --hash=sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695 \ - --hash=sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6 \ - --hash=sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336 \ - --hash=sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0 \ - --hash=sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c \ - --hash=sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106 \ - --hash=sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a \ - --hash=sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8 +cryptography==41.0.0 \ + --hash=sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55 \ + --hash=sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895 \ + --hash=sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be \ + --hash=sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928 \ + --hash=sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d \ + --hash=sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8 \ + --hash=sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237 \ + --hash=sha256:5c1f7293c31ebc72163a9a0df246f890d65f66b4a40d9ec80081969ba8c78cc9 \ + --hash=sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78 \ + --hash=sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d \ + --hash=sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0 \ + --hash=sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46 \ + --hash=sha256:88ff107f211ea696455ea8d911389f6d2b276aabf3231bf72c8853d22db755c5 \ + --hash=sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4 \ + --hash=sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d \ + --hash=sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75 \ + --hash=sha256:b846d59a8d5a9ba87e2c3d757ca019fa576793e8758174d3868aecb88d6fc8eb \ + --hash=sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2 \ + --hash=sha256:f5d0bf9b252f30a31664b6f64432b4730bb7038339bd18b1fafe129cfc2be9be # via # gcp-releasetool # secretstorage From 529839b702f63bd8d42bc0e4974f90486a2dd7e1 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 27 Jun 2023 13:14:31 +0000 Subject: [PATCH 3/7] chore: remove pinned Sphinx version [autoapprove] (#408) Source-Link: https://togithub.com/googleapis/synthtool/commit/909573ce9da2819eeb835909c795d29aea5c724e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:ddf4551385d566771dc713090feb7b4c1164fb8a698fe52bbe7670b24236565b --- .github/.OwlBot.lock.yaml | 4 ++-- noxfile.py | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 02a4dedc..1b3cb6c5 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:240b5bcc2bafd450912d2da2be15e62bc6de2cf839823ae4bf94d4f392b451dc -# created: 2023-06-03T21:25:37.968717478Z + digest: sha256:ddf4551385d566771dc713090feb7b4c1164fb8a698fe52bbe7670b24236565b +# created: 2023-06-27T13:04:21.96690344Z diff --git a/noxfile.py b/noxfile.py index e9649dc6..1fa00483 100644 --- a/noxfile.py +++ b/noxfile.py @@ -304,10 +304,9 @@ def docfx(session): session.install("-e", ".") session.install( - "sphinx==4.0.1", + "gcp-sphinx-docfx-yaml", "alabaster", "recommonmark", - "gcp-sphinx-docfx-yaml", ) shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) From a7d5ed343c0d9924309398cc1769234d33d64449 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 28 Jun 2023 11:46:23 -0400 Subject: [PATCH 4/7] feat: add repositoryevent to buildtrigger (#409) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add repositoryevent to buildtrigger PiperOrigin-RevId: 543799743 Source-Link: https://github.com/googleapis/googleapis/commit/7972185b093d7548229f3206077cddf6a0b74b87 Source-Link: https://github.com/googleapis/googleapis-gen/commit/137bb0372575a66c3b1ae70a615c0679efb10b4c Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMTM3YmIwMzcyNTc1YTY2YzNiMWFlNzBhNjE1YzA2NzllZmIxMGI0YyJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- google/cloud/devtools/cloudbuild/__init__.py | 2 + .../cloud/devtools/cloudbuild_v1/__init__.py | 2 + .../services/cloud_build/async_client.py | 2 + .../services/cloud_build/client.py | 24 ++++ .../devtools/cloudbuild_v1/types/__init__.py | 2 + .../cloudbuild_v1/types/cloudbuild.py | 80 +++++++++++ ...etadata_google.devtools.cloudbuild.v1.json | 2 +- ...etadata_google.devtools.cloudbuild.v2.json | 2 +- .../gapic/cloudbuild_v1/test_cloud_build.py | 125 +++++++++++++----- 9 files changed, 203 insertions(+), 38 deletions(-) diff --git a/google/cloud/devtools/cloudbuild/__init__.py b/google/cloud/devtools/cloudbuild/__init__.py index febf0d2c..c7c68d8d 100644 --- a/google/cloud/devtools/cloudbuild/__init__.py +++ b/google/cloud/devtools/cloudbuild/__init__.py @@ -81,6 +81,7 @@ from google.cloud.devtools.cloudbuild_v1.types.cloudbuild import ( ReceiveTriggerWebhookResponse, ) +from google.cloud.devtools.cloudbuild_v1.types.cloudbuild import RepositoryEventConfig from google.cloud.devtools.cloudbuild_v1.types.cloudbuild import RepoSource from google.cloud.devtools.cloudbuild_v1.types.cloudbuild import Results from google.cloud.devtools.cloudbuild_v1.types.cloudbuild import RetryBuildRequest @@ -150,6 +151,7 @@ "PushFilter", "ReceiveTriggerWebhookRequest", "ReceiveTriggerWebhookResponse", + "RepositoryEventConfig", "RepoSource", "Results", "RetryBuildRequest", diff --git a/google/cloud/devtools/cloudbuild_v1/__init__.py b/google/cloud/devtools/cloudbuild_v1/__init__.py index e099eba1..c905749d 100644 --- a/google/cloud/devtools/cloudbuild_v1/__init__.py +++ b/google/cloud/devtools/cloudbuild_v1/__init__.py @@ -61,6 +61,7 @@ from .types.cloudbuild import PushFilter from .types.cloudbuild import ReceiveTriggerWebhookRequest from .types.cloudbuild import ReceiveTriggerWebhookResponse +from .types.cloudbuild import RepositoryEventConfig from .types.cloudbuild import RepoSource from .types.cloudbuild import Results from .types.cloudbuild import RetryBuildRequest @@ -127,6 +128,7 @@ "ReceiveTriggerWebhookRequest", "ReceiveTriggerWebhookResponse", "RepoSource", + "RepositoryEventConfig", "Results", "RetryBuildRequest", "RunBuildTriggerRequest", diff --git a/google/cloud/devtools/cloudbuild_v1/services/cloud_build/async_client.py b/google/cloud/devtools/cloudbuild_v1/services/cloud_build/async_client.py index a739cb2e..48035506 100644 --- a/google/cloud/devtools/cloudbuild_v1/services/cloud_build/async_client.py +++ b/google/cloud/devtools/cloudbuild_v1/services/cloud_build/async_client.py @@ -79,6 +79,8 @@ class CloudBuildAsyncClient: parse_crypto_key_path = staticmethod(CloudBuildClient.parse_crypto_key_path) network_path = staticmethod(CloudBuildClient.network_path) parse_network_path = staticmethod(CloudBuildClient.parse_network_path) + repository_path = staticmethod(CloudBuildClient.repository_path) + parse_repository_path = staticmethod(CloudBuildClient.parse_repository_path) secret_version_path = staticmethod(CloudBuildClient.secret_version_path) parse_secret_version_path = staticmethod(CloudBuildClient.parse_secret_version_path) service_account_path = staticmethod(CloudBuildClient.service_account_path) diff --git a/google/cloud/devtools/cloudbuild_v1/services/cloud_build/client.py b/google/cloud/devtools/cloudbuild_v1/services/cloud_build/client.py index 2bfdf68f..c05a99ca 100644 --- a/google/cloud/devtools/cloudbuild_v1/services/cloud_build/client.py +++ b/google/cloud/devtools/cloudbuild_v1/services/cloud_build/client.py @@ -265,6 +265,30 @@ def parse_network_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def repository_path( + project: str, + location: str, + connection: str, + repository: str, + ) -> str: + """Returns a fully-qualified repository string.""" + return "projects/{project}/locations/{location}/connections/{connection}/repositories/{repository}".format( + project=project, + location=location, + connection=connection, + repository=repository, + ) + + @staticmethod + def parse_repository_path(path: str) -> Dict[str, str]: + """Parses a repository path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/connections/(?P.+?)/repositories/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def secret_version_path( project: str, diff --git a/google/cloud/devtools/cloudbuild_v1/types/__init__.py b/google/cloud/devtools/cloudbuild_v1/types/__init__.py index 4bc377c0..35b02f9c 100644 --- a/google/cloud/devtools/cloudbuild_v1/types/__init__.py +++ b/google/cloud/devtools/cloudbuild_v1/types/__init__.py @@ -54,6 +54,7 @@ PushFilter, ReceiveTriggerWebhookRequest, ReceiveTriggerWebhookResponse, + RepositoryEventConfig, RepoSource, Results, RetryBuildRequest, @@ -118,6 +119,7 @@ "PushFilter", "ReceiveTriggerWebhookRequest", "ReceiveTriggerWebhookResponse", + "RepositoryEventConfig", "RepoSource", "Results", "RetryBuildRequest", diff --git a/google/cloud/devtools/cloudbuild_v1/types/cloudbuild.py b/google/cloud/devtools/cloudbuild_v1/types/cloudbuild.py index dba7de3b..52e87889 100644 --- a/google/cloud/devtools/cloudbuild_v1/types/cloudbuild.py +++ b/google/cloud/devtools/cloudbuild_v1/types/cloudbuild.py @@ -64,6 +64,7 @@ "ApprovalConfig", "ApprovalResult", "BuildTrigger", + "RepositoryEventConfig", "GitHubEventsConfig", "PubsubConfig", "WebhookConfig", @@ -2195,6 +2196,10 @@ class BuildTrigger(proto.Message): ([PROJECT_NUM]@system.gserviceaccount.com) will be used instead. Format: ``projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT_ID_OR_EMAIL}`` + repository_event_config (google.cloud.devtools.cloudbuild_v1.types.RepositoryEventConfig): + The configuration of a trigger that creates a + build whenever an event from Repo API is + received. """ resource_name: str = proto.Field( @@ -2283,6 +2288,81 @@ class BuildTrigger(proto.Message): proto.STRING, number=33, ) + repository_event_config: "RepositoryEventConfig" = proto.Field( + proto.MESSAGE, + number=39, + message="RepositoryEventConfig", + ) + + +class RepositoryEventConfig(proto.Message): + r"""The configuration of a trigger that creates a build whenever + an event from Repo API is received. + + This message has `oneof`_ fields (mutually exclusive fields). + For each oneof, at most one member field can be set at the same time. + Setting any member of the oneof automatically clears all other + members. + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + repository (str): + The resource name of the Repo API resource. + repository_type (google.cloud.devtools.cloudbuild_v1.types.RepositoryEventConfig.RepositoryType): + Output only. The type of the SCM vendor the + repository points to. + pull_request (google.cloud.devtools.cloudbuild_v1.types.PullRequestFilter): + Filter to match changes in pull requests. + + This field is a member of `oneof`_ ``filter``. + push (google.cloud.devtools.cloudbuild_v1.types.PushFilter): + Filter to match changes in refs like + branches, tags. + + This field is a member of `oneof`_ ``filter``. + """ + + class RepositoryType(proto.Enum): + r"""All possible SCM repo types from Repo API. + + Values: + REPOSITORY_TYPE_UNSPECIFIED (0): + If unspecified, RepositoryType defaults to + GITHUB. + GITHUB (1): + The SCM repo is GITHUB. + GITHUB_ENTERPRISE (2): + The SCM repo is GITHUB Enterprise. + GITLAB_ENTERPRISE (3): + The SCM repo is GITLAB Enterprise. + """ + REPOSITORY_TYPE_UNSPECIFIED = 0 + GITHUB = 1 + GITHUB_ENTERPRISE = 2 + GITLAB_ENTERPRISE = 3 + + repository: str = proto.Field( + proto.STRING, + number=1, + ) + repository_type: RepositoryType = proto.Field( + proto.ENUM, + number=2, + enum=RepositoryType, + ) + pull_request: "PullRequestFilter" = proto.Field( + proto.MESSAGE, + number=3, + oneof="filter", + message="PullRequestFilter", + ) + push: "PushFilter" = proto.Field( + proto.MESSAGE, + number=4, + oneof="filter", + message="PushFilter", + ) class GitHubEventsConfig(proto.Message): diff --git a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json index 71f6ed56..e379efab 100644 --- a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json +++ b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-build", - "version": "3.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json index 7f7f5fbc..28513727 100644 --- a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json +++ b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-build", - "version": "3.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/tests/unit/gapic/cloudbuild_v1/test_cloud_build.py b/tests/unit/gapic/cloudbuild_v1/test_cloud_build.py index e16d6c11..232b3fc9 100644 --- a/tests/unit/gapic/cloudbuild_v1/test_cloud_build.py +++ b/tests/unit/gapic/cloudbuild_v1/test_cloud_build.py @@ -8152,6 +8152,12 @@ def test_create_build_trigger_rest(request_type): "included_files": ["included_files_value1", "included_files_value2"], "filter": "filter_value", "service_account": "service_account_value", + "repository_event_config": { + "repository": "repository_value", + "repository_type": 1, + "pull_request": {}, + "push": {}, + }, } request = request_type(**request_init) @@ -8571,6 +8577,12 @@ def test_create_build_trigger_rest_bad_request( "included_files": ["included_files_value1", "included_files_value2"], "filter": "filter_value", "service_account": "service_account_value", + "repository_event_config": { + "repository": "repository_value", + "repository_type": 1, + "pull_request": {}, + "push": {}, + }, } request = request_type(**request_init) @@ -9786,6 +9798,12 @@ def test_update_build_trigger_rest(request_type): "included_files": ["included_files_value1", "included_files_value2"], "filter": "filter_value", "service_account": "service_account_value", + "repository_event_config": { + "repository": "repository_value", + "repository_type": 1, + "pull_request": {}, + "push": {}, + }, } request = request_type(**request_init) @@ -10208,6 +10226,12 @@ def test_update_build_trigger_rest_bad_request( "included_files": ["included_files_value1", "included_files_value2"], "filter": "filter_value", "service_account": "service_account_value", + "repository_event_config": { + "repository": "repository_value", + "repository_type": 1, + "pull_request": {}, + "push": {}, + }, } request = request_type(**request_init) @@ -13057,10 +13081,39 @@ def test_parse_network_path(): assert expected == actual -def test_secret_version_path(): +def test_repository_path(): project = "winkle" - secret = "nautilus" - version = "scallop" + location = "nautilus" + connection = "scallop" + repository = "abalone" + expected = "projects/{project}/locations/{location}/connections/{connection}/repositories/{repository}".format( + project=project, + location=location, + connection=connection, + repository=repository, + ) + actual = CloudBuildClient.repository_path(project, location, connection, repository) + assert expected == actual + + +def test_parse_repository_path(): + expected = { + "project": "squid", + "location": "clam", + "connection": "whelk", + "repository": "octopus", + } + path = CloudBuildClient.repository_path(**expected) + + # Check that the path construction is reversible. + actual = CloudBuildClient.parse_repository_path(path) + assert expected == actual + + +def test_secret_version_path(): + project = "oyster" + secret = "nudibranch" + version = "cuttlefish" expected = "projects/{project}/secrets/{secret}/versions/{version}".format( project=project, secret=secret, @@ -13072,9 +13125,9 @@ def test_secret_version_path(): def test_parse_secret_version_path(): expected = { - "project": "abalone", - "secret": "squid", - "version": "clam", + "project": "mussel", + "secret": "winkle", + "version": "nautilus", } path = CloudBuildClient.secret_version_path(**expected) @@ -13084,8 +13137,8 @@ def test_parse_secret_version_path(): def test_service_account_path(): - project = "whelk" - service_account = "octopus" + project = "scallop" + service_account = "abalone" expected = "projects/{project}/serviceAccounts/{service_account}".format( project=project, service_account=service_account, @@ -13096,8 +13149,8 @@ def test_service_account_path(): def test_parse_service_account_path(): expected = { - "project": "oyster", - "service_account": "nudibranch", + "project": "squid", + "service_account": "clam", } path = CloudBuildClient.service_account_path(**expected) @@ -13107,8 +13160,8 @@ def test_parse_service_account_path(): def test_subscription_path(): - project = "cuttlefish" - subscription = "mussel" + project = "whelk" + subscription = "octopus" expected = "projects/{project}/subscriptions/{subscription}".format( project=project, subscription=subscription, @@ -13119,8 +13172,8 @@ def test_subscription_path(): def test_parse_subscription_path(): expected = { - "project": "winkle", - "subscription": "nautilus", + "project": "oyster", + "subscription": "nudibranch", } path = CloudBuildClient.subscription_path(**expected) @@ -13130,8 +13183,8 @@ def test_parse_subscription_path(): def test_topic_path(): - project = "scallop" - topic = "abalone" + project = "cuttlefish" + topic = "mussel" expected = "projects/{project}/topics/{topic}".format( project=project, topic=topic, @@ -13142,8 +13195,8 @@ def test_topic_path(): def test_parse_topic_path(): expected = { - "project": "squid", - "topic": "clam", + "project": "winkle", + "topic": "nautilus", } path = CloudBuildClient.topic_path(**expected) @@ -13153,9 +13206,9 @@ def test_parse_topic_path(): def test_worker_pool_path(): - project = "whelk" - location = "octopus" - worker_pool = "oyster" + project = "scallop" + location = "abalone" + worker_pool = "squid" expected = ( "projects/{project}/locations/{location}/workerPools/{worker_pool}".format( project=project, @@ -13169,9 +13222,9 @@ def test_worker_pool_path(): def test_parse_worker_pool_path(): expected = { - "project": "nudibranch", - "location": "cuttlefish", - "worker_pool": "mussel", + "project": "clam", + "location": "whelk", + "worker_pool": "octopus", } path = CloudBuildClient.worker_pool_path(**expected) @@ -13181,7 +13234,7 @@ def test_parse_worker_pool_path(): def test_common_billing_account_path(): - billing_account = "winkle" + billing_account = "oyster" expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -13191,7 +13244,7 @@ def test_common_billing_account_path(): def test_parse_common_billing_account_path(): expected = { - "billing_account": "nautilus", + "billing_account": "nudibranch", } path = CloudBuildClient.common_billing_account_path(**expected) @@ -13201,7 +13254,7 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): - folder = "scallop" + folder = "cuttlefish" expected = "folders/{folder}".format( folder=folder, ) @@ -13211,7 +13264,7 @@ def test_common_folder_path(): def test_parse_common_folder_path(): expected = { - "folder": "abalone", + "folder": "mussel", } path = CloudBuildClient.common_folder_path(**expected) @@ -13221,7 +13274,7 @@ def test_parse_common_folder_path(): def test_common_organization_path(): - organization = "squid" + organization = "winkle" expected = "organizations/{organization}".format( organization=organization, ) @@ -13231,7 +13284,7 @@ def test_common_organization_path(): def test_parse_common_organization_path(): expected = { - "organization": "clam", + "organization": "nautilus", } path = CloudBuildClient.common_organization_path(**expected) @@ -13241,7 +13294,7 @@ def test_parse_common_organization_path(): def test_common_project_path(): - project = "whelk" + project = "scallop" expected = "projects/{project}".format( project=project, ) @@ -13251,7 +13304,7 @@ def test_common_project_path(): def test_parse_common_project_path(): expected = { - "project": "octopus", + "project": "abalone", } path = CloudBuildClient.common_project_path(**expected) @@ -13261,8 +13314,8 @@ def test_parse_common_project_path(): def test_common_location_path(): - project = "oyster" - location = "nudibranch" + project = "squid" + location = "clam" expected = "projects/{project}/locations/{location}".format( project=project, location=location, @@ -13273,8 +13326,8 @@ def test_common_location_path(): def test_parse_common_location_path(): expected = { - "project": "cuttlefish", - "location": "mussel", + "project": "whelk", + "location": "octopus", } path = CloudBuildClient.common_location_path(**expected) From 6716655af1d6f528512c4ba07c8afd6836e05d29 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 28 Jun 2023 17:34:12 +0000 Subject: [PATCH 5/7] chore: store artifacts in placer [autoapprove] (#411) Source-Link: https://togithub.com/googleapis/synthtool/commit/cb960373d12d20f8dc38beee2bf884d49627165e Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-python:latest@sha256:2d816f26f728ac8b24248741e7d4c461c09764ef9f7be3684d557c9632e46dbd --- .github/.OwlBot.lock.yaml | 4 ++-- .kokoro/release/common.cfg | 9 +++++++++ noxfile.py | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 1b3cb6c5..98994f47 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:ddf4551385d566771dc713090feb7b4c1164fb8a698fe52bbe7670b24236565b -# created: 2023-06-27T13:04:21.96690344Z + digest: sha256:2d816f26f728ac8b24248741e7d4c461c09764ef9f7be3684d557c9632e46dbd +# created: 2023-06-28T17:03:33.371210701Z diff --git a/.kokoro/release/common.cfg b/.kokoro/release/common.cfg index 1f35bece..5e0adba6 100644 --- a/.kokoro/release/common.cfg +++ b/.kokoro/release/common.cfg @@ -38,3 +38,12 @@ env_vars: { key: "SECRET_MANAGER_KEYS" value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" } + +# Store the packages we uploaded to PyPI. That way, we have a record of exactly +# what we published, which we can use to generate SBOMs and attestations. +action { + define_artifacts { + regex: "github/python-cloudbuild/**/*.tar.gz" + strip_prefix: "github/python-cloudbuild" + } +} diff --git a/noxfile.py b/noxfile.py index 1fa00483..715640ff 100644 --- a/noxfile.py +++ b/noxfile.py @@ -378,6 +378,7 @@ def prerelease_deps(session): "grpcio!=1.52.0rc1", "grpcio-status", "google-api-core", + "google-auth", "proto-plus", "google-cloud-testutils", # dependencies of google-cloud-testutils" @@ -390,7 +391,6 @@ def prerelease_deps(session): # Remaining dependencies other_deps = [ "requests", - "google-auth", ] session.install(*other_deps) From f5b1b4236cdfda77f95201c9cf22b74163e7c4f2 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:07:52 -0400 Subject: [PATCH 6/7] feat: Add GitLabConfig and fetchGitRefs for Cloud Build Repositories (#412) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Add GitLabConfig and fetchGitRefs for Cloud Build Repositories PiperOrigin-RevId: 544132349 Source-Link: https://github.com/googleapis/googleapis/commit/f006f7f667d9ab81cba58e4bd8b5f2d13cf3af45 Source-Link: https://github.com/googleapis/googleapis-gen/commit/c5e33e0adb1615364913c85293adaccdf368f00e Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzVlMzNlMGFkYjE2MTUzNjQ5MTNjODUyOTNhZGFjY2RmMzY4ZjAwZSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- .../cloud/devtools/cloudbuild_v2/__init__.py | 10 + .../cloudbuild_v2/gapic_metadata.json | 15 + .../repository_manager/async_client.py | 105 +++- .../services/repository_manager/client.py | 105 +++- .../repository_manager/transports/base.py | 17 + .../repository_manager/transports/grpc.py | 31 +- .../transports/grpc_asyncio.py | 31 +- .../repository_manager/transports/rest.py | 129 +++- .../devtools/cloudbuild_v2/types/__init__.py | 10 + .../cloudbuild_v2/types/repositories.py | 196 ++++++ ...repository_manager_fetch_git_refs_async.py | 52 ++ ..._repository_manager_fetch_git_refs_sync.py | 52 ++ ...etadata_google.devtools.cloudbuild.v2.json | 161 +++++ scripts/fixup_cloudbuild_v2_keywords.py | 1 + .../cloudbuild_v2/test_repository_manager.py | 568 ++++++++++++++++++ 15 files changed, 1478 insertions(+), 5 deletions(-) create mode 100644 samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_async.py create mode 100644 samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_sync.py diff --git a/google/cloud/devtools/cloudbuild_v2/__init__.py b/google/cloud/devtools/cloudbuild_v2/__init__.py index d8f32fb0..bf3e69db 100644 --- a/google/cloud/devtools/cloudbuild_v2/__init__.py +++ b/google/cloud/devtools/cloudbuild_v2/__init__.py @@ -30,6 +30,8 @@ from .types.repositories import CreateRepositoryRequest from .types.repositories import DeleteConnectionRequest from .types.repositories import DeleteRepositoryRequest +from .types.repositories import FetchGitRefsRequest +from .types.repositories import FetchGitRefsResponse from .types.repositories import FetchLinkableRepositoriesRequest from .types.repositories import FetchLinkableRepositoriesResponse from .types.repositories import FetchReadTokenRequest @@ -40,15 +42,18 @@ from .types.repositories import GetRepositoryRequest from .types.repositories import GitHubConfig from .types.repositories import GitHubEnterpriseConfig +from .types.repositories import GitLabConfig from .types.repositories import InstallationState from .types.repositories import ListConnectionsRequest from .types.repositories import ListConnectionsResponse from .types.repositories import ListRepositoriesRequest from .types.repositories import ListRepositoriesResponse from .types.repositories import OAuthCredential +from .types.repositories import ProcessWebhookRequest from .types.repositories import Repository from .types.repositories import ServiceDirectoryConfig from .types.repositories import UpdateConnectionRequest +from .types.repositories import UserCredential __all__ = ( "RepositoryManagerAsyncClient", @@ -59,6 +64,8 @@ "CreateRepositoryRequest", "DeleteConnectionRequest", "DeleteRepositoryRequest", + "FetchGitRefsRequest", + "FetchGitRefsResponse", "FetchLinkableRepositoriesRequest", "FetchLinkableRepositoriesResponse", "FetchReadTokenRequest", @@ -69,6 +76,7 @@ "GetRepositoryRequest", "GitHubConfig", "GitHubEnterpriseConfig", + "GitLabConfig", "InstallationState", "ListConnectionsRequest", "ListConnectionsResponse", @@ -76,9 +84,11 @@ "ListRepositoriesResponse", "OAuthCredential", "OperationMetadata", + "ProcessWebhookRequest", "Repository", "RepositoryManagerClient", "RunWorkflowCustomOperationMetadata", "ServiceDirectoryConfig", "UpdateConnectionRequest", + "UserCredential", ) diff --git a/google/cloud/devtools/cloudbuild_v2/gapic_metadata.json b/google/cloud/devtools/cloudbuild_v2/gapic_metadata.json index e4616bdb..2e77ddd0 100644 --- a/google/cloud/devtools/cloudbuild_v2/gapic_metadata.json +++ b/google/cloud/devtools/cloudbuild_v2/gapic_metadata.json @@ -35,6 +35,11 @@ "delete_repository" ] }, + "FetchGitRefs": { + "methods": [ + "fetch_git_refs" + ] + }, "FetchLinkableRepositories": { "methods": [ "fetch_linkable_repositories" @@ -105,6 +110,11 @@ "delete_repository" ] }, + "FetchGitRefs": { + "methods": [ + "fetch_git_refs" + ] + }, "FetchLinkableRepositories": { "methods": [ "fetch_linkable_repositories" @@ -175,6 +185,11 @@ "delete_repository" ] }, + "FetchGitRefs": { + "methods": [ + "fetch_git_refs" + ] + }, "FetchLinkableRepositories": { "methods": [ "fetch_linkable_repositories" diff --git a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/async_client.py b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/async_client.py index 3e4faaa0..514a2c6d 100644 --- a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/async_client.py +++ b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/async_client.py @@ -60,7 +60,7 @@ class RepositoryManagerAsyncClient: - """Manages connections to source code repostiories.""" + """Manages connections to source code repositories.""" _client: RepositoryManagerClient @@ -1828,6 +1828,109 @@ async def sample_fetch_linkable_repositories(): # Done; return the response. return response + async def fetch_git_refs( + self, + request: Optional[Union[repositories.FetchGitRefsRequest, dict]] = None, + *, + repository: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> repositories.FetchGitRefsResponse: + r"""Fetch the list of branches or tags for a given + repository. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud.devtools import cloudbuild_v2 + + async def sample_fetch_git_refs(): + # Create a client + client = cloudbuild_v2.RepositoryManagerAsyncClient() + + # Initialize request argument(s) + request = cloudbuild_v2.FetchGitRefsRequest( + repository="repository_value", + ) + + # Make the request + response = await client.fetch_git_refs(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsRequest, dict]]): + The request object. Request for fetching git refs + repository (:class:`str`): + Required. The resource name of the repository in the + format + ``projects/*/locations/*/connections/*/repositories/*``. + + This corresponds to the ``repository`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsResponse: + Response for fetching git refs + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([repository]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = repositories.FetchGitRefsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if repository is not None: + request.repository = repository + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.fetch_git_refs, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("repository", request.repository),) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + async def get_operation( self, request: Optional[operations_pb2.GetOperationRequest] = None, diff --git a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/client.py b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/client.py index 6423d5b2..38dbfeda 100644 --- a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/client.py +++ b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/client.py @@ -102,7 +102,7 @@ def get_transport_class( class RepositoryManagerClient(metaclass=RepositoryManagerClientMeta): - """Manages connections to source code repostiories.""" + """Manages connections to source code repositories.""" @staticmethod def _get_default_mtls_endpoint(api_endpoint): @@ -2063,6 +2063,109 @@ def sample_fetch_linkable_repositories(): # Done; return the response. return response + def fetch_git_refs( + self, + request: Optional[Union[repositories.FetchGitRefsRequest, dict]] = None, + *, + repository: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> repositories.FetchGitRefsResponse: + r"""Fetch the list of branches or tags for a given + repository. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud.devtools import cloudbuild_v2 + + def sample_fetch_git_refs(): + # Create a client + client = cloudbuild_v2.RepositoryManagerClient() + + # Initialize request argument(s) + request = cloudbuild_v2.FetchGitRefsRequest( + repository="repository_value", + ) + + # Make the request + response = client.fetch_git_refs(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsRequest, dict]): + The request object. Request for fetching git refs + repository (str): + Required. The resource name of the repository in the + format + ``projects/*/locations/*/connections/*/repositories/*``. + + This corresponds to the ``repository`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsResponse: + Response for fetching git refs + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([repository]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a repositories.FetchGitRefsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, repositories.FetchGitRefsRequest): + request = repositories.FetchGitRefsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if repository is not None: + request.repository = repository + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.fetch_git_refs] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("repository", request.repository),) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def __enter__(self) -> "RepositoryManagerClient": return self diff --git a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/base.py b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/base.py index 6828b652..c95fa6fd 100644 --- a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/base.py +++ b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/base.py @@ -257,6 +257,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.fetch_git_refs: gapic_v1.method.wrap_method( + self.fetch_git_refs, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -405,6 +410,18 @@ def fetch_linkable_repositories( ]: raise NotImplementedError() + @property + def fetch_git_refs( + self, + ) -> Callable[ + [repositories.FetchGitRefsRequest], + Union[ + repositories.FetchGitRefsResponse, + Awaitable[repositories.FetchGitRefsResponse], + ], + ]: + raise NotImplementedError() + @property def get_operation( self, diff --git a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc.py b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc.py index bb8df794..699abe40 100644 --- a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc.py +++ b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc.py @@ -37,7 +37,7 @@ class RepositoryManagerGrpcTransport(RepositoryManagerTransport): """gRPC backend transport for RepositoryManager. - Manages connections to source code repostiories. + Manages connections to source code repositories. This class defines the same methods as the primary client, so the primary client can load the underlying transport implementation @@ -604,6 +604,35 @@ def fetch_linkable_repositories( ) return self._stubs["fetch_linkable_repositories"] + @property + def fetch_git_refs( + self, + ) -> Callable[ + [repositories.FetchGitRefsRequest], repositories.FetchGitRefsResponse + ]: + r"""Return a callable for the fetch git refs method over gRPC. + + Fetch the list of branches or tags for a given + repository. + + Returns: + Callable[[~.FetchGitRefsRequest], + ~.FetchGitRefsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "fetch_git_refs" not in self._stubs: + self._stubs["fetch_git_refs"] = self.grpc_channel.unary_unary( + "/google.devtools.cloudbuild.v2.RepositoryManager/FetchGitRefs", + request_serializer=repositories.FetchGitRefsRequest.serialize, + response_deserializer=repositories.FetchGitRefsResponse.deserialize, + ) + return self._stubs["fetch_git_refs"] + def close(self): self.grpc_channel.close() diff --git a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc_asyncio.py b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc_asyncio.py index a035b0b4..a3a2cccc 100644 --- a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc_asyncio.py +++ b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/grpc_asyncio.py @@ -38,7 +38,7 @@ class RepositoryManagerGrpcAsyncIOTransport(RepositoryManagerTransport): """gRPC AsyncIO backend transport for RepositoryManager. - Manages connections to source code repostiories. + Manages connections to source code repositories. This class defines the same methods as the primary client, so the primary client can load the underlying transport implementation @@ -627,6 +627,35 @@ def fetch_linkable_repositories( ) return self._stubs["fetch_linkable_repositories"] + @property + def fetch_git_refs( + self, + ) -> Callable[ + [repositories.FetchGitRefsRequest], Awaitable[repositories.FetchGitRefsResponse] + ]: + r"""Return a callable for the fetch git refs method over gRPC. + + Fetch the list of branches or tags for a given + repository. + + Returns: + Callable[[~.FetchGitRefsRequest], + Awaitable[~.FetchGitRefsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "fetch_git_refs" not in self._stubs: + self._stubs["fetch_git_refs"] = self.grpc_channel.unary_unary( + "/google.devtools.cloudbuild.v2.RepositoryManager/FetchGitRefs", + request_serializer=repositories.FetchGitRefsRequest.serialize, + response_deserializer=repositories.FetchGitRefsResponse.deserialize, + ) + return self._stubs["fetch_git_refs"] + def close(self): return self.grpc_channel.close() diff --git a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/rest.py b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/rest.py index f7ffc680..32647220 100644 --- a/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/rest.py +++ b/google/cloud/devtools/cloudbuild_v2/services/repository_manager/transports/rest.py @@ -115,6 +115,14 @@ def post_delete_repository(self, response): logging.log(f"Received response: {response}") return response + def pre_fetch_git_refs(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_fetch_git_refs(self, response): + logging.log(f"Received response: {response}") + return response + def pre_fetch_linkable_repositories(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -300,6 +308,29 @@ def post_delete_repository( """ return response + def pre_fetch_git_refs( + self, + request: repositories.FetchGitRefsRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[repositories.FetchGitRefsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for fetch_git_refs + + Override in a subclass to manipulate the request or metadata + before they are sent to the RepositoryManager server. + """ + return request, metadata + + def post_fetch_git_refs( + self, response: repositories.FetchGitRefsResponse + ) -> repositories.FetchGitRefsResponse: + """Post-rpc interceptor for fetch_git_refs + + Override in a subclass to manipulate the response + after it is returned by the RepositoryManager server but before + it is returned to user code. + """ + return response + def pre_fetch_linkable_repositories( self, request: repositories.FetchLinkableRepositoriesRequest, @@ -606,7 +637,7 @@ class RepositoryManagerRestStub: class RepositoryManagerRestTransport(RepositoryManagerTransport): """REST backend transport for RepositoryManager. - Manages connections to source code repostiories. + Manages connections to source code repositories. This class defines the same methods as the primary client, so the primary client can load the underlying transport implementation @@ -1211,6 +1242,92 @@ def __call__( resp = self._interceptor.post_delete_repository(resp) return resp + class _FetchGitRefs(RepositoryManagerRestStub): + def __hash__(self): + return hash("FetchGitRefs") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: repositories.FetchGitRefsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> repositories.FetchGitRefsResponse: + r"""Call the fetch git refs method over HTTP. + + Args: + request (~.repositories.FetchGitRefsRequest): + The request object. Request for fetching git refs + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.repositories.FetchGitRefsResponse: + Response for fetching git refs + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v2/{repository=projects/*/locations/*/connections/*/repositories/*}:fetchGitRefs", + }, + ] + request, metadata = self._interceptor.pre_fetch_git_refs(request, metadata) + pb_request = repositories.FetchGitRefsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = repositories.FetchGitRefsResponse() + pb_resp = repositories.FetchGitRefsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_fetch_git_refs(resp) + return resp + class _FetchLinkableRepositories(RepositoryManagerRestStub): def __hash__(self): return hash("FetchLinkableRepositories") @@ -2003,6 +2120,16 @@ def delete_repository( # In C++ this would require a dynamic_cast return self._DeleteRepository(self._session, self._host, self._interceptor) # type: ignore + @property + def fetch_git_refs( + self, + ) -> Callable[ + [repositories.FetchGitRefsRequest], repositories.FetchGitRefsResponse + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._FetchGitRefs(self._session, self._host, self._interceptor) # type: ignore + @property def fetch_linkable_repositories( self, diff --git a/google/cloud/devtools/cloudbuild_v2/types/__init__.py b/google/cloud/devtools/cloudbuild_v2/types/__init__.py index 49ef7afb..01ec67fe 100644 --- a/google/cloud/devtools/cloudbuild_v2/types/__init__.py +++ b/google/cloud/devtools/cloudbuild_v2/types/__init__.py @@ -25,6 +25,8 @@ CreateRepositoryRequest, DeleteConnectionRequest, DeleteRepositoryRequest, + FetchGitRefsRequest, + FetchGitRefsResponse, FetchLinkableRepositoriesRequest, FetchLinkableRepositoriesResponse, FetchReadTokenRequest, @@ -35,15 +37,18 @@ GetRepositoryRequest, GitHubConfig, GitHubEnterpriseConfig, + GitLabConfig, InstallationState, ListConnectionsRequest, ListConnectionsResponse, ListRepositoriesRequest, ListRepositoriesResponse, OAuthCredential, + ProcessWebhookRequest, Repository, ServiceDirectoryConfig, UpdateConnectionRequest, + UserCredential, ) __all__ = ( @@ -56,6 +61,8 @@ "CreateRepositoryRequest", "DeleteConnectionRequest", "DeleteRepositoryRequest", + "FetchGitRefsRequest", + "FetchGitRefsResponse", "FetchLinkableRepositoriesRequest", "FetchLinkableRepositoriesResponse", "FetchReadTokenRequest", @@ -66,13 +73,16 @@ "GetRepositoryRequest", "GitHubConfig", "GitHubEnterpriseConfig", + "GitLabConfig", "InstallationState", "ListConnectionsRequest", "ListConnectionsResponse", "ListRepositoriesRequest", "ListRepositoriesResponse", "OAuthCredential", + "ProcessWebhookRequest", "Repository", "ServiceDirectoryConfig", "UpdateConnectionRequest", + "UserCredential", ) diff --git a/google/cloud/devtools/cloudbuild_v2/types/repositories.py b/google/cloud/devtools/cloudbuild_v2/types/repositories.py index 94fc1cbe..f91d7212 100644 --- a/google/cloud/devtools/cloudbuild_v2/types/repositories.py +++ b/google/cloud/devtools/cloudbuild_v2/types/repositories.py @@ -19,6 +19,7 @@ import proto # type: ignore +from google.api import httpbody_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore @@ -32,9 +33,11 @@ "FetchLinkableRepositoriesResponse", "GitHubConfig", "GitHubEnterpriseConfig", + "GitLabConfig", "ServiceDirectoryConfig", "Repository", "OAuthCredential", + "UserCredential", "CreateConnectionRequest", "GetConnectionRequest", "ListConnectionsRequest", @@ -52,6 +55,9 @@ "FetchReadTokenRequest", "FetchReadTokenResponse", "FetchReadWriteTokenResponse", + "ProcessWebhookRequest", + "FetchGitRefsRequest", + "FetchGitRefsResponse", }, ) @@ -86,6 +92,11 @@ class Connection(proto.Message): Configuration for connections to an instance of GitHub Enterprise. + This field is a member of `oneof`_ ``connection_config``. + gitlab_config (google.cloud.devtools.cloudbuild_v2.types.GitLabConfig): + Configuration for connections to gitlab.com + or an instance of GitLab Enterprise. + This field is a member of `oneof`_ ``connection_config``. installation_state (google.cloud.devtools.cloudbuild_v2.types.InstallationState): Output only. Installation state of the @@ -135,6 +146,12 @@ class Connection(proto.Message): oneof="connection_config", message="GitHubEnterpriseConfig", ) + gitlab_config: "GitLabConfig" = proto.Field( + proto.MESSAGE, + number=7, + oneof="connection_config", + message="GitLabConfig", + ) installation_state: "InstallationState" = proto.Field( proto.MESSAGE, number=12, @@ -382,6 +399,74 @@ class GitHubEnterpriseConfig(proto.Message): ) +class GitLabConfig(proto.Message): + r"""Configuration for connections to gitlab.com or an instance of + GitLab Enterprise. + + Attributes: + host_uri (str): + The URI of the GitLab Enterprise host this + connection is for. If not specified, the default + value is https://gitlab.com. + webhook_secret_secret_version (str): + Required. Immutable. SecretManager resource containing the + webhook secret of a GitLab Enterprise project, formatted as + ``projects/*/secrets/*/versions/*``. + read_authorizer_credential (google.cloud.devtools.cloudbuild_v2.types.UserCredential): + Required. A GitLab personal access token with the minimum + ``read_api`` scope access. + authorizer_credential (google.cloud.devtools.cloudbuild_v2.types.UserCredential): + Required. A GitLab personal access token with the ``api`` + scope access. + service_directory_config (google.cloud.devtools.cloudbuild_v2.types.ServiceDirectoryConfig): + Configuration for using Service Directory to + privately connect to a GitLab Enterprise server. + This should only be set if the GitLab Enterprise + server is hosted on-premises and not reachable + by public internet. If this field is left empty, + calls to the GitLab Enterprise server will be + made over the public internet. + ssl_ca (str): + SSL certificate to use for requests to GitLab + Enterprise. + server_version (str): + Output only. Version of the GitLab Enterprise server running + on the ``host_uri``. + """ + + host_uri: str = proto.Field( + proto.STRING, + number=1, + ) + webhook_secret_secret_version: str = proto.Field( + proto.STRING, + number=2, + ) + read_authorizer_credential: "UserCredential" = proto.Field( + proto.MESSAGE, + number=3, + message="UserCredential", + ) + authorizer_credential: "UserCredential" = proto.Field( + proto.MESSAGE, + number=4, + message="UserCredential", + ) + service_directory_config: "ServiceDirectoryConfig" = proto.Field( + proto.MESSAGE, + number=5, + message="ServiceDirectoryConfig", + ) + ssl_ca: str = proto.Field( + proto.STRING, + number=6, + ) + server_version: str = proto.Field( + proto.STRING, + number=7, + ) + + class ServiceDirectoryConfig(proto.Message): r"""ServiceDirectoryConfig represents Service Directory configuration for a connection. @@ -422,6 +507,9 @@ class Repository(proto.Message): on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + webhook_id (str): + Output only. External ID of the webhook + created for the repository. """ name: str = proto.Field( @@ -451,6 +539,10 @@ class Repository(proto.Message): proto.STRING, number=7, ) + webhook_id: str = proto.Field( + proto.STRING, + number=8, + ) class OAuthCredential(proto.Message): @@ -477,6 +569,30 @@ class OAuthCredential(proto.Message): ) +class UserCredential(proto.Message): + r"""Represents a personal access token that authorized the + Connection, and associated metadata. + + Attributes: + user_token_secret_version (str): + Required. A SecretManager resource containing the user token + that authorizes the Cloud Build connection. Format: + ``projects/*/secrets/*/versions/*``. + username (str): + Output only. The username associated to this + token. + """ + + user_token_secret_version: str = proto.Field( + proto.STRING, + number=1, + ) + username: str = proto.Field( + proto.STRING, + number=2, + ) + + class CreateConnectionRequest(proto.Message): r"""Message for creating a Connection @@ -907,4 +1023,84 @@ class FetchReadWriteTokenResponse(proto.Message): ) +class ProcessWebhookRequest(proto.Message): + r"""RPC request object accepted by the ProcessWebhook RPC method. + + Attributes: + parent (str): + Required. Project and location where the webhook will be + received. Format: ``projects/*/locations/*``. + body (google.api.httpbody_pb2.HttpBody): + HTTP request body. + webhook_key (str): + Arbitrary additional key to find the maching + repository for a webhook event if needed. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + body: httpbody_pb2.HttpBody = proto.Field( + proto.MESSAGE, + number=2, + message=httpbody_pb2.HttpBody, + ) + webhook_key: str = proto.Field( + proto.STRING, + number=3, + ) + + +class FetchGitRefsRequest(proto.Message): + r"""Request for fetching git refs + + Attributes: + repository (str): + Required. The resource name of the repository in the format + ``projects/*/locations/*/connections/*/repositories/*``. + ref_type (google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsRequest.RefType): + Type of refs to fetch + """ + + class RefType(proto.Enum): + r"""Type of refs + + Values: + REF_TYPE_UNSPECIFIED (0): + No type specified. + TAG (1): + To fetch tags. + BRANCH (2): + To fetch branches. + """ + REF_TYPE_UNSPECIFIED = 0 + TAG = 1 + BRANCH = 2 + + repository: str = proto.Field( + proto.STRING, + number=1, + ) + ref_type: RefType = proto.Field( + proto.ENUM, + number=2, + enum=RefType, + ) + + +class FetchGitRefsResponse(proto.Message): + r"""Response for fetching git refs + + Attributes: + ref_names (MutableSequence[str]): + Name of the refs fetched. + """ + + ref_names: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=1, + ) + + __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_async.py b/samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_async.py new file mode 100644 index 00000000..dd3c5b63 --- /dev/null +++ b/samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Generated code. DO NOT EDIT! +# +# Snippet for FetchGitRefs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-build + + +# [START cloudbuild_v2_generated_RepositoryManager_FetchGitRefs_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud.devtools import cloudbuild_v2 + + +async def sample_fetch_git_refs(): + # Create a client + client = cloudbuild_v2.RepositoryManagerAsyncClient() + + # Initialize request argument(s) + request = cloudbuild_v2.FetchGitRefsRequest( + repository="repository_value", + ) + + # Make the request + response = await client.fetch_git_refs(request=request) + + # Handle the response + print(response) + +# [END cloudbuild_v2_generated_RepositoryManager_FetchGitRefs_async] diff --git a/samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_sync.py b/samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_sync.py new file mode 100644 index 00000000..346025b7 --- /dev/null +++ b/samples/generated_samples/cloudbuild_v2_generated_repository_manager_fetch_git_refs_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Generated code. DO NOT EDIT! +# +# Snippet for FetchGitRefs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-build + + +# [START cloudbuild_v2_generated_RepositoryManager_FetchGitRefs_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud.devtools import cloudbuild_v2 + + +def sample_fetch_git_refs(): + # Create a client + client = cloudbuild_v2.RepositoryManagerClient() + + # Initialize request argument(s) + request = cloudbuild_v2.FetchGitRefsRequest( + repository="repository_value", + ) + + # Make the request + response = client.fetch_git_refs(request=request) + + # Handle the response + print(response) + +# [END cloudbuild_v2_generated_RepositoryManager_FetchGitRefs_sync] diff --git a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json index 28513727..818d3fc2 100644 --- a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json +++ b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json @@ -856,6 +856,167 @@ ], "title": "cloudbuild_v2_generated_repository_manager_delete_repository_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.devtools.cloudbuild_v2.RepositoryManagerAsyncClient", + "shortName": "RepositoryManagerAsyncClient" + }, + "fullName": "google.cloud.devtools.cloudbuild_v2.RepositoryManagerAsyncClient.fetch_git_refs", + "method": { + "fullName": "google.devtools.cloudbuild.v2.RepositoryManager.FetchGitRefs", + "service": { + "fullName": "google.devtools.cloudbuild.v2.RepositoryManager", + "shortName": "RepositoryManager" + }, + "shortName": "FetchGitRefs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsRequest" + }, + { + "name": "repository", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsResponse", + "shortName": "fetch_git_refs" + }, + "description": "Sample for FetchGitRefs", + "file": "cloudbuild_v2_generated_repository_manager_fetch_git_refs_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "cloudbuild_v2_generated_RepositoryManager_FetchGitRefs_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "cloudbuild_v2_generated_repository_manager_fetch_git_refs_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.devtools.cloudbuild_v2.RepositoryManagerClient", + "shortName": "RepositoryManagerClient" + }, + "fullName": "google.cloud.devtools.cloudbuild_v2.RepositoryManagerClient.fetch_git_refs", + "method": { + "fullName": "google.devtools.cloudbuild.v2.RepositoryManager.FetchGitRefs", + "service": { + "fullName": "google.devtools.cloudbuild.v2.RepositoryManager", + "shortName": "RepositoryManager" + }, + "shortName": "FetchGitRefs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsRequest" + }, + { + "name": "repository", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.devtools.cloudbuild_v2.types.FetchGitRefsResponse", + "shortName": "fetch_git_refs" + }, + "description": "Sample for FetchGitRefs", + "file": "cloudbuild_v2_generated_repository_manager_fetch_git_refs_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "cloudbuild_v2_generated_RepositoryManager_FetchGitRefs_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "cloudbuild_v2_generated_repository_manager_fetch_git_refs_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/scripts/fixup_cloudbuild_v2_keywords.py b/scripts/fixup_cloudbuild_v2_keywords.py index af6774cc..e482f46c 100644 --- a/scripts/fixup_cloudbuild_v2_keywords.py +++ b/scripts/fixup_cloudbuild_v2_keywords.py @@ -44,6 +44,7 @@ class cloudbuildCallTransformer(cst.CSTTransformer): 'create_repository': ('parent', 'repository', 'repository_id', ), 'delete_connection': ('name', 'etag', 'validate_only', ), 'delete_repository': ('name', 'etag', 'validate_only', ), + 'fetch_git_refs': ('repository', 'ref_type', ), 'fetch_linkable_repositories': ('connection', 'page_size', 'page_token', ), 'fetch_read_token': ('repository', ), 'fetch_read_write_token': ('repository', ), diff --git a/tests/unit/gapic/cloudbuild_v2/test_repository_manager.py b/tests/unit/gapic/cloudbuild_v2/test_repository_manager.py index f9fd4de3..718cb16d 100644 --- a/tests/unit/gapic/cloudbuild_v2/test_repository_manager.py +++ b/tests/unit/gapic/cloudbuild_v2/test_repository_manager.py @@ -2705,6 +2705,7 @@ def test_get_repository(request_type, transport: str = "grpc"): name="name_value", remote_uri="remote_uri_value", etag="etag_value", + webhook_id="webhook_id_value", ) response = client.get_repository(request) @@ -2718,6 +2719,7 @@ def test_get_repository(request_type, transport: str = "grpc"): assert response.name == "name_value" assert response.remote_uri == "remote_uri_value" assert response.etag == "etag_value" + assert response.webhook_id == "webhook_id_value" def test_get_repository_empty_call(): @@ -2757,6 +2759,7 @@ async def test_get_repository_async( name="name_value", remote_uri="remote_uri_value", etag="etag_value", + webhook_id="webhook_id_value", ) ) response = await client.get_repository(request) @@ -2771,6 +2774,7 @@ async def test_get_repository_async( assert response.name == "name_value" assert response.remote_uri == "remote_uri_value" assert response.etag == "etag_value" + assert response.webhook_id == "webhook_id_value" @pytest.mark.asyncio @@ -4439,6 +4443,238 @@ async def test_fetch_linkable_repositories_async_pages(): assert page_.raw_page.next_page_token == token +@pytest.mark.parametrize( + "request_type", + [ + repositories.FetchGitRefsRequest, + dict, + ], +) +def test_fetch_git_refs(request_type, transport: str = "grpc"): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.fetch_git_refs), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = repositories.FetchGitRefsResponse( + ref_names=["ref_names_value"], + ) + response = client.fetch_git_refs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == repositories.FetchGitRefsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, repositories.FetchGitRefsResponse) + assert response.ref_names == ["ref_names_value"] + + +def test_fetch_git_refs_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.fetch_git_refs), "__call__") as call: + client.fetch_git_refs() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == repositories.FetchGitRefsRequest() + + +@pytest.mark.asyncio +async def test_fetch_git_refs_async( + transport: str = "grpc_asyncio", request_type=repositories.FetchGitRefsRequest +): + client = RepositoryManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.fetch_git_refs), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + repositories.FetchGitRefsResponse( + ref_names=["ref_names_value"], + ) + ) + response = await client.fetch_git_refs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == repositories.FetchGitRefsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, repositories.FetchGitRefsResponse) + assert response.ref_names == ["ref_names_value"] + + +@pytest.mark.asyncio +async def test_fetch_git_refs_async_from_dict(): + await test_fetch_git_refs_async(request_type=dict) + + +def test_fetch_git_refs_field_headers(): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = repositories.FetchGitRefsRequest() + + request.repository = "repository_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.fetch_git_refs), "__call__") as call: + call.return_value = repositories.FetchGitRefsResponse() + client.fetch_git_refs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "repository=repository_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_fetch_git_refs_field_headers_async(): + client = RepositoryManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = repositories.FetchGitRefsRequest() + + request.repository = "repository_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.fetch_git_refs), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + repositories.FetchGitRefsResponse() + ) + await client.fetch_git_refs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "repository=repository_value", + ) in kw["metadata"] + + +def test_fetch_git_refs_flattened(): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.fetch_git_refs), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = repositories.FetchGitRefsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.fetch_git_refs( + repository="repository_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].repository + mock_val = "repository_value" + assert arg == mock_val + + +def test_fetch_git_refs_flattened_error(): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.fetch_git_refs( + repositories.FetchGitRefsRequest(), + repository="repository_value", + ) + + +@pytest.mark.asyncio +async def test_fetch_git_refs_flattened_async(): + client = RepositoryManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.fetch_git_refs), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = repositories.FetchGitRefsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + repositories.FetchGitRefsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.fetch_git_refs( + repository="repository_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].repository + mock_val = "repository_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_fetch_git_refs_flattened_error_async(): + client = RepositoryManagerAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.fetch_git_refs( + repositories.FetchGitRefsRequest(), + repository="repository_value", + ) + + @pytest.mark.parametrize( "request_type", [ @@ -4477,6 +4713,18 @@ def test_create_connection_rest(request_type): "ssl_ca": "ssl_ca_value", "server_version": "server_version_value", }, + "gitlab_config": { + "host_uri": "host_uri_value", + "webhook_secret_secret_version": "webhook_secret_secret_version_value", + "read_authorizer_credential": { + "user_token_secret_version": "user_token_secret_version_value", + "username": "username_value", + }, + "authorizer_credential": {}, + "service_directory_config": {}, + "ssl_ca": "ssl_ca_value", + "server_version": "server_version_value", + }, "installation_state": { "stage": 1, "message": "message_value", @@ -4708,6 +4956,18 @@ def test_create_connection_rest_bad_request( "ssl_ca": "ssl_ca_value", "server_version": "server_version_value", }, + "gitlab_config": { + "host_uri": "host_uri_value", + "webhook_secret_secret_version": "webhook_secret_secret_version_value", + "read_authorizer_credential": { + "user_token_secret_version": "user_token_secret_version_value", + "username": "username_value", + }, + "authorizer_credential": {}, + "service_directory_config": {}, + "ssl_ca": "ssl_ca_value", + "server_version": "server_version_value", + }, "installation_state": { "stage": 1, "message": "message_value", @@ -5458,6 +5718,18 @@ def test_update_connection_rest(request_type): "ssl_ca": "ssl_ca_value", "server_version": "server_version_value", }, + "gitlab_config": { + "host_uri": "host_uri_value", + "webhook_secret_secret_version": "webhook_secret_secret_version_value", + "read_authorizer_credential": { + "user_token_secret_version": "user_token_secret_version_value", + "username": "username_value", + }, + "authorizer_credential": {}, + "service_directory_config": {}, + "ssl_ca": "ssl_ca_value", + "server_version": "server_version_value", + }, "installation_state": { "stage": 1, "message": "message_value", @@ -5679,6 +5951,18 @@ def test_update_connection_rest_bad_request( "ssl_ca": "ssl_ca_value", "server_version": "server_version_value", }, + "gitlab_config": { + "host_uri": "host_uri_value", + "webhook_secret_secret_version": "webhook_secret_secret_version_value", + "read_authorizer_credential": { + "user_token_secret_version": "user_token_secret_version_value", + "username": "username_value", + }, + "authorizer_credential": {}, + "service_directory_config": {}, + "ssl_ca": "ssl_ca_value", + "server_version": "server_version_value", + }, "installation_state": { "stage": 1, "message": "message_value", @@ -6072,6 +6356,7 @@ def test_create_repository_rest(request_type): "update_time": {}, "annotations": {}, "etag": "etag_value", + "webhook_id": "webhook_id_value", } request = request_type(**request_init) @@ -6278,6 +6563,7 @@ def test_create_repository_rest_bad_request( "update_time": {}, "annotations": {}, "etag": "etag_value", + "webhook_id": "webhook_id_value", } request = request_type(**request_init) @@ -6662,6 +6948,7 @@ def test_get_repository_rest(request_type): name="name_value", remote_uri="remote_uri_value", etag="etag_value", + webhook_id="webhook_id_value", ) # Wrap the value into a proper Response obj @@ -6679,6 +6966,7 @@ def test_get_repository_rest(request_type): assert response.name == "name_value" assert response.remote_uri == "remote_uri_value" assert response.etag == "etag_value" + assert response.webhook_id == "webhook_id_value" def test_get_repository_rest_required_fields( @@ -8390,6 +8678,282 @@ def test_fetch_linkable_repositories_rest_pager(transport: str = "rest"): assert page_.raw_page.next_page_token == token +@pytest.mark.parametrize( + "request_type", + [ + repositories.FetchGitRefsRequest, + dict, + ], +) +def test_fetch_git_refs_rest(request_type): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "repository": "projects/sample1/locations/sample2/connections/sample3/repositories/sample4" + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = repositories.FetchGitRefsResponse( + ref_names=["ref_names_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = repositories.FetchGitRefsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.fetch_git_refs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, repositories.FetchGitRefsResponse) + assert response.ref_names == ["ref_names_value"] + + +def test_fetch_git_refs_rest_required_fields( + request_type=repositories.FetchGitRefsRequest, +): + transport_class = transports.RepositoryManagerRestTransport + + request_init = {} + request_init["repository"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).fetch_git_refs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["repository"] = "repository_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).fetch_git_refs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("ref_type",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "repository" in jsonified_request + assert jsonified_request["repository"] == "repository_value" + + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = repositories.FetchGitRefsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = repositories.FetchGitRefsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.fetch_git_refs(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_fetch_git_refs_rest_unset_required_fields(): + transport = transports.RepositoryManagerRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.fetch_git_refs._get_unset_required_fields({}) + assert set(unset_fields) == (set(("refType",)) & set(("repository",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_fetch_git_refs_rest_interceptors(null_interceptor): + transport = transports.RepositoryManagerRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RepositoryManagerRestInterceptor(), + ) + client = RepositoryManagerClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RepositoryManagerRestInterceptor, "post_fetch_git_refs" + ) as post, mock.patch.object( + transports.RepositoryManagerRestInterceptor, "pre_fetch_git_refs" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = repositories.FetchGitRefsRequest.pb( + repositories.FetchGitRefsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = repositories.FetchGitRefsResponse.to_json( + repositories.FetchGitRefsResponse() + ) + + request = repositories.FetchGitRefsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = repositories.FetchGitRefsResponse() + + client.fetch_git_refs( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_fetch_git_refs_rest_bad_request( + transport: str = "rest", request_type=repositories.FetchGitRefsRequest +): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "repository": "projects/sample1/locations/sample2/connections/sample3/repositories/sample4" + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.fetch_git_refs(request) + + +def test_fetch_git_refs_rest_flattened(): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = repositories.FetchGitRefsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "repository": "projects/sample1/locations/sample2/connections/sample3/repositories/sample4" + } + + # get truthy value for each flattened field + mock_args = dict( + repository="repository_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = repositories.FetchGitRefsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.fetch_git_refs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v2/{repository=projects/*/locations/*/connections/*/repositories/*}:fetchGitRefs" + % client.transport._host, + args[1], + ) + + +def test_fetch_git_refs_rest_flattened_error(transport: str = "rest"): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.fetch_git_refs( + repositories.FetchGitRefsRequest(), + repository="repository_value", + ) + + +def test_fetch_git_refs_rest_error(): + client = RepositoryManagerClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + def test_credentials_transport_error(): # It is an error to provide credentials and a transport instance. transport = transports.RepositoryManagerGrpcTransport( @@ -8542,6 +9106,7 @@ def test_repository_manager_base_transport(): "fetch_read_write_token", "fetch_read_token", "fetch_linkable_repositories", + "fetch_git_refs", "set_iam_policy", "get_iam_policy", "test_iam_permissions", @@ -8866,6 +9431,9 @@ def test_repository_manager_client_transport_session_collision(transport_name): session1 = client1.transport.fetch_linkable_repositories._session session2 = client2.transport.fetch_linkable_repositories._session assert session1 != session2 + session1 = client1.transport.fetch_git_refs._session + session2 = client2.transport.fetch_git_refs._session + assert session1 != session2 def test_repository_manager_grpc_transport_channel(): From 2865a80ad19bba151901aefce55b8a25859532fe Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:58:35 -0400 Subject: [PATCH 7/7] chore(main): release 3.17.0 (#410) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ google/cloud/devtools/cloudbuild/gapic_version.py | 2 +- google/cloud/devtools/cloudbuild_v1/gapic_version.py | 2 +- google/cloud/devtools/cloudbuild_v2/gapic_version.py | 2 +- .../snippet_metadata_google.devtools.cloudbuild.v1.json | 2 +- .../snippet_metadata_google.devtools.cloudbuild.v2.json | 2 +- 7 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 1a1f3484..a2914e52 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "3.16.0" + ".": "3.17.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b41f330..0ef2d367 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ [1]: https://pypi.org/project/google-cloud-build/#history +## [3.17.0](https://github.com/googleapis/python-cloudbuild/compare/v3.16.0...v3.17.0) (2023-06-29) + + +### Features + +* Add GitLabConfig and fetchGitRefs for Cloud Build Repositories ([#412](https://github.com/googleapis/python-cloudbuild/issues/412)) ([f5b1b42](https://github.com/googleapis/python-cloudbuild/commit/f5b1b4236cdfda77f95201c9cf22b74163e7c4f2)) +* Add repositoryevent to buildtrigger ([#409](https://github.com/googleapis/python-cloudbuild/issues/409)) ([a7d5ed3](https://github.com/googleapis/python-cloudbuild/commit/a7d5ed343c0d9924309398cc1769234d33d64449)) + ## [3.16.0](https://github.com/googleapis/python-cloudbuild/compare/v3.15.0...v3.16.0) (2023-04-18) diff --git a/google/cloud/devtools/cloudbuild/gapic_version.py b/google/cloud/devtools/cloudbuild/gapic_version.py index e2e71ada..60a5f14e 100644 --- a/google/cloud/devtools/cloudbuild/gapic_version.py +++ b/google/cloud/devtools/cloudbuild/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.16.0" # {x-release-please-version} +__version__ = "3.17.0" # {x-release-please-version} diff --git a/google/cloud/devtools/cloudbuild_v1/gapic_version.py b/google/cloud/devtools/cloudbuild_v1/gapic_version.py index e2e71ada..60a5f14e 100644 --- a/google/cloud/devtools/cloudbuild_v1/gapic_version.py +++ b/google/cloud/devtools/cloudbuild_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.16.0" # {x-release-please-version} +__version__ = "3.17.0" # {x-release-please-version} diff --git a/google/cloud/devtools/cloudbuild_v2/gapic_version.py b/google/cloud/devtools/cloudbuild_v2/gapic_version.py index e2e71ada..60a5f14e 100644 --- a/google/cloud/devtools/cloudbuild_v2/gapic_version.py +++ b/google/cloud/devtools/cloudbuild_v2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.16.0" # {x-release-please-version} +__version__ = "3.17.0" # {x-release-please-version} diff --git a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json index e379efab..5bfff84e 100644 --- a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json +++ b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-build", - "version": "0.1.0" + "version": "3.17.0" }, "snippets": [ { diff --git a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json index 818d3fc2..e05e7702 100644 --- a/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json +++ b/samples/generated_samples/snippet_metadata_google.devtools.cloudbuild.v2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-build", - "version": "0.1.0" + "version": "3.17.0" }, "snippets": [ {