はじめに
このガイドでは、Rust パッケージのビルド、テスト、公開の方法について説明します。
GitHub ホステッド ランナーにはプレインストールされたソフトウェアのあるツール キャッシュがあり、Rust 用の依存関係が含まれています。 最新のソフトウェアの完全な一覧と、プレインストールされたバージョンの Rust については、「GitHub ホステッド ランナーの概要」を参照してください。
前提条件
YAMLの構文と、GitHub ActionsでのYAMLの使われ方に馴染んでいる必要があります。 詳しくは、「GitHub Actions のワークフロー構文」をご覧ください。
Rust 言語の基本を理解しておくことをお勧めします。 詳細については、「Rust の概要」を参照してください。
Rust ワークフロー テンプレートを使用する
すぐに開始するには、リポジトリの .github/workflows
ディレクトリにワークフロー テンプレートを追加します。
GitHub には、ほとんどの基本的な Rust プロジェクトに使用できる Rust ワークフロー テンプレートが用意されています。 このガイドの以降のセクションでは、このワークフロー テンプレートをカスタマイズする方法の例を示します。
-
GitHub で、リポジトリのメイン ページに移動します。
-
リポジトリ名の下にある [アクション] をクリックします。
-
ワークフローが既にリポジトリ内にある場合は、 [新しいワークフロー] をクリックします。
-
[ワークフローの選択] ページには、推奨されるワークフロー テンプレートの選択が表示されます。 「Rust」を検索します。
-
[継続的インテグレーション] をクリックして、ワークフローの選択をフィルター処理します。
-
[Rust - by GitHub Actions] ワークフローで [Configure] をクリックします。
-
必要に応じてワークフローを編集します。 たとえば、Rust のバージョンを変更します。
-
[変更をコミットする] をクリックします。
rust.yml
ワークフロー ファイルがリポジトリの .github/workflows
ディレクトリに追加されます。
Rust のバージョンを指定する
GitHub ホステッド ランナーには、Rust ツールチェーンの最新バージョンが含まれています。 rustup を使って、ランナーにインストールされているバージョンの確認、バージョンのオーバーライド、さまざまなツールチェーンのインストールを行うことができます。 詳細については、rustup ブックを参照してください。
この例では、Rust の夜間ビルドを使い、バージョンを報告するようにランナー環境を設定するために使用できる手順を示します。
- name: Temporarily modify the rust toolchain version run: rustup override set nightly - name: Output rust version for educational purposes run: rustup --version
- name: Temporarily modify the rust toolchain version
run: rustup override set nightly
- name: Output rust version for educational purposes
run: rustup --version
依存関係のキャッシング
[Cache] アクションを使って、依存関係をキャッシュおよび復元できます。 この例では、リポジトリに Cargo.lock
ファイルが含まれていることを前提としています。
- name: Cache - uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Cache
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
カスタム要件がある場合、またはキャッシュをより細かく制御する必要がある場合は、cache
アクションの他の構成オプションについて確認することをお勧めします。 詳しくは、「依存関係をキャッシュしてワークフローのスピードを上げる」をご覧ください。
コードのビルドとテスト
ローカルで使うのと同じコマンドを、コードのビルドとテストに使えます。 このワークフローの例では、ジョブで cargo build
と cargo test
を使う方法を示します。
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@v4 - 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 }}
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@v4
- 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 プロフィールに対応します。 Cargo.toml
ファイルで定義した任意のプロフィールを使用できます。
パッケージまたはライブラリを crates.io に公開する
コードをビルドしてテストするワークフローを設定したら、シークレットを使って crates.io にログインし、パッケージを公開できます。
- 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
- 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
クレートのビルドとパッケージ化のときにエラーが発生した場合は、マニフェスト Cargo.toml
ファイル内のメタデータをチェックします。「The Manifest Format」(マニフェストの形式) を参照してください。 Cargo.lock
ファイルもチェックすることをお勧めします。「Cargo.toml vs Cargo.lock」(Cargo.toml と Cargo.lock) を参照してください。
成果物としてのワークフローのデータのパッケージ化
ワークフローが完了したら、結果の成果物を分析のためにアップロードすることや、別のワークフローで使うことができます。 これらのステップ例をワークフローに追加して、別のワークフローで使うアプリケーションをアップロードできます。
- name: Upload release artifact uses: actions/upload-artifact@v4 with: name: <my-app> path: target/${{ matrix.BUILD_TARGET }}/<my-app>
- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: <my-app>
path: target/${{ matrix.BUILD_TARGET }}/<my-app>
アップロードされた成果物を別のジョブで使うには、リポジトリに対する適切なアクセス許可をワークフローに付与する必要があります。「自動トークン認証」を参照してください。 これらのステップ例を実行して、前のワークフローで作成したアプリをダウンロードし、それを GitHub で公開できます。
- uses: actions/checkout@v4 - name: Download release artifact uses: actions/download-artifact@v4 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>
- uses: actions/checkout@v4
- name: Download release artifact
uses: actions/download-artifact@v4
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>