菜单

开发基础设施

相关源文件

本文档涵盖了构建和维护 uv 本身所需的开发、测试和发布基础设施。这包括 CI/CD 管道、自动化测试系统、多平台构建流程和发布自动化。

有关 uv 核心功能和面向用户特性的信息,请参阅 系统架构核心系统。有关测试 uv 作为最终用户工具的行为,请参阅 测试基础设施

CI/CD 管道概述

uv 项目使用 GitHub Actions 进行持续集成和部署,并将其组织成多个专门的工作流,以处理开发生命周期的不同方面。

主要 CI 工作流

主要的 CI 工作流定义在 .github/workflows/ci.yml1-896,并提供跨多个平台和配置的全面测试。

工作流包含几个关键组件

  • 变更检测.github/workflows/ci.yml21-68 确定代码更改是否需要全面测试
  • 代码质量:使用 rustfmtclippy 以及 ruffmypy 等 Python 工具进行 linting
  • 多平台测试:在 Linux (depot-ubuntu)、macOS 和 Windows 上并行执行测试
  • 二进制构建:为所有支持的平台创建用于冒烟测试的调试二进制文件
  • 生态系统测试:使用 Prefect 和 Flask 等真实项目验证 uv

来源:.github/workflows/ci.yml1-896

发布编排

发布过程由 cargo-dist 通过 .github/workflows/release.yml1-275 进行协调,它协调多个构建和发布作业。

发布工作流遵循结构化方法

  1. 规划.github/workflows/release.yml54-93 确定需要构建和发布的内容
  2. 并行构建:用于二进制文件和 Docker 镜像的自定义作业
  3. 产物托管:准备发布产物和元数据
  4. 发布:使用可信发布将产物上传到 PyPI
  5. 公告:创建带有所有产物的 GitHub 发布
  6. 文档:更新文档站点

来源:.github/workflows/release.yml1-275

测试基础设施

uv 采用复杂的测试基础设施,包括传统的单元/集成测试以及使用生成测试用例的基于场景的测试。

基于场景的测试

核心测试方法使用 packse 工具生成涵盖复杂依赖解析场景的全面测试场景。

场景生成过程涉及多个组件

生成脚本 scripts/scenarios/generate.py80-253 执行多个关键功能

  1. 场景加载:检查 packse 场景文件以提取测试元数据
  2. 模板渲染:使用 chevron-blue 从模板生成 Rust 测试代码
  3. 快照更新:自动运行 cargo insta test 以更新测试快照
  4. 格式化:将 rustfmt 应用于生成的测试文件

来源:scripts/scenarios/generate.py1-321 scripts/scenarios/templates/compile.mustache1-107 scripts/scenarios/templates/install.mustache1-119 scripts/scenarios/templates/lock.mustache1-90

测试类别

场景系统生成三种不同的测试类别

测试类型模板目的主要功能
pip_install_scenariosinstall.mustache1-119包安装虚拟环境测试,导入验证
pip_compile_scenarioscompile.mustache1-107依赖项编译Requirements.txt 生成,版本约束
lock_scenarioslock.mustache1-90通用解析Lockfile 生成,平台无关的解析

每个测试类别都使用场景元数据中定义的特定解析器选项

  • 安装测试:专注于成功的包安装和导入验证
  • 编译测试:测试具有 Python 版本约束的依赖项解析
  • Lock 测试:测试用于跨平台兼容性的通用解析

来源:scripts/scenarios/templates/install.mustache72-117 scripts/scenarios/templates/compile.mustache56-105 scripts/scenarios/templates/lock.mustache30-88

构建和发布系统

构建系统使用 GitHub Actions 和专用工具的组合,为众多平台创建了多种类型的产物。

多平台二进制构建

二进制构建过程定义在 .github/workflows/build-binaries.yml1-713 并为所有支持的平台创建原生二进制文件。

构建过程处理了几个复杂因素

来源:.github/workflows/build-binaries.yml1-713

Docker 镜像管道

Docker 构建系统创建具有广泛变体支持的多平台容器镜像。

Docker 管道包含几个高级功能

来源: .github/workflows/build-docker.yml1-392

包分发

构建产物通过多个渠道进行分发,并实现自动化发布

渠道工件自动化
PyPIPython wheels,源发行版publish-pypi.yml1-52
GitHub Releases二进制文件,校验和release.yml227-265
容器注册中心Docker 镜像,变体build-docker.yml122-392
安装脚本Shell/PowerShell 安装程序cargo-dist 生成

来源: .github/workflows/publish-pypi.yml1-52 .github/workflows/release.yml227-265 .github/workflows/build-docker.yml122-392

维护自动化

一些自动化工作流处理日常维护任务,以保持项目最新。

Python 版本同步

.github/workflows/sync-python-releases.yml1-49 工作流会自动跟踪新的 Python 版本并更新 uv 的元数据。

此自动化通过以下方式确保 uv 与 Python 版本保持同步:

  1. 每日检查.github/workflows/sync-python-releases.yml7-8 基于 cron 计划运行
  2. 元数据获取:更新 Python 下载 URL 和版本信息
  3. Sysconfig 同步:更新特定于平台的 Python 配置映射
  4. 拉取请求.github/workflows/sync-python-releases.yml37-48 自动创建 PR 以供审核

来源: .github/workflows/sync-python-releases.yml1-49

文档发布

文档系统通过 .github/workflows/publish-docs.yml1-144 自动发布 uv 文档更新到文档站点。

发布流程包括:

来源: .github/workflows/publish-docs.yml1-144