本文档介绍了 ripgrep 项目使用的持续集成和持续部署 (CI/CD) 流水线。它涵盖了通过 GitHub Actions 工作流如何自动测试、验证和发布更改。有关发布流程本身的信息,请参阅 发布流程。
Ripgrep 采用 GitHub Actions 提供自动化的测试和部署能力。CI/CD 流水线有几个关键目的:
来源: .github/workflows/ci.yml1-232 .github/workflows/release.yml1-372
CI 工作流定义在 .github/workflows/ci.yml 中,并在三种情况下运行:
CI 工作流遵循最小权限原则,明确限制仅授予所需权限。
来源: .github/workflows/ci.yml10-28
CI 流水线使用测试矩阵在多种配置下测试 ripgrep。
| 构建类型 | 操作系统 | Rust 版本 | 目标 |
|---|---|---|---|
| 固定版本 | Ubuntu | 1.74.0 | 默认 |
| 稳定版 | Ubuntu | 稳定版 | 默认 |
| beta版 | Ubuntu | beta版 | 默认 |
| nightly版 | Ubuntu | nightly版 | 默认 |
| stable-musl | Ubuntu | 稳定版 | x86_64-unknown-linux-musl |
| stable-x86 | Ubuntu | 稳定版 | i686-unknown-linux-gnu |
| stable-aarch64 | Ubuntu | 稳定版 | aarch64-unknown-linux-gnu |
| stable-arm-* | Ubuntu | 稳定版 | 各种 ARM 目标 |
| stable-powerpc64 | Ubuntu | 稳定版 | powerpc64-unknown-linux-gnu |
| stable-s390x | Ubuntu | 稳定版 | s390x-unknown-linux-gnu |
| macos | macOS | nightly版 | 默认 |
| win-msvc | Windows | nightly版 | 默认 |
| win-gnu | Windows | nightly-x86_64-gnu | 默认 |
来源: .github/workflows/ci.yml30-106
对于测试矩阵中的每种配置,CI 流水线执行以下步骤:
来源: .github/workflows/ci.yml107-186
CI 工作流还包含独立的作业:
来源: .github/workflows/ci.yml192-232
发布流程通过 .github/workflows/release.yml 工作流实现自动化,当版本标签(例如 1.2.3)被推送到仓库时触发。
工作流首先创建一个 GitHub 发布,并验证标签版本是否与 Cargo.toml 中的版本匹配。
来源: .github/workflows/release.yml17-41
发布工作流为全面的平台集构建二进制文件:
| 构建类型 | 操作系统 | 目标 | 备注 |
|---|---|---|---|
| Linux | Ubuntu | x86_64-unknown-linux-musl | 静态构建 |
| stable-x86 | Ubuntu | i686-unknown-linux-gnu | 32 位 Linux |
| stable-aarch64 | Ubuntu | aarch64-unknown-linux-gnu | ARM 64 位 |
| stable-arm-* | Ubuntu | 各种 ARM 目标 | ARM 32 位 |
| stable-powerpc64 | Ubuntu | powerpc64-unknown-linux-gnu | PowerPC |
| stable-s390x | Ubuntu | s390x-unknown-linux-gnu | IBM Z |
| macos | macOS | x86_64-apple-darwin | macOS x86_64 |
| win-msvc | Windows | x86_64-pc-windows-msvc | MSVC 64 位 |
| win-gnu | Windows | x86_64-pc-windows-gnu | MinGW 64 位 |
| win32-msvc | Windows | i686-pc-windows-msvc | MSVC 32 位 |
来源: .github/workflows/release.yml42-128
对于每个平台,发布工作流会:
来源: .github/workflows/release.yml130-283
除了标准的归档文件之外,发布工作流还会构建一个 Debian 包。
来源: .github/workflows/release.yml285-371
Ripgrep 使用 cross 工具通过 QEMU 模拟在非原生平台上进行测试。
在非原生平台上进行测试时,CI 流水线会:
cross 工具。来源: .github/workflows/ci.yml121-136 tests/util.rs452-494
对于非原生平台上的 shell 补全测试和 man 页生成,发布工作流使用带 QEMU 的 Docker。
来源: .github/workflows/release.yml214-257
CI 流水线使用了一个全面的测试框架,该框架同时支持原生和跨平台测试。
测试实用程序提供了在测试期间运行 ripgrep 命令的机制,并适应测试环境。
来源: tests/util.rs17-175 tests/util.rs452-494
CI 流水线包含一项特殊测试,用于验证跨平台主机名检测是否正常工作。
cargo test --manifest-path crates/cli/Cargo.toml --lib print_hostname -- --nocapture
此测试验证特定于平台的 hostname 检测实现,该实现因 Windows 和 Unix 系统而异。
来源: .github/workflows/ci.yml184-186 crates/cli/src/hostname.rs1-86
构建脚本(build.rs)为 CI/CD 流水线提供了重要功能:
来源: build.rs1-47
Ripgrep 的 CI/CD 流水线在多个平台上提供全面的测试和自动发布。该系统确保:
该基础设施使项目能够保持高质量,同时支持广泛的平台和配置。