本文档提供了关于 uv 包管理器的持续集成 (CI) 和持续交付 (CD) 流水线的详细信息。它涵盖了确保 uv 在多个平台上的质量和可用性的工作流、构建流程、测试策略和发布流程。
uv 项目使用 GitHub Actions 作为其 CI/CD 平台,并由 cargo-dist 协调发布。该流水线验证代码更改,跨多个平台进行测试,为各种架构构建二进制文件,并通过 PyPI、Docker 注册表和 GitHub releases 自动化分发。
CI/CD 管道概述
来源: .github/workflows/ci.yml1-11 .github/workflows/release.yml42-50 .github/workflows/sync-python-releases.yml6-8
核心 CI 工作流在 .github/workflows/ci.yml 中定义,并使用 determine_changes 作业根据文件更改优化执行。该工作流在以下情况运行时:
workflow_dispatch 时CI 作业依赖关系和执行流程
来源: .github/workflows/ci.yml21-68 .github/workflows/ci.yml120-167 .github/workflows/ci.yml199-362 .github/workflows/ci.yml469-877
CI 流水线使用多种测试方法,以 cargo nextest 作为主要测试运行器。
测试作业配置
| 作业 | 运行器 | 特性 | 并行度 |
|---|---|---|---|
cargo-test-linux | depot-ubuntu-22.04-16 | python-patch | -j 20 |
cargo-test-macos | macos-latest-xlarge | python,python-managed,pypi,git,performance,crates-io | -j 12 |
cargo-test-windows | github-windows-2025-x86_64-16 | python,pypi,python-managed | -j 20 |
测试类别
Windows 崩溃转储分析 Windows 测试作业包含崩溃转储收集和使用 cdb.exe 进行的分析,用于调试退出代码为 -1073741819 的测试失败。
来源: .github/workflows/ci.yml199-362 .github/workflows/ci.yml741-796 .github/workflows/ci.yml797-873 .github/workflows/ci.yml365-467
CI 流水线包含多项代码质量检查:
来源: .github/workflows/ci.yml69-119 .github/workflows/ci.yml120-168
发布过程由带有发布标签的 workflow_dispatch 触发。该过程由 cargo-dist 协调,并在 .github/workflows/release.yml 中定义。
cargo-dist 发布工作流
来源: .github/workflows/release.yml52-275 .github/workflows/build-binaries.yml7-11 .github/workflows/build-docker.yml6-8
二进制构建过程在 .github/workflows/build-binaries.yml 中定义,并使用 maturin 创建特定于平台的二进制文件和 Python wheels。该过程构建了主要的 uv 包和专门的 uv-build 包。
构建矩阵和目标
| 平台 | 目标 | 容器 | 特殊选项 |
|---|---|---|---|
| macOS x86_64 | x86_64 | 原生 | --features self-update |
| macOS ARM64 | aarch64 | 原生 | --features self-update |
| Windows | x86_64-pc-windows-msvc | 原生 | --features self-update,windows-gui-bin |
| Linux GNU | x86_64-unknown-linux-gnu | quay.io/pypa/manylinux2014 | --features self-update |
| Linux ARM | aarch64-unknown-linux-gnu | manylinux: 2_28 | JEMALLOC_SYS_WITH_LG_PAGE=16 |
| Linux s390x | s390x-unknown-linux-gnu | manylinux: auto | rust-toolchain: nightly-2025-05-25 |
来源: .github/workflows/build-binaries.yml44-90 .github/workflows/build-binaries.yml92-209 .github/workflows/build-binaries.yml211-285 .github/workflows/build-binaries.yml287-489
Docker 镜像构建过程在 .github/workflows/build-docker.yml 中定义,并创建发布到 ghcr.io/astral-sh/uv 的多平台镜像。
Docker 构建和发布流程
Docker 镜像变体
| 基础镜像 | 生成的标签 | 目的 |
|---|---|---|
alpine:3.21 | alpine3.21, alpine | 基于 Alpine 的最小镜像 |
debian:bookworm-slim | bookworm-slim, debian-slim | 基于 Debian 的最小镜像 |
buildpack-deps:bookworm | bookworm, debian | 完整的 Debian 开发镜像 |
python:3.13-alpine | python3.13-alpine | Python 3.13 (Alpine 版本) |
python:3.13-bookworm | python3.13-bookworm | Python 3.13 (Debian 版本) |
python:3.13-slim-bookworm | python3.13-bookworm-slim | Python 3.13 (Debian slim 版本) |
来源: .github/workflows/build-docker.yml35-121 .github/workflows/build-docker.yml122-171 .github/workflows/build-docker.yml173-295 .github/workflows/build-docker.yml307-391
PyPI 发布过程使用构建好的 wheel 包通过受信任发布进行发布到 PyPI。
该过程使用 uv 的自身发布命令上传包。
来源: .github/workflows/publish-pypi.yml15-51
文档发布过程
该过程支持公开文档和包含附加功能的私有“Insiders”版本。
来源: .github/workflows/publish-docs.yml20-144
该项目使用各种 GitHub Actions Runner 来优化不同的任务
| 运行器 | 目的 | 应用场景 |
|---|---|---|
depot-ubuntu-latest-4 | 通用 Linux 构建 | 发布工作流 |
depot-ubuntu-22.04-16 | Linux 测试 | CI 测试 |
github-macos-14-aarch64-6 | ARM macOS 测试 | macOS 测试 |
macos-latest-large | Intel macOS 测试 | macOS 测试 |
github-windows-2025-x86_64-16 | Windows 测试 | Windows 测试 |
github-windows-11-aarch64-4 | ARM Windows 测试 | Smoke 测试 |
该项目还使用了 Windows 开发的特殊配置,包括用于优化文件系统操作的 Dev Drive。
来源: .github/workflows/ci.yml196-198 .github/workflows/ci.yml203 .github/workflows/ci.yml235 .github/workflows/ci.yml268 .github/workflows/ci.yml846 .github/workflows/release.yml55
该项目为 Cargo.toml 文件中 workspace.metadata.dist.targets 定义的平台构建二进制文件。 cargo-dist 配置在多个架构上指定了 18 个目标平台。
cargo-dist 目标矩阵
最低 glibc 覆盖
| 目标 | glibc 版本 | 注意 |
|---|---|---|
aarch64-unknown-linux-gnu | 2.28 | ARM64 特定 |
riscv64gc-unknown-linux-gnu | 2.31 | RISC-V 特定 |
| 所有其他 | 2.17 | 默认最低 |
来源: Cargo.toml314-333 Cargo.toml362-368 Cargo.toml375-381
一个计划工作流每天运行,同步有关可用 Python 版本的信息
来源: .github/workflows/sync-python-releases.yml1-42 crates/uv-python/minify-download-metadata.py1-44 crates/uv-python/src/download-metadata-minified.json1
发布流程由 cargo-dist 编排,涉及跨多个工作流的协调执行
完整的发布序列
来源: .github/workflows/release.yml54-275 .github/workflows/build-binaries.yml1-7 .github/workflows/publish-pypi.yml15-51 .github/workflows/publish-docs.yml21-144
uv 的 CI/CD 流水线是一个健壮的系统,旨在跨多个平台验证、构建和发布包管理器。它通过全面的测试和代码审查确保代码质量,并自动化发布流程,为用户交付一致的制品。
GitHub Actions 的使用提供了灵活性和可伸缩性,使项目能够高效地管理资源,同时满足不同平台和架构的多样化需求。