Skip to content

Commit 9a57d74

Browse files
committed
add bazelisk command
1 parent f0e8bda commit 9a57d74

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

.generator/cli.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import logging
1818
import os
1919
import sys
20+
import subprocess
2021

2122
logger = logging.getLogger()
2223

@@ -37,14 +38,40 @@ def handle_configure(dry_run=False):
3738

3839
def handle_generate(dry_run=False):
3940

40-
# Read a generate-request.json file
4141
if not dry_run:
42+
43+
# Read generate-request.json file
4244
try:
4345
request_data = _read_json_file(f"{LIBRARIAN_DIR}/{GENERATE_REQUEST_FILE}")
4446
except Exception as e:
4547
logger.error(f"failed to read {LIBRARIAN_DIR}/{GENERATE_REQUEST_FILE}: {e}")
4648
sys.exit(1)
4749

50+
library_id = request_data.get("id")
51+
if not library_id:
52+
logger.error("Request file is missing required 'id' field.")
53+
sys.exit(1)
54+
55+
for api in request_data.get("apis", []):
56+
api_path = api.get("path")
57+
if api_path:
58+
try:
59+
query = f'filter("-py$", kind("rule", //{api_path}/...:*))'
60+
command = ["bazelisk", "query", query]
61+
result = subprocess.run(
62+
command, capture_output=True, text=True, check=True
63+
)
64+
65+
bazel_rule = result.stdout.strip()
66+
if not bazel_rule:
67+
logger.error("Bazel query returned an empty result.")
68+
sys.exit(1)
69+
70+
logger.info(f"Found Bazel rule: {bazel_rule}")
71+
except Exception as e:
72+
logger.error(f"Bazelisk query failed: {e}")
73+
sys.exit(1)
74+
4875
logger.info(json.dumps(request_data, indent=2))
4976

5077
# TODO(https://github.com/googleapis/librarian/issues/448): Implement generate command.

.generator/test_cli.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import json
1818
import logging
1919

20-
from unittest.mock import mock_open
20+
from unittest.mock import mock_open, MagicMock
2121

2222
from cli import (
2323
_read_json_file,
@@ -59,16 +59,30 @@ def test_handle_generate_dry_run():
5959
handle_generate(dry_run=True)
6060

6161

62-
def test_handle_generate_success(caplog, mock_generate_request_file):
62+
def test_handle_generate_success(caplog, mock_generate_request_file, mocker):
6363
"""
6464
Tests the successful execution path of handle_generate.
6565
"""
6666
caplog.set_level(logging.INFO)
6767

68+
mock_query_result = MagicMock(
69+
stdout="//google/cloud/language/v1:google-cloud-language-v1-py\n",
70+
returncode=0
71+
)
72+
73+
mock_subprocess = mocker.patch(
74+
"cli.subprocess.run",
75+
side_effect=[mock_query_result]
76+
)
77+
78+
6879
handle_generate(dry_run=False)
6980

81+
#captured = capsys.readouterr()
7082
assert "google-cloud-language" in caplog.text
83+
assert "Found Bazel rule: //google/cloud/language/v1:google-cloud-language-v1-py" in caplog.text
7184
assert "'generate' command executed." in caplog.text
85+
assert mock_subprocess.call_count == 1
7286

7387

7488
def test_handle_build_dry_run():

0 commit comments

Comments
 (0)