菜单

开发

相关源文件

本页面为希望使用或贡献 Whisper 代码库的开发者提供基本信息。它涵盖了开发工作流、测试基础设施、版本管理和发布流程。有关代码库组织的详细信息,请参阅项目结构

开发工作流

Whisper 项目遵循标准的 GitHub 开发工作流,并具备自动化测试和持续集成。

来源: .github/workflows/test.yml .github/workflows/python-publish.yml

测试基础设施

Whisper 使用 GitHub Actions 进行持续集成测试。测试工作流定义在 test.yml 文件中,并在每次将更改推送到主分支或创建针对主分支的拉取请求时运行。

预提交检查

测试工作流中的第一个作业运行 pre-commit 钩子,以确保代码质量和一致性。

来源: .github/workflows/test.yml11-38

测试矩阵

Whisper 与多个 Python 和 PyTorch 版本进行测试,以确保在不同环境下的兼容性。

Python 版本PyTorch 版本NumPy 要求
3.81.10.1numpy<2
3.81.13.1numpy<2
3.82.0.1numpy<2
3.92.1.2numpy<2
3.102.2.2numpy<2
3.112.3.1numpy
3.122.4.1numpy
3.122.5.0numpy

测试作业执行 pytest 套件,重点关注不需要 CUDA 的测试,因为 GitHub Actions 运行器不提供 GPU 支持。

来源: .github/workflows/test.yml39-75

版本管理

Whisper 使用基于日期的版本命名方案,格式为 YYYYMMDD。这种方法允许版本号反映发布日期,便于跟踪特定功能或修复引入的时间。

版本文件

版本存储在位于 whisper/version.py 的专用文件中。

此版本号由包设置脚本使用,并体现在已安装的包元数据中。

来源: whisper/version.py

发布流程

发布通过 Git 提交、GitHub release 和 GitHub Actions 工作流结合管理。

发布工作流步骤

  1. 更新 whisper/version.py 中的版本
  2. 更新 CHANGELOG.md,包含新功能、错误修复和其他更改。
  3. 使用格式为“Release YYYYMMDD”的消息提交更改。
  4. 将提交推送到主分支。
  5. GitHub Actions 工作流将自动:
    • 使用正则表达式检测发布提交。
    • 创建带有适当标签的 GitHub release。
    • 构建并将包发布到 PyPI。

来源: .github/workflows/python-publish.yml whisper/version.py CHANGELOG.md

变更日志管理

Whisper 维护一个 CHANGELOG.md 文件来记录发布之间的变更。变更日志按版本组织,每个版本都有自己的部分。

变更日志格式

## <FileRef file-url="https://github.com/openai/whisper/blob/517a43ec/vYYYYMMDD" undefined  file-path="vYYYYMMDD">Hii</FileRef>

* Feature description (<FileRef file-url="https://github.com/openai/whisper/blob/517a43ec/#PR" undefined  file-path="#PR">Hii</FileRef>)
* Bug fix description (<FileRef file-url="https://github.com/openai/whisper/blob/517a43ec/#PR" undefined  file-path="#PR">Hii</FileRef>)

变更日志条目提供简明的变更描述,并链接到相应的拉取请求以获取更详细的信息。

来源: CHANGELOG.md

贡献指南

贡献 Whisper 时,请遵循以下通用指南:

  1. 从主分支创建特性分支。
  2. 进行您的更改
  3. 在本地运行测试,确保您的更改不会破坏现有功能。
  4. 确保所有 pre-commit 钩子均成功通过。
  5. 提交一个具有清晰描述您所做更改的拉取请求。
  6. 在您的拉取请求中引用任何相关的 issue。

对于重要的更改,请在实施前考虑在 issue 中进行讨论,以确保其与项目方向一致。

来源: .github/workflows/test.yml