私たちの Rust
プログラムが異なるプラットフォームやアーキテクチャにコンパイルする必要があるとき、一つずつコンパイルするのは非常に面倒です。しかし、GitHub Actionsを使用してコンパイルする場合は非常に簡単です。特に、他のシステム環境でコンパイルする条件がないとき、GitHub Actions はまさに神のような存在です。
GitHub Actions 設定ファイル
# GitHub Actionsワークフロー設定ファイル
name: Build and Release
on:
push:
tags:
- "v*.*.*" # v*.*.*のパターンに一致するタグをプッシュしたときにワークフローをトリガー
jobs:
build:
runs-on: ${{ matrix.os }} # ジョブが実行されるオペレーティングシステムを定義
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest] # オペレーティングシステムのマトリックスを定義
arch: [x86_64, aarch64] # アーキテクチャのマトリックスを定義
steps:
- name: Checkout code
uses: actions/checkout@v2 # リポジトリのコードをチェックアウト
- name: Set up Rust
uses: actions-rs/toolchain@v1 # Rustツールチェーンを設定
with:
toolchain: stable # 安定版Rustツールチェーンを使用
profile: minimal # 最小限の設定ファイルを使用
override: true # 既存のRustツールチェーン設定を上書き
- name: Build project
run: cargo build --release # プロジェクトのリリース版をビルド
# Linux x86_64プラットフォームのビルド成果物をアップロード
- name: Upload artifact (Linux)
if: matrix.os == 'ubuntu-latest' && matrix.arch == 'x86_64'
uses: actions/upload-artifact@v2
with:
name: ubuntu-latest-heaven
path: target/release/heaven
# Linux aarch64プラットフォームのビルド成果物をアップロード
- name: Upload artifact (Linux aarch64)
if: matrix.os == 'ubuntu-latest' && matrix.arch == 'aarch64'
uses: actions/upload-artifact@v2
with:
name: ubuntu-latest-heaven-aarch64
path: target/release/heaven
# macOS x86_64プラットフォームのビルド成果物をアップロード
- name: Upload artifact (macOS)
if: matrix.os == 'macos-latest' && matrix.arch == 'x86_64'
uses: actions/upload-artifact@v2
with:
name: macos-latest-heaven
path: target/release/heaven
# macOS aarch64プラットフォームのビルド成果物をアップロード
- name: Upload artifact (macOS aarch64)
if: matrix.os == 'macos-latest' && matrix.arch == 'aarch64'
uses: actions/upload-artifact@v2
with:
name: macos-latest-heaven-aarch64
path: target/release/heaven
# Windows x86_64プラットフォームのビルド成果物をアップロード
- name: Upload artifact (Windows)
if: matrix.os == 'windows-latest' && matrix.arch == 'x86_64'
uses: actions/upload-artifact@v2
with:
name: windows-latest-heaven
path: target/release/heaven.exe
# Windows aarch64プラットフォームのビルド成果物をアップロード
- name: Upload artifact (Windows aarch64)
if: matrix.os == 'windows-latest' && matrix.arch == 'aarch64'
uses: actions/upload-artifact@v2
with:
name: windows-latest-heaven-aarch64
path: target/release/heaven.exe
release:
runs-on: ubuntu-latest # ジョブがUbuntuシステム上で実行されることを定義
needs: build # buildジョブに依存
steps:
- name: Checkout code
uses: actions/checkout@v2 # リポジトリのコードをチェックアウト
# Linux x86_64プラットフォームのビルド成果物をダウンロード
- name: Download artifact (Linux-x86_64)
uses: actions/download-artifact@v2
with:
name: ubuntu-latest-heaven
path: artifacts/ubuntu
# macOS x86_64プラットフォームのビルド成果物をダウンロード
- name: Download artifact (macOS-x86_64)
uses: actions/download-artifact@v2
with:
name: macos-latest-heaven
path: artifacts/macos
# Windows x86_64プラットフォームのビルド成果物をダウンロード
- name: Download artifact (Windows-x86_64)
uses: actions/download-artifact@v2
with:
name: windows-latest-heaven
path: artifacts/windows
# Linux aarch64プラットフォームのビルド成果物をダウンロード
- name: Download artifact (Linux-aarch64)
uses: actions/download-artifact@v2
with:
name: ubuntu-latest-heaven-aarch64
path: artifacts/ubuntu
# macOS aarch64プラットフォームのビルド成果物をダウンロード
- name: Download artifact (macOS-aarch64)
uses: actions/download-artifact@v2
with:
name: macos-latest-heaven-aarch64
path: artifacts/macos
# Windows aarch64プラットフォームのビルド成果物をダウンロード
- name: Download artifact (Windows-aarch64)
uses: actions/download-artifact@v2
with:
name: windows-latest-heaven-aarch64
path: artifacts/windows
- name: Create release
id: create_release
uses: actions/create-release@v1 # GitHubリリースを作成
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} # GitHubトークンを使用して認証
with:
tag_name: ${{ github.ref }} # プッシュされたタグ名を使用
release_name: Release ${{ github.ref }} # プッシュされたタグ名をリリース名として使用
body: |
このリリースの変更
- 最初の変更
- 2番目の変更 # リリースノート
draft: false # 草稿かどうか
prerelease: false # プレリリースかどうか
# Linux x86_64プラットフォームのビルド成果物をリリースページにアップロード
- name: Upload Linux x86_64 artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} # GitHubトークンを使用して認証
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # リリース作成ステップで生成されたアップロードURLを使用
asset_path: artifacts/ubuntu/heaven # アップロードするファイルのパス
asset_name: heaven-linux-x86_64 # アップロードするファイル名
asset_content_type: application/octet-stream # ファイルの内容タイプ
# macOS x86_64プラットフォームのビルド成果物をリリースページにアップロード
- name: Upload macOS x86_64 artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} # GitHubトークンを使用して認証
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # リリース作成ステップで生成されたアップロードURLを使用
asset_path: artifacts/macos/heaven # アップロードするファイルのパス
asset_name: heaven-macos-x86_64 # アップロードするファイル名
asset_content_type: application/octet-stream # ファイルの内容タイプ
# Windows x86_64プラットフォームのビルド成果物をリリースページにアップロード
- name: Upload Windows x86_64 artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} # GitHubトークンを使用して認証
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # リリース作成ステップで生成されたアップロードURLを使用
asset_path: artifacts/windows/heaven.exe # アップロードするファイルのパス
asset_name: heaven-windows-x86_64.exe # アップロードするファイル名
asset_content_type: application/octet-stream # ファイルの内容タイプ
# Linux aarch64プラットフォームのビルド成果物をリリースページにアップロード
- name: Upload Linux aarch64 artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} # GitHubトークンを使用して認証
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # リリース作成ステップで生成されたアップロードURLを使用
asset_path: artifacts/ubuntu/heaven # アップロードするファイルのパス
asset_name: heaven-linux-aarch64 # アップロードするファイル名
asset_content_type: application/octet-stream # ファイルの内容タイプ
# macOS aarch64プラットフォームのビルド成果物をリリースページにアップロード
- name: Upload macOS aarch64 artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} # GitHubトークンを使用して認証
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # リリース作成ステップで生成されたアップロードURLを使用
asset_path: artifacts/macos/heaven # アップロードするファイルのパス
asset_name: heaven-macos-aarch64 # アップロードするファイル名
asset_content_type: application/octet-stream # ファイルの内容タイプ
# Windows aarch64プラットフォームのビルド成果物をリリースページにアップロード
- name: Upload Windows aarch64 artifact
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} # GitHubトークンを使用して認証
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # リリース作成ステップで生成されたアップロードURLを使用
asset_path: artifacts/windows/heaven.exe # アップロードするファイルのパス
asset_name: heaven-windows-aarch64.exe # アップロードするファイル名
asset_content_type: application/octet-stream # ファイルの内容タイプ
この GitHub Actions 設定ファイルでは、以下のモジュール(actions)を使用しました:
-
actions/checkout@v2:リポジトリのコードをチェックアウトするために使用します。
- name: Checkout code uses: actions/checkout@v2
-
actions-rs/toolchain@v1:Rust ツールチェーンを設定するために使用します。
- name: Set up Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true
-
actions/upload-artifact@v2:ビルド成果物をワークフローのアーティファクトとしてアップロードするために使用します。
- name: Upload artifact (Linux) uses: actions/upload-artifact@v2 with: name: ubuntu-latest-heaven path: target/release/heaven
-
actions/download-artifact@v2:前のステップでアップロードされたアーティファクトをダウンロードするために使用します。
- name: Download artifact (Linux-x86_64) uses: actions/download-artifact@v2 with: name: ubuntu-latest-heaven path: artifacts/ubuntu
-
actions/create-release@v1:GitHub Release を作成するために使用します。
- name: Create release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} body: | このリリースの変更 - 最初の変更 - 2番目の変更 draft: false prerelease: false
-
actions/upload-release-asset@v1:ビルド成果物を GitHub Release にアップロードするために使用します。
- name: Upload Linux x86_64 artifact uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: artifacts/ubuntu/heaven asset_name: heaven-linux-x86_64 asset_content_type: application/octet-stream
これらのモジュール(actions)は、コードのチェックアウト、Rust 環境の設定、ビルド成果物のアップロードとダウンロード、GitHub Release の作成、そして成果物をリリースに公開するための完全なプロセスを提供します。