本文档描述了 CPython 的持续集成和持续部署 (CI/CD) 流水线。它解释了当代码库发生更改时运行的基于 GitHub Actions 的自动化构建、测试和验证过程。有关通用构建过程的信息,请参阅 构建系统 和 配置过程。
CPython 项目使用 GitHub Actions 来实现其 CI/CD 流水线。此流水线会自动在多个平台、架构和配置上构建和测试 Python,以确保代码质量和兼容性。流水线由以下事件触发:
main 或版本分支(例如 3.x)的拉取请求main 或版本分支workflow_dispatch)来源:.github/workflows/build.yml1-672 .github/workflows/reusable-context.yml1-105
流水线包含一个智能变更检测系统,可根据修改的文件确定需要运行哪些测试。通过仅运行相关测试来优化 CI 资源。
该系统会检查变更的文件以确定:
.rst 或 .md 文件).c 或 .h 文件)此优化可防止在仅更改特定文件时运行不必要的测试,同时确保所有相关系统的代码质量得到维护。
来源:Tools/build/compute-changes.py1-209 .github/workflows/reusable-context.yml1-105 .github/workflows/build.yml25-38
主构建工作流 (build.yml) 协调整个 CI/CD 过程。它定义了以下关键作业:
build-context:根据文件更改确定要运行的测试check-docs:验证文档更改check-autoconf-regen:确保 Autoconf 文件是最新的check-generated-files:验证生成的文件是最新的all-required-green:最终验证所有必需的检查都已通过主构建工作流使用基于 build-context 作业设置的标志的条件执行系统,确保只运行必要的测试。
来源:.github/workflows/build.yml25-672
Windows 构建在 x64、Win32 和 ARM64 架构上测试 CPython,并提供标准和免费线程模式。
Windows 构建过程:
PCbuild/build.batPCbuild/rt.bat 运行测试来源:.github/workflows/reusable-windows.yml1-51 .github/workflows/build.yml150-188
macOS 流水线在 Intel 和 Apple Silicon 架构上构建和测试 CPython。
macOS 构建过程:
make 构建来源:.github/workflows/reusable-macos.yml1-82 .github/workflows/build.yml190-222
Ubuntu 构建在 x86_64 和 ARM64 平台上测试 CPython,并采用各种优化。
Ubuntu 构建过程:
来源:.github/workflows/reusable-ubuntu.yml1-127 .github/workflows/build.yml224-255
WebAssembly 系统接口 (WASI) 构建编译 Python 以在 WebAssembly 环境中运行。
WASI 构建过程:
来源:.github/workflows/reusable-wasi.yml1-85 .github/workflows/build.yml319-326
CI 流水线包含带有 Sanitizer 的专用构建,用于检测各种运行时问题。
Address Sanitizer 构建:
--with-address-sanitizer 标志进行配置来源:.github/workflows/build.yml442-505
Thread Sanitizer 构建:
--with-thread-sanitizer 标志进行配置来源:.github/workflows/reusable-tsan.yml1-95 .github/workflows/build.yml506-522
JIT(即时)编译器受到特殊关注,其专用工作流可在多个平台上进行测试。
JIT 测试工作流:
来源:.github/workflows/jit.yml1-155
通过一个专用工作流来验证文档,该工作流会检查格式、结构和示例。
文档测试过程:
来源:.github/workflows/reusable-docs.yml1-105 .github/workflows/build.yml40-44
流水线仔细管理跨平台的编译器警告,以防止回归。
编译器警告系统:
.warningignore 文件中的基线进行比较来源: Tools/build/check_warnings.py1-324 Tools/build/.warningignore_macos1-10 Tools/build/.warningignore_ubuntu1-6 .github/workflows/reusable-ubuntu.yml106-121 .github/workflows/reusable-macos.yml65-79
流水线以最终验证步骤结束,确保所有必需的检查都已通过。
最终验证
来源: .github/workflows/build.yml603-672
流水线可以通过 GitHub 的工作流分派机制手动触发,这对于以下情况可能很有用:
此功能为开发人员和维护人员提供了在提交代码之前或之后验证更改的灵活性。
来源: .github/workflows/build.yml3-12
流水线使用广泛的缓存来提高性能
config.cache) 加速配置步骤这些优化显著缩短了 CI 中的构建时间,尤其是在增量更改时。
来源: .github/workflows/reusable-ubuntu.yml82-86 .github/workflows/reusable-macos.yml39-43 .github/workflows/reusable-wasi.yml33-75
CPython 的 CI/CD 流水线代表了一个全面的测试基础设施,它确保了跨多个平台、架构和配置的代码质量。它通过根据更改的文件选择性地运行测试来平衡彻底性和效率。该流水线对于在各种环境中维护 CPython 的兼容性和稳定性至关重要。