Export a list of all tools in a hub as a Starlark constant (#75)
This makes it easy to consume all available tools in other rules, such
as `bazel_env.bzl`.
Strict visibility between modules using rules_multitool is preserved by
requiring a `load` from the hub repo, which explicitly doesn't allow
discovery of hub names.
Fixes https://github.com/buildbuddy-io/bazel_env.bzl/issues/32
diff --git a/multitool/private/hub_repo_template/tools.bzl.template b/multitool/private/hub_repo_template/tools.bzl.template
index a1c54d4..84b47bd 100644
--- a/multitool/private/hub_repo_template/tools.bzl.template
+++ b/multitool/private/hub_repo_template/tools.bzl.template
@@ -1,4 +1,8 @@
load("@rules_multitool//multitool/private:multitool.bzl", "tool_repo")
+TOOLS = {
+{tool_labels}
+}
+
def register_tools():
{tool_repos}
diff --git a/multitool/private/multitool.bzl b/multitool/private/multitool.bzl
index c472eac..63ca36f 100644
--- a/multitool/private/multitool.bzl
+++ b/multitool/private/multitool.bzl
@@ -208,8 +208,8 @@
"{defines}": "\n".join(defines),
})
- # workspace compat
- templates.hub(rctx, "tools.bzl", templates.workspace_substitutions(rctx.attr.name, tools))
+ # workspace compat & list of all tools
+ templates.hub(rctx, "tools.bzl", templates.tools_substitutions(rctx.attr.name, tools))
_multitool_hub = repository_rule(
attrs = {
diff --git a/multitool/private/templates.bzl b/multitool/private/templates.bzl
index 6329e59..d77878b 100644
--- a/multitool/private/templates.bzl
+++ b/multitool/private/templates.bzl
@@ -38,6 +38,12 @@
} | (substitutions or {}),
)
+def _renter_tool_labels(tools):
+ return "\n".join([
+ " \"{tool_name}\": Label(\"//tools/{tool_name}\"),".format(tool_name = tool_name)
+ for tool_name in tools.keys()
+ ])
+
def _render_tool_repo(hub_name, tool_name, binary):
name = "{name}.{tool_name}.{os}_{cpu}".format(
name = hub_name,
@@ -66,8 +72,9 @@
for binary in tool["binaries"]
])
-def _workspace_subs(hub_name, tools):
+def _tools_subs(hub_name, tools):
return {
+ "{tool_labels}": _renter_tool_labels(tools),
"{tool_repos}": _render_tool_repos(hub_name, tools),
}
@@ -76,5 +83,5 @@
hub_tool = _render_hub_tool,
tool = _render_tool,
tool_tool = _render_tool_tool,
- workspace_substitutions = _workspace_subs,
+ tools_substitutions = _tools_subs,
)