预提交 vs tox |有什么区别 |使用范围

pre-commit vs tox | what's the difference | scope of use

毒性: https://tox.wiki/en/latest/

预提交: https://pre-commit.com/

我想了解两种选择的边界。

我知道预提交会创建一个 py 环境 - 与 tox 相同。对我来说,他们的架构看起来有点相同。

有些人将它们结合使用...有什么 pre-commit 不能做的,那 tox 可以吗?我看到了在 CI 管道期间通过预提交的示例,您可以 运行 单元测试等

哪个最适合集成到 CI 构建中?

简而言之,pre-commit是一个linter/formatter 运行ner,tox是一个通用的虚拟环境管理和测试命令行工具。

虽然 tox 也可以 运行 linters,但管理 linters 的版本非常繁琐。在 pre-commit 中,您只需 运行 pre-commit autoupdate,所有 linter 都会更新。

另一方面 tox 可以 运行 例如许多不同 Python 版本的测试套件或覆盖率报告。这不仅对库有帮助,对应用程序也有帮助 - 因此您已经可以测试即将推出的 Python 版本。

tox 也用于创建文档,有时也用于发布 - 你不能(不应该)使用 pre-commit.

tox当然不会过时,尽管GitHub动作可以针对不同的Python版本进行测试,正如您可以运行 tox本地和在 CI.

我就这个话题做了一个闪电演讲: https://www.youtube.com/watch?v=OnM3KuE7MQM

Which one is the best to integrate within the CI build?

我喜欢 运行 pre-commit 通过 tox,在 CI 和本地。

tox 配置示例

https://github.com/jugmac00/flask-reuploaded/blob/6496f8427a06be4a9f6a5699757ca7f9aba78ef6/tox.ini#L24-L26

示例pre-commit 配置

https://github.com/jugmac00/flask-reuploaded/blob/6496f8427a06be4a9f6a5699757ca7f9aba78ef6/.pre-commit-config.yaml