bazel-lib/lib/private/bats_toolchain.bzl

104 lines
2.5 KiB
Python

"Provide access to a bats executable"
BATS_CORE_VERSIONS = {
"v1.10.0": "a1a9f7875aa4b6a9480ca384d5865f1ccf1b0b1faead6b47aa47d79709a5c5fd",
}
BATS_SUPPORT_VERSIONS = {
"v0.3.0": "7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f",
}
BATS_ASSERT_VERSIONS = {
"v2.1.0": "98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd",
}
BATS_FILE_VERSIONS = {
"v0.4.0": "9b69043241f3af1c2d251f89b4fcafa5df3f05e97b89db18d7c9bdf5731bb27a",
}
BATS_CORE_TEMPLATE = """\
load("@local_config_platform//:constraints.bzl", "HOST_CONSTRAINTS")
load("@aspect_bazel_lib//lib/private:bats_toolchain.bzl", "bats_toolchain")
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
copy_to_directory(
name = "core",
hardlink = "on",
srcs = glob([
"lib/**",
"libexec/**"
]) + ["bin/bats"],
out = "bats-core",
)
bats_toolchain(
name = "toolchain",
core = ":core",
libraries = {libraries}
)
toolchain(
name = "bats_toolchain",
exec_compatible_with = HOST_CONSTRAINTS,
toolchain = ":toolchain",
toolchain_type = "@aspect_bazel_lib//lib:bats_toolchain_type",
)
"""
BATS_LIBRARY_TEMPLATE = """\
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
copy_to_directory(
name = "{name}",
hardlink = "on",
srcs = glob([
"src/**",
"load.bash",
]),
out = "bats-{name}",
visibility = ["//visibility:public"]
)
"""
BatsInfo = provider(
doc = "Provide info for executing bats",
fields = {
"core": "bats executable",
"libraries": "bats helper libraries",
},
)
def _bats_toolchain_impl(ctx):
core = ctx.file.core
default_info = DefaultInfo(
files = depset(ctx.files.core + ctx.files.libraries),
runfiles = ctx.runfiles(ctx.files.core + ctx.files.libraries),
)
batsinfo = BatsInfo(
core = core,
libraries = ctx.files.libraries,
)
# Export all the providers inside our ToolchainInfo
# so the resolved_toolchain rule can grab and re-export them.
toolchain_info = platform_common.ToolchainInfo(
batsinfo = batsinfo,
default = default_info,
)
return [toolchain_info, default_info]
bats_toolchain = rule(
implementation = _bats_toolchain_impl,
attrs = {
"core": attr.label(
doc = "Label to the bats executable",
allow_single_file = True,
mandatory = True,
),
"libraries": attr.label_list(),
},
)