Rust 项目的 CI/CD:GitHub Actions — 第 2 部分:测试与部署
在第一部分中,我们为 Rust 项目搭建了一个基础的构建管道。现在,深入探讨 Rust 编程,我们将关注自动化测试、代码检查以及部署。这是希望编写专业代码的 Rust 初学者 的必经阶段。今天你将学习如何让你的 CI/CD 真正发挥作用。
1. 运行测试与检查覆盖率
任何严肃的 Rust 项目都需要自动执行测试。在 GitHub Actions 中,这可以通过 cargo test 命令完成。然而,为了获得最大收益,请使用 tarpaulin 添加代码覆盖率检查。
设置测试环境
在你的工作流文件(.github/workflows/ci.yml)中添加一个步骤:
name: CI for Rust
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Run tests
run: cargo test --verbose
- name: Generate coverage
run: |
cargo install cargo-tarpaulin
cargo tarpaulin --out Xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
这段代码展示了将 Rust 与外部服务集成是多么简单。cargo tarpaulin 会生成一份报告,可以上传到 Codecov 或 Coveralls。对于 Rust 初学者,理解这一点很重要:测试是你的第一道防线。
2. 代码检查与格式化
高质量的代码不仅仅是能正常运行的代码,还应该是可读的代码。在 Rust 中,有两个强大的工具:clippy(代码检查器)和 rustfmt(格式化程序)。将它们包含在管道中。
添加 Clippy 和 Rustfmt
添加一个新任务或扩展现有任务:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: clippy, rustfmt
- name: Check formatting
run: cargo fmt -- --check
- name: Run Clippy
run: cargo clippy -- -D warnings
-D warnings 标志会将警告转换为错误。这对于 学习 来说很严格但很有效:你会立即发现潜在问题。请记住,在 Rust 编程 中,严格性是一个优势。
3. 自动部署到 GitHub Pages
当测试和代码检查通过后,你可以自动发布文档。Rust 通过 cargo doc 生成文档。部署到 GitHub Pages 是展示成果的绝佳方式。
用于部署的工作流
创建一个单独的文件 .github/workflows/deploy.yml:
name: Deploy Documentation
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Build documentation
run: cargo doc --no-deps --document-private-items
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./target/doc
此管道仅在推送到 main 分支时触发。它会生成文档并发布。对于 Rust 初学者,这是向世界展示你项目的好方法。
4. 优化构建时间:缓存
构建 Rust 项目可能非常耗时。GitHub Action