Skip to main content

正在构建和测试 Rust

了解如何创建持续集成 (CI) 工作流来构建和测试 Rust 项目。

简介

本指南介绍如何构建、测试和发布 Rust 包。

GitHub-hosted runners 有一个具有预安装软件的工具缓存,其中包括 Rust 的依赖项。 有关最新软件和预安装版本的 Rust 的完整列表,请参阅 GitHub 托管的运行程序

先决条件

你应该已经熟悉 YAML 语法及其用法 GitHub Actions。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。

建议你对 Rust 语言有基本的了解。 有关详细信息,请参阅 Rust 入门

使用 Rust 工作流模板

若要快速开始使用,请将工作流模板添加到存储库的 .github/workflows 目录。

GitHub 提供一个 Rust 工作流模板,该模板适用于最基本的 Rust 项目。 本指南的后续部分提供了如何自定义此工作流模板的示例。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在仓库名称下,单击“ Actions”****。

    “github/docs”存储库的选项卡的屏幕截图。 “操作”选项卡以橙色边框突出显示。

  3. 如果存储库中已有工作流,请单击“新建工作流”。

  4. “选择工作流”页面显示一系列推荐的工作流模板。 搜索“Rust”。

  5. 单击“持续集成”**** 以筛选工作流选择。

  6. 在“Rust - by GitHub Actions”工作流上,单击“ 配置”。

    “选择工作流”页的屏幕截图。 “Rust”工作流上的“配置”按钮以橙色轮廓突出显示。

  7. 根据需要编辑工作流。 例如更改 Rust 版本。

  8. 单击“提交更改”。

    工作流 rust.yml 文件将添加到 .github/workflows 存储库的目录中。

指定 Rust 版本

GitHub-hosted runners include a recent version of the Rust toolchain. 可以使用 rustup 报告运行器上安装的版本、替代该版本以及安装不同的工具链。 有关详细信息,请参阅 rustup 手册

此示例演示了可用于设置运行器环境以使用 Rust 的夜间构建版本并报告此版本的步骤。

YAML
      - name: Temporarily modify the rust toolchain version
        run: rustup override set nightly
      - name: Output rust version for educational purposes
        run: rustup --version

缓存依赖项

可以使用缓存操作来缓存和还原依赖项。 此示例假定仓库包含一个 Cargo.lock 文件。

YAML
      - name: Cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

如果有自定义要求或需要更精细的缓存控件,则应浏览cache操作的其他配置选项。 有关详细信息,请参阅“依赖项缓存参考”。

构建和测试代码

您可以使用与本地相同的命令来构建和测试代码。 此示例工作流演示如何在作业中使用 cargo buildcargo test

YAML
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        BUILD_TARGET: [release] # refers to a cargo profile
    outputs:
      release_built: ${{ steps.set-output.outputs.release_built }}
    steps:
      - uses: actions/checkout@v6
      - name: Build binaries in "${{ matrix.BUILD_TARGET }}" mode
        run: cargo build --profile ${{ matrix.BUILD_TARGET }}
      - name: Run tests in "${{ matrix.BUILD_TARGET }}" mode
        run: cargo test --profile ${{ matrix.BUILD_TARGET }}

此示例中使用的 release 关键字表示一个货物配置文件。 可以使用在 文件中定义的任何Cargo.toml

将包或库发布到 crates.io

设置工作流以构建和测试代码后,可以使用机密以登录 crates.io 并发布包。

YAML
      - name: Login into crates.io
        run: cargo login ${{ secrets.CRATES_IO }}
      - name: Build binaries in "release" mode
        run: cargo build -r
      - name: "Package for crates.io"
        run: cargo package # publishes a package as a tarball
      - name: "Publish to crates.io"
        run: cargo publish # publishes your crate as a library that can be added as a dependency

如果在构建和打包 crate 时出现任何错误,请检查清单 Cargo.toml 文件中的元数据,请参阅“清单格式”。 还应检查 Cargo.lock 文件,请参阅 Cargo.toml 与 Cargo.lock

将工作流数据打包为构件

工作流完成后,就可以上传产生的项目进行分析或在另一个工作流中使用。 可以将这些示例步骤添加到工作流,以上传应用程序供另一个工作流使用。

YAML
      - name: Upload release artifact
        uses: actions/upload-artifact@v4
        with:
          name: <my-app>
          path: target/${{ matrix.BUILD_TARGET }}/<my-app>

若要在不同的作业中使用上传的项目,请确保工作流对仓库具有适当的权限,请参阅 在工作流中使用 GITHUB_TOKEN 进行身份验证。 可以使用以下示例步骤下载在上一工作流中创建的应用并将其发布到该 GitHub工作流。

YAML
      - uses: actions/checkout@v6
      - name: Download release artifact
        uses: actions/download-artifact@v5
        with:
          name: <my-app>
          path: ./<my-app>
      - name: Publish built binary to GitHub releases
      - run: |
          gh release create --generate-notes ./<my-app>/<my-project>#<my-app>