开发工具

代码检查/格式化/测试

flake8

  • 有点像 pycodestyle:确保代码风格符合规范。

  • 与 black 兼容,实际上,当前的 flake8 配置直接取自 black

  • 代码合规性可以通过以下命令简单测试:flake8 <file-or-directory>

  • 您可以使用 # noqa: <QA-CODE> 例如 # noqa: E731 以允许 lambda 赋值 来绕过 flake8 对某行的检查

pre-commit

  • 一个 Python 工具,它读取配置文件 (.pre-commit-config.yaml) 并安装其中指定的 git 提交钩子。

  • Git 提交钩子是本地的,因此所有想使用它们的人都需要单独安装。这可以通过以下命令完成:pre-commit install

  • 该工具还可以安装 pre-push 钩子。这可以通过以下命令单独完成:pre-commit install --hook-type pre-push --config .pre-push-config.yaml

git pre-commit 钩子

  • 自动运行 black

  • 自动修复尾随空格、文件末尾空行,排序 requirements.txt

  • 检查没有意外添加大型文件(>512kb)

  • 自动运行 flake8

  • 自动运行 cspell

  • 注意:如果钩子修复了某些内容(例如尾随空格或使用 black 重新格式化),这些更改不会自动添加和提交。您必须再次添加修复后的文件并再次运行 commit。我认为这是一种安全措施:不要盲目接受来自 git 钩子的更改。

  • 注意 2:钩子只会在您 git add 到 commit 中的文件上运行。这与 CI 流水线不同,CI 流水线总是测试所有内容。

  • 注意 3:如果某个单词被标记为拼写错误但应该保留,您可以将该单词添加到 .dict-speechbrain.txt 中。

git pre-push 钩子

  • Black 和 flake8 作为整个仓库的检查

  • 对整个仓库运行单元测试和 doctests

  • 这些钩子只能在完整环境中运行,因此如果您安装了它们,您需要在推送前激活 virtualenv 等环境。

pytest doctests

  • 这不是一个额外的依赖项,只是 doctests 现在使用 pytest 运行。使用:pytest --doctest-modules <file-or-directory>

  • 因此,您可以在 docstring 示例中使用一些 pytest 特性。我认为最值得注意的是:tmpdir = getfixture('tmpdir'),它创建一个临时目录并为您提供其路径,而无需使用 with tempfile.TemporaryDirectory() as tmpdir:

持续集成

什么是 CI?

  • 对紧凑合并计划的通用术语

  • 通常辅以自动化测试和代码评审工具 + 实践

CI / CD 流水线

  • GitHub Actions(也作为第三方解决方案提供)功能,它能够自动响应 git 事件并执行任何操作。

  • CI 流水线由 pull requests 触发。

  • 在 GitHub 提供的 Ubuntu 环境中运行

  • GitHub 提供有限的免费 CI 流水线分钟数。

  • CD 代表持续部署,请查看“发布新版本”部分。

我们的测试套件

  • 运行代码检查器。这意味着 black 和 flake8。它们在 speechbrain(库目录)、recipes 中的所有内容和 tests 中的所有内容上运行。

  • 请注意,black 仅在需要更改文件时才会报错,但在此阶段不会重新格式化任何内容。您需要对您的代码运行 black 并推送新的 commit。black 提交钩子有助于避免这些错误。

  • 运行所有单元测试和 doctests。您可以通过在推送前自己运行它们来检查它们是否通过,使用 pytest testspytest --doctest-modules speechbrain

  • 集成测试(最小示例)。最小示例既用于说明基本任务和实验运行,也作为工具包的集成测试。为此,任何以 example_ 为前缀的文件都会被 pytest 收集,并且我们在最小示例的末尾添加一个简短的 test_ 函数。

  • 目前,这些测试未运行:docstring 格式测试(这应该在 docstring 转换完成后添加)。

  • 如果所有测试都通过,整个流水线需要几分钟时间。