菜单

CI/CD 流水线

相关源文件

本文档介绍了 ripgrep 项目使用的持续集成和持续部署 (CI/CD) 流水线。它涵盖了通过 GitHub Actions 工作流如何自动测试、验证和发布更改。有关发布流程本身的信息,请参阅 发布流程

概述

Ripgrep 采用 GitHub Actions 提供自动化的测试和部署能力。CI/CD 流水线有几个关键目的:

  1. 通过自动化测试验证所有代码更改
  2. 确保跨平台兼容性
  3. 验证代码质量和文档
  4. 自动化发布流程

来源: .github/workflows/ci.yml1-232 .github/workflows/release.yml1-372

CI 工作流

CI 工作流定义在 .github/workflows/ci.yml 中,并在三种情况下运行:

  • 打开拉取请求时
  • 推送到 master 分支时
  • 每日计划(UTC 时间凌晨 1:00)

安全配置

CI 工作流遵循最小权限原则,明确限制仅授予所需权限。

来源: .github/workflows/ci.yml10-28

测试矩阵

CI 流水线使用测试矩阵在多种配置下测试 ripgrep。

构建类型操作系统Rust 版本目标
固定版本Ubuntu1.74.0默认
稳定版Ubuntu稳定版默认
beta版Ubuntubeta版默认
nightly版Ubuntunightly版默认
stable-muslUbuntu稳定版x86_64-unknown-linux-musl
stable-x86Ubuntu稳定版i686-unknown-linux-gnu
stable-aarch64Ubuntu稳定版aarch64-unknown-linux-gnu
stable-arm-*Ubuntu稳定版各种 ARM 目标
stable-powerpc64Ubuntu稳定版powerpc64-unknown-linux-gnu
stable-s390xUbuntu稳定版s390x-unknown-linux-gnu
macosmacOSnightly版默认
win-msvcWindowsnightly版默认
win-gnuWindowsnightly-x86_64-gnu默认

来源: .github/workflows/ci.yml30-106

构建和测试过程

对于测试矩阵中的每种配置,CI 流水线执行以下步骤:

来源: .github/workflows/ci.yml107-186

附加检查

CI 工作流还包含独立的作业:

  1. WebAssembly 编译:验证 ripgrep 是否可以编译为 wasm32-wasip1 目标。
  2. 代码格式化:确保所有代码都符合 Rust 的格式化标准。
  3. 文档:验证所有文档的生成过程中没有警告。

来源: .github/workflows/ci.yml192-232

发布工作流

发布流程通过 .github/workflows/release.yml 工作流实现自动化,当版本标签(例如 1.2.3)被推送到仓库时触发。

发布创建

工作流首先创建一个 GitHub 发布,并验证标签版本是否与 Cargo.toml 中的版本匹配。

来源: .github/workflows/release.yml17-41

构建矩阵

发布工作流为全面的平台集构建二进制文件:

构建类型操作系统目标备注
LinuxUbuntux86_64-unknown-linux-musl静态构建
stable-x86Ubuntui686-unknown-linux-gnu32 位 Linux
stable-aarch64Ubuntuaarch64-unknown-linux-gnuARM 64 位
stable-arm-*Ubuntu各种 ARM 目标ARM 32 位
stable-powerpc64Ubuntupowerpc64-unknown-linux-gnuPowerPC
stable-s390xUbuntus390x-unknown-linux-gnuIBM Z
macosmacOSx86_64-apple-darwinmacOS x86_64
win-msvcWindowsx86_64-pc-windows-msvcMSVC 64 位
win-gnuWindowsx86_64-pc-windows-gnuMinGW 64 位
win32-msvcWindowsi686-pc-windows-msvcMSVC 32 位

来源: .github/workflows/release.yml42-128

发布构建流程

对于每个平台,发布工作流会:

来源: .github/workflows/release.yml130-283

Debian 包

除了标准的归档文件之外,发布工作流还会构建一个 Debian 包。

来源: .github/workflows/release.yml285-371

跨平台测试基础设施

Ripgrep 使用 cross 工具通过 QEMU 模拟在非原生平台上进行测试。

跨平台目标配置

在非原生平台上进行测试时,CI 流水线会:

  1. 下载并安装 cross 工具。
  2. 设置适当的目标标志。
  3. 使用 QEMU 运行编译后的二进制文件。

来源: .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 流水线提供了重要功能:

  1. 将 Git 修订哈希嵌入二进制文件。
  2. 为 Windows 设置特定选项以支持长路径。

来源: build.rs1-47

总结

Ripgrep 的 CI/CD 流水线在多个平台上提供全面的测试和自动发布。该系统确保:

  1. 所有代码更改都经过彻底测试。
  2. Ripgrep 在所有支持的平台上都能正常工作。
  3. 代码质量标准得到维护。
  4. 发布能够一致地构建和打包。

该基础设施使项目能够保持高质量,同时支持广泛的平台和配置。