我想实现一个starlark存储库规则,它从WORKSPACE目录中获取一个tar.gz(我将文件放在git LFS中)并提取它,然后将提取的内容用作外部存储库(即,提取文件,然后相当于local_repository()
在那个目录上)。
我尝试了以下方法:
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "workspace_and_buildfile", "patch")
def _local_archive_impl(repository_ctx):
if repository_ctx.attr.build_file and repository_ctx.attr.build_file_content:
fail("Only one of build_file and build_file_content can be provided.")
repository_ctx.extract(repository_ctx.path(repository_ctx.attr.archive).basename, "", repository_ctx.attr.strip_prefix)
patch(repository_ctx)
workspace_and_buildfile(repository_ctx)
但似乎这种方法不起作用,因为 Starlark 存储库规则似乎无法访问 WORKSPACE 目录(?!?)。
我还尝试了https://groups.google.com/forum/m/#!topic/bazel-discuss/UXvp0rksRMM中提到的方法,即:
def _impl(ctx):
ctx.execute(["tar", "zxf", ctx.attr.archive)
local_archive = repository_rule(
implementation = _impl,
local = True,
attrs = {'archive': attr.string()}
)
但这也不起作用:(。