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,
 )