菜单

持续集成

相关源文件

本文档介绍了 you-get 项目中使用的持续集成(CI)系统。它详细说明了如何设置自动化测试、其工作原理以及在开发或为项目做贡献时如何解读 CI 结果。

目的与范围

you-get 中 CI 系统的目的是自动验证代码更改不会破坏多个 Python 版本上的现有功能。它会对 develop 分支上的每一次 push 和指向 develop 分支的每一个 pull request 运行一系列检查。有关手动测试过程的信息,请参阅测试

CI 工作流概述

you-get 项目使用 GitHub Actions 作为其 CI 平台。CI 工作流在其存储库的 workflow 配置文件中定义。

工作流程图

来源:.github/workflows/python-package.yml1-40

工作流触发器

CI 工作流在两种情况下会被自动触发

  1. 当代码被推送到 develop 分支时
  2. 当针对 develop 分支打开 pull request 时

这确保了在主分支上的直接开发和通过 pull request 的贡献都能得到妥善的测试。

来源:.github/workflows/python-package.yml5-9

测试矩阵

you-get CI 使用矩阵策略同时针对多个 Python 版本测试代码库。这确保了跨不同 Python 环境的兼容性。

Python 版本类型
3.7CPython
3.8CPython
3.9CPython
3.10CPython
3.11CPython
3.12CPython
3.13CPython
3.8PyPy
3.9PyPy
3.10PyPy

矩阵配置设置为 fail-fast: false,这意味着如果一个版本测试失败,工作流将继续测试其他版本,而不是立即停止。

来源:.github/workflows/python-package.yml15-18

CI 步骤

CI 工作流为矩阵中的每个 Python 版本执行以下步骤:

1. Checkout 代码

使用 actions/checkout@v4 action 将存储库代码克隆到 CI 环境。这会检索 push 或 pull request 时代码库的确切状态。

2. 设置 Python

使用 actions/setup-python@v5 action 为当前矩阵作业配置特定的 Python 版本。这确保了正确的 Python 解释器可用于测试。

3. 安装依赖项

执行一系列命令来准备测试环境:

  • 升级 pip 和 setuptools
  • 安装 flake8 用于代码检查
  • 如果 requirements.txt 文件存在,则安装 requirements.txt 中列出的任何需求

4. 代码检查

运行 flake8 进行两次代码质量检查:

  • 第一次检查使用 --select=E9,F63,F7,F82 检查关键语法错误,如果发现任何错误,则会使构建失败。
  • 第二次检查使用 --exit-zero 运行更全面的检查,将问题报告为警告而不使构建失败。

5. 测试

使用命令 make test 执行测试。这会运行项目的单元测试套件来验证功能。

来源:.github/workflows/python-package.yml20-39

理解 CI 结果

当 CI 工作流完成时,您可以在存储库的 GitHub Actions 标签页中或直接从 pull request/commit 状态指示器中查看结果。每个作业将被标记为:

  • 成功(绿色勾选):所有步骤都已成功完成。
  • 失败(红色叉号):一个或多个步骤遇到了错误。
  • 已取消(灰色圆点):工作流被手动取消。

对于失败的作业,您可以深入到导致失败的具体步骤中查看错误日志。常见的失败点包括:

  1. 代码检查错误:flake8 检测到的语法问题或代码风格违规。
  2. 测试失败:由于功能损坏而失败的单元测试。
  3. 依赖项问题:安装所需包时出现问题。

解决 CI 失败

如果您的贡献未能通过 CI 检查,则需要在合并前解决这些问题。解决步骤如下:

  1. 检查日志:点击失败的作业并查看输出以确定具体错误。
  2. 本地测试:在本地重现 CI 环境以调试问题。
  3. 修复问题:进行必要的更改以解决错误。
  4. 推送更新:提交并推送您的修复以更新 pull request 并触发新的 CI 运行。

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