重新安排文件夹结构的数据在sh_binary和sh_test?



假设我有这样的源文件:

.
├── config.json
└── test.sh

我想用这些文件创建一个sh_test

然而,当测试运行时,test.sh期望config.json在不同的地方:

.
├── configs
│   └── prod.json    # config.json
└── test.sh

我不想重新安排我的源代码以满足test.sh,我也不想添加一堆文件复制/移动到test.sh的开始。

是否有可能告诉Bazel如何以任意方式安排test.sh的文件?

理想的语法是这样的:

sh_test(
name = "test",
srcs = [ "test.sh" ],
data = {  
"configs/prod.json": "config.json",
},
)

使用genrule:

genrule(
name = "prod_json",
srcs = ["config.json"],
outs = ["configs/prod.json"],
cmd = "cp $< $@",
)
sh_test(
name = "test",
srcs = ["test.sh"],
data = ["configs/prod.json"],
)

或者,您可以编写一个宏来匹配问题中的语法:

# BUILD
load(":sh_test.bzl", "sh_test")
sh_test(
name = "test",
srcs = ["test.sh"],
data = {
"configs/test.json": "config_test.json",
"configs/staging.json": "config_staging.json",
"configs/prod.json": "config.json",
}
)
# sh_test.bzl
def sh_test(name, data = {}, **kwargs):
datas = []
for dest, src in data.items():
genrule_name = dest.replace("/", "_")
native.genrule(
name = genrule_name,
srcs = [src],
outs = [dest],
cmd = "cp $< $@",
)
datas.append(genrule_name)
native.sh_binary(
name = name,
data = datas,
**kwargs
)

相关内容

  • 没有找到相关文章

最新更新