-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
external_data_workspace_test.bzl
80 lines (75 loc) · 2.62 KB
/
external_data_workspace_test.bzl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
load(
"//tools/external_data:expose_all_files.bzl",
"recursive_filegroup",
)
load(
"//tools/external_data/test:workspace_test.bzl",
"workspace_test",
"CMD_DEFAULT",
)
_workspace_list = [
"external_data_pkg_test",
]
_upstream_files = [
"//tools/external_data:all_files_recursive",
]
def external_data_workspace_test(
name,
args = [CMD_DEFAULT],
data = []):
package = "@{}//".format(name)
package_files = package + ":all_files_recursive"
pkg_reldir = "external/" + name
script = "external_data_workspace_test.sh"
workspace_test(
name = name,
args = [
"$(location {})".format(script),
pkg_reldir,
] + args,
data = [
package_files,
script,
] + _upstream_files + data,
)
def external_data_lint_files():
"""
Creates a recursive_filegroup "all_${type}_files" (where `type` can be
"bazel_lint" or "python_lint"), such that they can be consumed by
`add_lint_tests`.
"""
packages = ["//tools/external_data"]
for workspace in _workspace_list:
package = "@" + workspace + "//"
# Prepare to expose all files recursively.
packages.append(package)
# Join files for linting, to permit $(locations ...) expansion directly
# on transitive file dependencies.
for name in ["bazel_lint_files", "python_lint_files"]:
data = [package + ":" + name + "_recursive" for package in packages]
recursive_filegroup(
name = "all_" + name,
data = data,
)
def external_data_test_repositories(workspace_dir):
"""
Adds test workspace directories as repositories so that their files can be
consumed and their tests can be ignored by `bazel test ...` from Drake.
"""
# WARNING: Bazel also craps out here if `workspace_dir + path` is used
# rather than just `path`.
# N.B. This error is *stateful*. You will get different behavior depending
# on what has been built / run previously in Bazel. In one mode, the error
# will be:
# Encountered error while [...]
# /home/${USER}/.cache/bazel/_bazel_${USER}/${HASH}/external/external_data_pkg_test # noqa
# must be an existing directory
# In another mode, you will get Java errors:
# java.lang.IllegalArgumentException: PathFragment
# tools/external_data/workspace is not beneath
# /home/${USER}/${WORKSPACE_DIR}/tools/external_data/workspace
for workspace in _workspace_list:
native.local_repository(
name = workspace,
path = "tools/external_data/test/" + workspace,
)