本文档涵盖了构建和维护 uv 本身所需的开发、测试和发布基础设施。这包括 CI/CD 管道、自动化测试系统、多平台构建流程和发布自动化。
有关 uv 核心功能和面向用户特性的信息,请参阅 系统架构 和 核心系统。有关测试 uv 作为最终用户工具的行为,请参阅 测试基础设施。
uv 项目使用 GitHub Actions 进行持续集成和部署,并将其组织成多个专门的工作流,以处理开发生命周期的不同方面。
主要的 CI 工作流定义在 .github/workflows/ci.yml1-896,并提供跨多个平台和配置的全面测试。
工作流包含几个关键组件
rustfmt、clippy 以及 ruff 和 mypy 等 Python 工具进行 linting来源:.github/workflows/ci.yml1-896
发布过程由 cargo-dist 通过 .github/workflows/release.yml1-275 进行协调,它协调多个构建和发布作业。
发布工作流遵循结构化方法
来源:.github/workflows/release.yml1-275
uv 采用复杂的测试基础设施,包括传统的单元/集成测试以及使用生成测试用例的基于场景的测试。
核心测试方法使用 packse 工具生成涵盖复杂依赖解析场景的全面测试场景。
场景生成过程涉及多个组件
packse>=0.3.39 作为场景提供者生成脚本 scripts/scenarios/generate.py80-253 执行多个关键功能
chevron-blue 从模板生成 Rust 测试代码cargo insta test 以更新测试快照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_scenarios | install.mustache1-119 | 包安装 | 虚拟环境测试,导入验证 |
pip_compile_scenarios | compile.mustache1-107 | 依赖项编译 | Requirements.txt 生成,版本约束 |
lock_scenarios | lock.mustache1-90 | 通用解析 | Lockfile 生成,平台无关的解析 |
每个测试类别都使用场景元数据中定义的特定解析器选项
来源: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 并为所有支持的平台创建原生二进制文件。
构建过程处理了几个复杂因素
JEMALLOC_SYS_WITH_LG_PAGE=16 进行特殊处理run-on-arch-action 进行原生架构测试uv 和 uvx 二进制文件,并在 Windows 上构建 uvw来源:.github/workflows/build-binaries.yml1-713
Docker 构建系统创建具有广泛变体支持的多平台容器镜像。
Docker 管道包含几个高级功能
linux/amd64 和 linux/arm64 进行构建来源: .github/workflows/build-docker.yml1-392
构建产物通过多个渠道进行分发,并实现自动化发布
| 渠道 | 工件 | 自动化 |
|---|---|---|
| PyPI | Python 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
一些自动化工作流处理日常维护任务,以保持项目最新。
.github/workflows/sync-python-releases.yml1-49 工作流会自动跟踪新的 Python 版本并更新 uv 的元数据。
此自动化通过以下方式确保 uv 与 Python 版本保持同步:
来源: .github/workflows/sync-python-releases.yml1-49
文档系统通过 .github/workflows/publish-docs.yml1-144 自动发布 uv 文档更新到文档站点。
发布流程包括: