本文档介绍了 you-get 项目中使用的持续集成(CI)系统。它详细说明了如何设置自动化测试、其工作原理以及在开发或为项目做贡献时如何解读 CI 结果。
you-get 中 CI 系统的目的是自动验证代码更改不会破坏多个 Python 版本上的现有功能。它会对 develop 分支上的每一次 push 和指向 develop 分支的每一个 pull request 运行一系列检查。有关手动测试过程的信息,请参阅测试。
you-get 项目使用 GitHub Actions 作为其 CI 平台。CI 工作流在其存储库的 workflow 配置文件中定义。
来源:.github/workflows/python-package.yml1-40
CI 工作流在两种情况下会被自动触发
develop 分支时develop 分支打开 pull request 时这确保了在主分支上的直接开发和通过 pull request 的贡献都能得到妥善的测试。
来源:.github/workflows/python-package.yml5-9
you-get CI 使用矩阵策略同时针对多个 Python 版本测试代码库。这确保了跨不同 Python 环境的兼容性。
| Python 版本 | 类型 |
|---|---|
| 3.7 | CPython |
| 3.8 | CPython |
| 3.9 | CPython |
| 3.10 | CPython |
| 3.11 | CPython |
| 3.12 | CPython |
| 3.13 | CPython |
| 3.8 | PyPy |
| 3.9 | PyPy |
| 3.10 | PyPy |
矩阵配置设置为 fail-fast: false,这意味着如果一个版本测试失败,工作流将继续测试其他版本,而不是立即停止。
来源:.github/workflows/python-package.yml15-18
CI 工作流为矩阵中的每个 Python 版本执行以下步骤:
使用 actions/checkout@v4 action 将存储库代码克隆到 CI 环境。这会检索 push 或 pull request 时代码库的确切状态。
使用 actions/setup-python@v5 action 为当前矩阵作业配置特定的 Python 版本。这确保了正确的 Python 解释器可用于测试。
执行一系列命令来准备测试环境:
运行 flake8 进行两次代码质量检查:
--select=E9,F63,F7,F82 检查关键语法错误,如果发现任何错误,则会使构建失败。--exit-zero 运行更全面的检查,将问题报告为警告而不使构建失败。使用命令 make test 执行测试。这会运行项目的单元测试套件来验证功能。
来源:.github/workflows/python-package.yml20-39
当 CI 工作流完成时,您可以在存储库的 GitHub Actions 标签页中或直接从 pull request/commit 状态指示器中查看结果。每个作业将被标记为:
对于失败的作业,您可以深入到导致失败的具体步骤中查看错误日志。常见的失败点包括:
如果您的贡献未能通过 CI 检查,则需要在合并前解决这些问题。解决步骤如下:
you-get 的 CI 工作流使用 GitHub Actions 实现,并在存储库的 工作流文件中定义。
工作流文件配置了要测试的 Python 版本矩阵,以确保与包括标准 CPython 和 PyPy 实现的各种 Python 运行时环境的兼容性。
来源:.github/workflows/python-package.yml1-40
CI 系统是 you-get 开发过程中不可或缺的一部分,与其他组件(如版本控制、测试和发布管理)协同工作。
通过自动测试更改,CI 系统有助于维护代码质量并防止回归,从而确保项目在发布版本和 Python 版本之间保持稳定。
来源:.github/workflows/python-package.yml1-40 CHANGELOG.rst1-757