blob: daeae45b43045ecdf68756cc2ba11fe131fdda22 [file] [log] [blame] [edit]
"""Configures transitive deps and registers toolchains required by rules_js.
"""
load(
"@aspect_bazel_lib//lib:repositories.bzl",
_register_copy_directory_toolchains = "register_copy_directory_toolchains",
_register_copy_to_directory_toolchains = "register_copy_to_directory_toolchains",
_register_coreutils_toolchains = "register_coreutils_toolchains",
_register_jq_toolchains = "register_jq_toolchains",
_register_tar_toolchains = "register_tar_toolchains",
_register_yq_toolchains = "register_yq_toolchains",
)
load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains", _DEFAULT_NODE_REPOSITORY = "DEFAULT_NODE_REPOSITORY", _DEFAULT_NODE_VERSION = "DEFAULT_NODE_VERSION")
DEFAULT_NODE_REPOSITORY = _DEFAULT_NODE_REPOSITORY
DEFAULT_NODE_VERSION = _DEFAULT_NODE_VERSION
def rules_js_register_toolchains(
node_download_auth = {},
node_repositories = {},
node_urls = None,
node_version = DEFAULT_NODE_VERSION,
node_version_from_nvmrc = None,
**kwargs):
"""Configures transitive deps and toolchains required by rules_js.
Node.js toolchain comes from [rules_nodejs](https://docs.aspect.build/rulesets/rules_nodejs).
For more details on Node.js toolchain registration see
https://docs.aspect.build/rulesets/rules_nodejs/docs/core#node_repositories.
Additional required toolchains (jq, yq, copy_directory and copy_to_directory) come
from [Aspect bazel-lib](https://github.com/bazel-contrib/bazel-lib).
Args:
node_download_auth: Auth to use for all url requests when downloading Node
Example: {"type": "basic", "login": "<UserName>", "password": "<Password>" }
node_repositories: Custom list of node repositories to use
A dictionary mapping NodeJS versions to sets of hosts and their corresponding (filename, strip_prefix, sha256) tuples.
You should list a node binary for every platform users have, likely Mac, Windows, and Linux.
By default, if this attribute has no items, we'll use a list of all public NodeJS releases.
node_urls: Custom list of URLs to use to download NodeJS
Each entry is a template for downloading a node distribution.
The `{version}` parameter is substituted with the `node_version` attribute,
and `{filename}` with the matching entry from the `node_repositories` attribute.
node_version: The specific version of NodeJS to install
node_version_from_nvmrc: The label of the .nvmrc file containing the version of node
If set then the version is set to the version found in the .nvmrc file.
Requires a minimum rules_nodejs version of 6.1.0.
**kwargs: Other args
"""
if kwargs.pop("register_copy_directory_toolchain", True) and not native.existing_rule("copy_directory_toolchains"):
_register_copy_directory_toolchains()
if kwargs.pop("register_copy_to_directory_toolchain", True) and not native.existing_rule("copy_to_directory_toolchains"):
_register_copy_to_directory_toolchains()
if kwargs.pop("register_coreutils_toolchain", True) and not native.existing_rule("coreutils_toolchains"):
_register_coreutils_toolchains()
if kwargs.pop("register_jq_toolchain", True) and not native.existing_rule("jq_toolchains"):
_register_jq_toolchains()
if kwargs.pop("register_tar_toolchain", True) and not native.existing_rule("tar_toolchains"):
_register_tar_toolchains()
if kwargs.pop("register_yq_toolchain", True) and not native.existing_rule("yq_toolchains"):
_register_yq_toolchains()
if kwargs.pop("register_nodejs_toolchain", True) and not native.existing_rule("{}_toolchains".format(DEFAULT_NODE_REPOSITORY)):
maybe_args = dict()
if node_version_from_nvmrc:
maybe_args["node_version_from_nvmrc"] = node_version_from_nvmrc
nodejs_register_toolchains(
name = DEFAULT_NODE_REPOSITORY,
node_download_auth = node_download_auth,
node_repositories = node_repositories,
node_urls = node_urls,
node_version = node_version,
**maybe_args
)