【问题标题】:Bazel: how to get access to srcs of a filegroup?Bazel:如何访问文件组的 src?
【发布时间】:2020-10-28 10:22:20
【问题描述】:

我在“root/html_files/*.html”目录中有一些 html 文件。我想迭代这些 html 文件并在它们上运行一些 bazel 规则,从“root/tests/”目录。 因此,我创建了这些 html 文件的文件组,并尝试在“root/tests/”目录中访问它们,但这不起作用。 不知道有没有可能?

我在“root/”目录下的BUILD文件:

HTMLS_LIST = glob(["html_files/*.html",]) 文件组( name = "html_files", srcs = HTMLS_LIST, 可见性= [“//可见性:公共”],)

我在“root/tests/”目录下的BUILD文件:

load("//tests:automation_test.bzl", "make_and_run_html_tests") make_and_run_html_tests( 名称 = 'test_all_htmls', srcs = ['test/automation_test.py'], html_files = '//:html_files')

我的 bzl 文件在“root/tests/”目录下:

def make_and_run_html_tests(名称,html_files,srcs): 测试 = [] for html_files in html_files: # 我想在这里迭代 html 文件组的来源 文件夹 = html_file.split("/") 文件名 = 文件夹[-1].split(".")[0] test_rule_name = 'test_' + 文件名 + '_file' 本机.py_test( 名称 = test_rule_name, srcs = srcs, 主 = srcs[0], 数据 = [ html_file, ], args = [html_file], ) testname = ":" + test_rule_name 测试。附加(测试名称) native.test_suite( 名字=名字, 测试=测试, )

还有我在“root/tests/”目录下的python unittest文件:

导入系统 导入编解码器 导入单元测试 类TestHtmlDocumetns(unittest.TestCase): 默认设置(自我): self.html_file_path = sys.argv[1] def test_html_file(self): fid = codecs.open(self.html_file_path, 'r') 打印(fid.read()) self.assertTrue(fid) 如果 __name__ == '__main__': unittest.main(argv=[sys.argv[1]])

【问题讨论】:

  • 您能否发布您创建的BUILD 文件的内容以及它在树中的什么位置?您要运行哪些特定规则,例如是genrule 还是sh_* 规则还是其他什么?
  • 我添加了所有内容。

标签: bazel


【解决方案1】:

您无法从类似的宏中访问对另一个文件组/规则中的文件的引用。您需要创建一个规则并通过ctx.files attr 访问它们

但是,如果要删除文件组,则可以对其进行迭代,并将 glob 直接传递给宏:

HTMLS_LIST = glob(["html_files/*.html"])

make_and_run_html_tests(
  name = 'test_all_htmls',
  srcs = ['test/automation_test.py'],
  html_files = HTMLS_LIST
)

在扩展宏之前将 glob 解析为数组

【讨论】:

  • 您正在从目录 'root/tests/' 调用 glob,这将返回一个空列表。
猜你喜欢
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2017-10-03
  • 2019-04-30
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多