Refactor to properly support bzlmod (#9)
An ergonomic approach to defining a single tool target that resolves to a matching os and CPU architecture variant of the tool.
For a quickstart, see the bzlmod example.
Define a lockfile that references the tools to load:
{ "tool-name": { "binaries": [ { "kind": "file", "url": "https://...", "sha256": "sha256 of the file", "os": "linux|macos", "cpu": "x86_64|arm64" } ] } }
The lockfile supports the following binary kinds:
file: the URL refers to a file to download
sha256: the sha256 of the downloaded filearchive: the URL referes to an archive to download, specify additional options:
file: executable file within the archivesha256: the sha256 of the downloaded archivepkg: the URL refers to a MacOS pkg archive to download, specify additional options:
file: executable file within the archivesha256: the sha256 of the downloaded pkg archiveSave your lockfile and ensure the file is exported using export_files so that it's available to Bazel.
Once your lockfile is defined, load the ruleset in your MODULE.bazel and create a hub that refers to your lockfile:
bazel_dep(name = "rules_multitool", version = "0.0.0") multitool = use_extension("@rules_multitool//multitool:extension.bzl", "multitool") multitool.hub(lockfile = "//:multitool.lock.json") use_repo(multitool, "multitool")
Tools may then be accessed using @multitool//tools/tool-name.