Skip to content

Commit 4653b5b

Browse files
committed
Merge branch 'main' of https://github.com/googleapis/google-cloud-python into add-build-command
2 parents 8178b9f + 6c02b3b commit 4653b5b

File tree

368 files changed

+148875
-7951
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

368 files changed

+148875
-7951
lines changed

.generator/Dockerfile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ RUN apt-get update && \
2222
# For downloading secure files
2323
wget \
2424
ca-certificates \
25+
# For running bazelisk commands
26+
openjdk-17-jdk \
2527
# --- Critical libraries for a complete Python build ---
2628
libssl-dev \
2729
zlib1g-dev \
@@ -34,6 +36,7 @@ RUN apt-get update && \
3436
rm -rf /var/lib/apt/lists/*
3537

3638
# Set up environment variables for tool versions to make updates easier.
39+
ENV BAZELISK_VERSION=v1.26.0
3740

3841

3942
RUN for PYTHON_VERSION in 3.9.23 3.10.18 3.11.13 3.12.11 3.13.5; do \
@@ -78,7 +81,9 @@ RUN python3.13 -m pip
7881

7982
# TODO(https://github.com/googleapis/librarian/issues/904): Install protoc for gencode.
8083

81-
# TODO(https://github.com/googleapis/librarian/issues/903): Install Bazelisk for building a client library.
84+
# Install Bazelisk
85+
RUN wget https://github.com/bazelbuild/bazelisk/releases/download/${BAZELISK_VERSION}/bazelisk-linux-amd64 -O /usr/local/bin/bazelisk && \
86+
chmod +x /usr/local/bin/bazelisk
8287

8388
# TODO(https://github.com/googleapis/librarian/issues/902): Create a dedicate non-root user and
8489
# switch to the non-root user to run subsequent commands.

.generator/cli.py

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
import logging
1818
import subprocess
1919
import sys
20+
import subprocess
2021

2122
logger = logging.getLogger()
2223

2324
LIBRARIAN_DIR = "librarian"
2425
GENERATE_REQUEST_FILE = "generate-request.json"
26+
SOURCE_DIR = "source"
2527

2628

2729
def _read_json_file(path):
@@ -47,6 +49,39 @@ def handle_configure():
4749
logger.info("'configure' command executed.")
4850

4951

52+
def _determine_bazel_rule(api_path):
53+
"""Executes a `bazelisk query` to find a Bazel rule.
54+
55+
Args:
56+
api_path (str): The API path to query for.
57+
58+
Returns:
59+
str: The discovered Bazel rule.
60+
61+
Raises:
62+
Exception: If the subprocess call fails or returns an empty result.
63+
"""
64+
logger.info(f"Determining Bazel rule for api_path: '{api_path}'")
65+
try:
66+
query = f'filter("-py$", kind("rule", //{api_path}/...:*))'
67+
command = ["bazelisk", "query", query]
68+
result = subprocess.run(
69+
command,
70+
cwd=f"{SOURCE_DIR}/googleapis",
71+
capture_output=True,
72+
text=True,
73+
check=True,
74+
)
75+
bazel_rule = result.stdout.strip()
76+
if not bazel_rule:
77+
raise ValueError(f"Bazelisk query `{query}` returned an empty bazel rule.")
78+
79+
logger.info(f"Found Bazel rule: {bazel_rule}")
80+
return bazel_rule
81+
except Exception as e:
82+
raise ValueError(f"Bazelisk query `{query}` failed") from e
83+
84+
5085
def handle_generate():
5186
"""The main coordinator for the code generation process.
5287
@@ -61,12 +96,18 @@ def handle_generate():
6196
# Read a generate-request.json file
6297
try:
6398
request_data = _read_json_file(f"{LIBRARIAN_DIR}/{GENERATE_REQUEST_FILE}")
64-
except Exception as e:
65-
raise ValueError(
66-
f"failed to read {LIBRARIAN_DIR}/{GENERATE_REQUEST_FILE}"
67-
) from e
99+
library_id = request_data.get("id")
100+
if not library_id:
101+
raise ValueError("Request file is missing required 'id' field.")
102+
103+
for api in request_data.get("apis", []):
104+
api_path = api.get("path")
105+
if api_path:
106+
bazel_rule = _determine_bazel_rule(api_path)
68107

69-
logger.info(json.dumps(request_data, indent=2))
108+
logger.info(json.dumps(request_data, indent=2))
109+
except Exception as e:
110+
raise ValueError("Generation failed.") from e
70111

71112
# TODO(https://github.com/googleapis/librarian/issues/448): Implement generate command and update docstring.
72113
logger.info("'generate' command executed.")

.generator/test_cli.py

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
import pytest
1717
import json
1818
import logging
19+
import subprocess
1920

20-
from unittest.mock import mock_open
21+
from unittest.mock import mock_open, MagicMock
2122

2223
from cli import (
2324
_read_json_file,
25+
_determine_bazel_rule,
2426
handle_generate,
2527
handle_build,
2628
handle_configure,
@@ -60,16 +62,51 @@ def test_handle_configure_success(caplog, mock_generate_request_file):
6062
assert "'configure' command executed." in caplog.text
6163

6264

63-
def test_handle_generate_success(caplog, mock_generate_request_file):
65+
def test_determine_bazel_rule_success(mocker, caplog):
66+
"""
67+
Tests the happy path of _determine_bazel_rule.
68+
"""
69+
caplog.set_level(logging.INFO)
70+
mock_result = MagicMock(
71+
stdout="//google/cloud/language/v1:google-cloud-language-v1-py\n"
72+
)
73+
mocker.patch("cli.subprocess.run", return_value=mock_result)
74+
75+
rule = _determine_bazel_rule("google/cloud/language/v1")
76+
77+
assert rule == "//google/cloud/language/v1:google-cloud-language-v1-py"
78+
assert "Found Bazel rule" in caplog.text
79+
80+
81+
def test_determine_bazel_rule_command_fails(mocker, caplog):
82+
"""
83+
Tests that an exception is raised if the subprocess command fails.
84+
"""
85+
caplog.set_level(logging.INFO)
86+
mocker.patch(
87+
"cli.subprocess.run",
88+
side_effect=subprocess.CalledProcessError(1, "cmd", stderr="Bazel error"),
89+
)
90+
91+
with pytest.raises(ValueError):
92+
_determine_bazel_rule("google/cloud/language/v1")
93+
94+
assert "Found Bazel rule" not in caplog.text
95+
96+
97+
def test_handle_generate_success(caplog, mock_generate_request_file, mocker):
6498
"""
6599
Tests the successful execution path of handle_generate.
66100
"""
67101
caplog.set_level(logging.INFO)
68102

103+
mock_determine_rule = mocker.patch(
104+
"cli._determine_bazel_rule", return_value="mock-rule"
105+
)
106+
69107
handle_generate()
70108

71-
assert "google-cloud-language" in caplog.text
72-
assert "'generate' command executed." in caplog.text
109+
mock_determine_rule.assert_called_once_with("google/cloud/language/v1")
73110

74111

75112
def test_handle_generate_fail(caplog):

.release-please-manifest.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
"packages/google-cloud-maintenance-api": "0.1.0",
115115
"packages/google-cloud-managed-identities": "1.12.2",
116116
"packages/google-cloud-managedkafka": "0.1.12",
117+
"packages/google-cloud-managedkafka-schemaregistry": "0.0.0",
117118
"packages/google-cloud-media-translation": "0.11.17",
118119
"packages/google-cloud-memcache": "1.12.2",
119120
"packages/google-cloud-memorystore": "0.1.3",

CHANGELOG.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,13 @@ Changelogs
5858
- [google-cloud-cloudcontrolspartner==0.2.7](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-cloudcontrolspartner/CHANGELOG.md)
5959
- [google-cloud-commerce-consumer-procurement==0.2.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-commerce-consumer-procurement/CHANGELOG.md)
6060
- [google-cloud-common==1.5.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-common/CHANGELOG.md)
61-
- [google-cloud-compute-v1beta==0.1.3](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-compute-v1beta/CHANGELOG.md)
62-
- [google-cloud-compute==1.32.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-compute/CHANGELOG.md)
61+
- [google-cloud-compute-v1beta==0.1.4](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-compute-v1beta/CHANGELOG.md)
62+
- [google-cloud-compute==1.33.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-compute/CHANGELOG.md)
6363
- [google-cloud-confidentialcomputing==0.4.18](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-confidentialcomputing/CHANGELOG.md)
6464
- [google-cloud-config==0.1.19](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-config/CHANGELOG.md)
6565
- [google-cloud-configdelivery==0.1.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-configdelivery/CHANGELOG.md)
6666
- [google-cloud-contact-center-insights==1.23.3](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-contact-center-insights/CHANGELOG.md)
67-
- [google-cloud-container==2.57.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-container/CHANGELOG.md)
67+
- [google-cloud-container==2.58.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-container/CHANGELOG.md)
6868
- [google-cloud-containeranalysis==2.18.1](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-containeranalysis/CHANGELOG.md)
6969
- [google-cloud-contentwarehouse==0.7.16](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-contentwarehouse/CHANGELOG.md)
7070
- [google-cloud-data-fusion==1.13.3](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-data-fusion/CHANGELOG.md)
@@ -98,7 +98,7 @@ Changelogs
9898
- [google-cloud-financialservices==0.1.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-financialservices/CHANGELOG.md)
9999
- [google-cloud-functions==1.20.4](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-functions/CHANGELOG.md)
100100
- [google-cloud-gdchardwaremanagement==0.1.12](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-gdchardwaremanagement/CHANGELOG.md)
101-
- [google-cloud-geminidataanalytics==0.1.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-geminidataanalytics/CHANGELOG.md)
101+
- [google-cloud-geminidataanalytics==0.2.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-geminidataanalytics/CHANGELOG.md)
102102
- [google-cloud-gke-backup==0.5.19](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-gke-backup/CHANGELOG.md)
103103
- [google-cloud-gke-connect-gateway==0.10.4](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-gke-connect-gateway/CHANGELOG.md)
104104
- [google-cloud-gke-hub==1.17.3](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-gke-hub/CHANGELOG.md)
@@ -111,9 +111,9 @@ Changelogs
111111
- [google-cloud-kms-inventory==0.2.15](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-kms-inventory/CHANGELOG.md)
112112
- [google-cloud-kms==3.5.1](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-kms/CHANGELOG.md)
113113
- [google-cloud-language==2.17.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-language/CHANGELOG.md)
114-
- [google-cloud-licensemanager==null](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-licensemanager/CHANGELOG.md)
114+
- [google-cloud-licensemanager==0.1.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-licensemanager/CHANGELOG.md)
115115
- [google-cloud-life-sciences==0.9.18](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-life-sciences/CHANGELOG.md)
116-
- [google-cloud-lustre==0.1.1](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-lustre/CHANGELOG.md)
116+
- [google-cloud-lustre==0.1.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-lustre/CHANGELOG.md)
117117
- [google-cloud-maintenance-api==0.1.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-maintenance-api/CHANGELOG.md)
118118
- [google-cloud-managed-identities==1.12.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-managed-identities/CHANGELOG.md)
119119
- [google-cloud-managedkafka==0.1.12](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-managedkafka/CHANGELOG.md)
@@ -156,7 +156,7 @@ Changelogs
156156
- [google-cloud-redis==2.18.1](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-redis/CHANGELOG.md)
157157
- [google-cloud-resource-manager==1.14.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-resource-manager/CHANGELOG.md)
158158
- [google-cloud-retail==2.3.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-retail/CHANGELOG.md)
159-
- [google-cloud-run==0.10.18](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-run/CHANGELOG.md)
159+
- [google-cloud-run==0.10.19](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-run/CHANGELOG.md)
160160
- [google-cloud-scheduler==2.16.1](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-scheduler/CHANGELOG.md)
161161
- [google-cloud-secret-manager==2.24.0](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-secret-manager/CHANGELOG.md)
162162
- [google-cloud-securesourcemanager==0.1.15](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-securesourcemanager/CHANGELOG.md)
@@ -196,7 +196,7 @@ Changelogs
196196
- [google-cloud-workflows==1.18.2](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-workflows/CHANGELOG.md)
197197
- [google-cloud-workstations==0.5.15](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-workstations/CHANGELOG.md)
198198
- [google-geo-type==0.3.13](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-geo-type/CHANGELOG.md)
199-
- [google-maps-addressvalidation==0.3.19](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-maps-addressvalidation/CHANGELOG.md)
199+
- [google-maps-addressvalidation==0.3.20](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-maps-addressvalidation/CHANGELOG.md)
200200
- [google-maps-areainsights==0.1.8](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-maps-areainsights/CHANGELOG.md)
201201
- [google-maps-fleetengine-delivery==0.2.13](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-maps-fleetengine-delivery/CHANGELOG.md)
202202
- [google-maps-fleetengine==0.2.11](https://github.com/googleapis/google-cloud-python/tree/main/packages/google-maps-fleetengine/CHANGELOG.md)

packages/google-apps-chat/google/apps/chat/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
from google.apps.chat_v1.types.annotation import (
2727
Annotation,
2828
AnnotationType,
29+
CalendarEventLinkData,
2930
ChatSpaceLinkData,
3031
CustomEmojiMetadata,
3132
DriveLinkData,
33+
MeetSpaceLinkData,
3234
RichLinkMetadata,
3335
SlashCommandMetadata,
3436
UserMentionMetadata,
@@ -151,9 +153,11 @@
151153
"ChatServiceAsyncClient",
152154
"ActionStatus",
153155
"Annotation",
156+
"CalendarEventLinkData",
154157
"ChatSpaceLinkData",
155158
"CustomEmojiMetadata",
156159
"DriveLinkData",
160+
"MeetSpaceLinkData",
157161
"RichLinkMetadata",
158162
"SlashCommandMetadata",
159163
"UserMentionMetadata",

packages/google-apps-chat/google/apps/chat/gapic_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
#
16-
__version__ = "0.2.6" # {x-release-please-version}
16+
__version__ = "0.0.0" # {x-release-please-version}

packages/google-apps-chat/google/apps/chat_v1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
from .types.annotation import (
2424
Annotation,
2525
AnnotationType,
26+
CalendarEventLinkData,
2627
ChatSpaceLinkData,
2728
CustomEmojiMetadata,
2829
DriveLinkData,
30+
MeetSpaceLinkData,
2931
RichLinkMetadata,
3032
SlashCommandMetadata,
3133
UserMentionMetadata,
@@ -150,6 +152,7 @@
150152
"AttachedGif",
151153
"Attachment",
152154
"AttachmentDataRef",
155+
"CalendarEventLinkData",
153156
"CardWithId",
154157
"ChatServiceClient",
155158
"ChatSpaceLinkData",
@@ -200,6 +203,7 @@
200203
"ListSpacesRequest",
201204
"ListSpacesResponse",
202205
"MatchedUrl",
206+
"MeetSpaceLinkData",
203207
"Membership",
204208
"MembershipBatchCreatedEventData",
205209
"MembershipBatchDeletedEventData",

packages/google-apps-chat/google/apps/chat_v1/gapic_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515
#
16-
__version__ = "0.2.6" # {x-release-please-version}
16+
__version__ = "0.0.0" # {x-release-please-version}

packages/google-apps-chat/google/apps/chat_v1/types/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
from .annotation import (
1818
Annotation,
1919
AnnotationType,
20+
CalendarEventLinkData,
2021
ChatSpaceLinkData,
2122
CustomEmojiMetadata,
2223
DriveLinkData,
24+
MeetSpaceLinkData,
2325
RichLinkMetadata,
2426
SlashCommandMetadata,
2527
UserMentionMetadata,
@@ -137,9 +139,11 @@
137139
__all__ = (
138140
"ActionStatus",
139141
"Annotation",
142+
"CalendarEventLinkData",
140143
"ChatSpaceLinkData",
141144
"CustomEmojiMetadata",
142145
"DriveLinkData",
146+
"MeetSpaceLinkData",
143147
"RichLinkMetadata",
144148
"SlashCommandMetadata",
145149
"UserMentionMetadata",

0 commit comments

Comments
 (0)