我可以将静态分析添加到py_binary或py_library规则中吗



我有一个repo,它使用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_brary相当复杂?(,而且似乎没有办法在自定义规则中实例化native.py_brary。

我也玩过一些宏,但也没能让它发挥作用。我认为我的问题是,宏实际上并没有指定新的命令,只有新的目标,我不知道如何使静态分析目标与我感兴趣的py_library/py_binary一起构建。

添加隐式测试目标的宏并不是一个坏主意:当您运行bazel test //...时,测试目标将自动拾取,您可以在门控CI中执行此操作,以防止不完美的代码合并。

Bazel支持BUILD prelude(文档不足(,您可以使用它来替换所有py_binary、py_library,甚至py_test,并在对现有代码进行最小更改的情况下添加包装宏。

如果你以某种方式使构建失败,这将使快速原型化变得更加困难。有时你只想快速尝试一下,但你还不在乎任何违反pydoc的行为。

如果您确实希望构建失败,则可以使用您实现的规则的验证输出组来包装或替换py_libraries。

相关内容

  • 没有找到相关文章

最新更新