104 lines
2.5 KiB
Python
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(),
|
||
|
},
|
||
|
)
|