Skip to content

Commit 06becaa

Browse files
committed
[py] Replace devtools genrule with proper generate_devtools rule.
The existing genrule does not handle directories properly.
1 parent 29e1cf6 commit 06becaa

File tree

6 files changed

+62
-36
lines changed

6 files changed

+62
-36
lines changed

WORKSPACE

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,6 @@ rules_closure_toolchains()
231231

232232
http_archive(
233233
name = "rules_pkg",
234-
patch_args = [
235-
"-p1",
236-
],
237-
patches = [
238-
"//py:rules_pkg_tree.patch",
239-
],
240234
urls = [
241235
"https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.8.0/rules_pkg-0.8.0.tar.gz",
242236
"https://github.com/bazelbuild/rules_pkg/releases/download/0.8.0/rules_pkg-0.8.0.tar.gz",

py/BUILD.bazel

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ load("@rules_python//python:defs.bzl", "py_binary", "py_library")
44
load("@rules_python//python:packaging.bzl", "py_package", "py_wheel")
55
load("@py_dev_requirements//:requirements.bzl", "requirement")
66
load("//common:defs.bzl", "copy_file")
7-
load("//py:defs.bzl", "py_test_suite")
7+
load("//py:defs.bzl", "generate_devtools", "py_test_suite")
88
load("//py/private:browsers.bzl", "BROWSERS")
99
load("//py/private:import.bzl", "py_import")
1010
load("@rules_python//python:pip.bzl", "compile_pip_requirements")
@@ -273,18 +273,14 @@ py_binary(
273273
deps = [requirement("inflection")],
274274
)
275275

276-
[genrule(
277-
name = "create-cdp-srcs-" + n,
278-
srcs = [
279-
"//common/devtools/chromium/" + n + ":browser_protocol",
280-
"//common/devtools/chromium/" + n + ":js_protocol",
281-
],
282-
outs = ["selenium/webdriver/common/devtools/" + n],
283-
cmd = "$(location :generate) $(location //common/devtools/chromium/" + n + ":browser_protocol) $(location //common/devtools/chromium/" + n + ":js_protocol) $@",
284-
tools = [
285-
":generate",
286-
],
287-
) for n in BROWSER_VERSIONS]
276+
[generate_devtools(
277+
name = "create-cdp-srcs-{}".format(devtools_version),
278+
outdir = "selenium/webdriver/common/devtools/{}".format(devtools_version),
279+
browser_protocol = "//common/devtools/chromium/{}:browser_protocol".format(devtools_version),
280+
generator = ":generate",
281+
js_protocol = "//common/devtools/chromium/{}:js_protocol".format(devtools_version),
282+
protocol_version = devtools_version,
283+
) for devtools_version in BROWSER_VERSIONS]
288284

289285
py_test_suite(
290286
name = "unit",

py/defs.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
load("//py/private:generate_devtools.bzl", _generate_devtools = "generate_devtools")
12
load("//py/private:import.bzl", _py_import = "py_import")
23
load("//py/private:pytest.bzl", _pytest_test = "pytest_test")
34
load("//py/private:suite.bzl", _py_test_suite = "py_test_suite")
45

6+
generate_devtools = _generate_devtools
57
pytest_test = _pytest_test
68
py_import = _py_import
79
py_test_suite = _py_test_suite

py/generate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -988,7 +988,7 @@ def main(browser_protocol_path, js_protocol_path, output_path):
988988
browser_protocol_path,
989989
js_protocol_path,
990990
]
991-
output_path.mkdir(parents=True)
991+
output_path.mkdir(parents=True, exist_ok=True)
992992

993993
# Generate util.py
994994
util_path = output_path / "util.py"

py/private/generate_devtools.bzl

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
def _generate_devtools_impl(ctx):
2+
outdir = ctx.actions.declare_directory("{}".format(ctx.attr.outdir))
3+
4+
args = ctx.actions.args()
5+
args.add(ctx.attr.browser_protocol.files.to_list()[0])
6+
args.add(ctx.attr.js_protocol.files.to_list()[0])
7+
args.add(outdir.path)
8+
9+
ctx.actions.run(
10+
executable = ctx.executable.generator,
11+
progress_message = "Generating {} DevTools Protocol bindings for Python".format(ctx.attr.protocol_version),
12+
arguments = [args],
13+
outputs = [
14+
outdir,
15+
],
16+
inputs = [
17+
ctx.file.browser_protocol,
18+
ctx.file.js_protocol,
19+
],
20+
use_default_shell_env = True,
21+
)
22+
23+
return DefaultInfo(
24+
files = depset([outdir]),
25+
runfiles = ctx.runfiles(files = [outdir]),
26+
)
27+
28+
generate_devtools = rule(
29+
implementation = _generate_devtools_impl,
30+
attrs = {
31+
"protocol_version": attr.string(
32+
mandatory = True,
33+
default = "",
34+
),
35+
"browser_protocol": attr.label(
36+
mandatory = True,
37+
allow_single_file = True,
38+
),
39+
"js_protocol": attr.label(
40+
mandatory = True,
41+
allow_single_file = True,
42+
),
43+
"outdir": attr.string(),
44+
"generator": attr.label(
45+
executable = True,
46+
cfg = "exec",
47+
),
48+
"deps": attr.label_list(),
49+
},
50+
)

py/rules_pkg_tree.patch

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)