Skip to content

Commit 3d207a4

Browse files
authored
feat: run bazel build for determined rule (#14139)
1 parent 823c1ef commit 3d207a4

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

.generator/cli.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def _determine_bazel_rule(api_path):
5959
str: The discovered Bazel rule.
6060
6161
Raises:
62-
Exception: If the subprocess call fails or returns an empty result.
62+
ValueError: If the subprocess call fails or returns an empty result.
6363
"""
6464
logger.info(f"Determining Bazel rule for api_path: '{api_path}'")
6565
try:
@@ -82,6 +82,30 @@ def _determine_bazel_rule(api_path):
8282
raise ValueError(f"Bazelisk query `{query}` failed") from e
8383

8484

85+
def _build_bazel_target(bazel_rule):
86+
"""Executes `bazelisk build` on a given Bazel rule.
87+
88+
Args:
89+
bazel_rule (str): The Bazel rule to build.
90+
91+
Raises:
92+
ValueError: If the subprocess call fails.
93+
"""
94+
logger.info(f"Executing build for rule: {bazel_rule}")
95+
try:
96+
command = ["bazelisk", "build", bazel_rule]
97+
subprocess.run(
98+
command,
99+
cwd=f"{SOURCE_DIR}/googleapis",
100+
capture_output=True,
101+
text=True,
102+
check=True,
103+
)
104+
logger.info(f"Bazel build for {bazel_rule} rule completed successfully.")
105+
except Exception as e:
106+
raise ValueError(f"Bazel build for {bazel_rule} rule failed.") from e
107+
108+
85109
def handle_generate():
86110
"""The main coordinator for the code generation process.
87111
@@ -104,6 +128,7 @@ def handle_generate():
104128
api_path = api.get("path")
105129
if api_path:
106130
bazel_rule = _determine_bazel_rule(api_path)
131+
_build_bazel_target(bazel_rule)
107132

108133
logger.info(json.dumps(request_data, indent=2))
109134
except Exception as e:

.generator/test_cli.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from cli import (
2424
_read_json_file,
2525
_determine_bazel_rule,
26+
_build_bazel_target,
2627
handle_generate,
2728
handle_build,
2829
handle_configure,
@@ -78,6 +79,29 @@ def test_determine_bazel_rule_success(mocker, caplog):
7879
assert "Found Bazel rule" in caplog.text
7980

8081

82+
def test_build_bazel_target_success(mocker, caplog):
83+
"""
84+
Tests that the build helper logs success when the command runs correctly.
85+
"""
86+
caplog.set_level(logging.INFO)
87+
mocker.patch("cli.subprocess.run", return_value=MagicMock(returncode=0))
88+
_build_bazel_target("mock/bazel:rule")
89+
assert "Bazel build for mock/bazel:rule rule completed successfully" in caplog.text
90+
91+
92+
def test_build_bazel_target_fails(mocker, caplog):
93+
"""
94+
Tests that ValueError is raised if the subprocess command fails.
95+
"""
96+
caplog.set_level(logging.ERROR)
97+
mocker.patch(
98+
"cli.subprocess.run",
99+
side_effect=subprocess.CalledProcessError(1, "cmd", stderr="Build failed"),
100+
)
101+
with pytest.raises(ValueError):
102+
_build_bazel_target("mock/bazel:rule")
103+
104+
81105
def test_determine_bazel_rule_command_fails(mocker, caplog):
82106
"""
83107
Tests that an exception is raised if the subprocess command fails.
@@ -103,6 +127,7 @@ def test_handle_generate_success(caplog, mock_generate_request_file, mocker):
103127
mock_determine_rule = mocker.patch(
104128
"cli._determine_bazel_rule", return_value="mock-rule"
105129
)
130+
mock_build_target = mocker.patch("cli._build_bazel_target")
106131

107132
handle_generate()
108133

0 commit comments

Comments
 (0)