我有一个使用 bazel 构建一堆 Python 代码的仓库。我想在构建中引入各种风格的静态分析,如果这些静态分析抛出错误,构建会失败。做这个的最好方式是什么?
例如,我想声明如下内容:
py_library_with_static_analysis(
name = "foo",
srcs = ["foo.py"],
)
py_library_with_static_analysis(
name = "bar",
srcs = ["bar.py"],
deps = [":foo"],
)
如果 foo.py 中存在 mypy/flake/etc 错误,则在构建文件中并使其出错。我希望能够逐步做到这一点,一次将库/二进制文件转换为静态分析一个目标。我不确定是否应该通过新规则、宏、方面或其他方式来执行此操作。
本质上,我想我是在问如何在构建 py_binary/py_library 时运行附加命令,如果该命令失败则失败。
我可以创建自己的 py_library 规则版本并让它在实现中运行静态分析,但这似乎很容易出错(我的猜测是 native.py_library 相当复杂?)而且似乎没有成为在自定义规则中实例化 native.py_library 的一种方式。
我也玩过一些宏,但也无法让它工作。我认为我的问题是宏实际上并没有指定新命令,只有新目标,我不知道如何使静态分析目标与我感兴趣的 py_library/py_binary 一起生成。