oboard

oboard

https://oboard.eu.org/
github
email
tg_channel
medium
twitter
bilibili
steam_profiles
follow

GitHub Actionsを使用してRustを各プラットフォームにコンパイルする

私たちの Rust プログラムが異なるプラットフォームやアーキテクチャにコンパイルする必要があるとき、一つずつコンパイルするのは非常に面倒です。しかし、GitHub Actionsを使用してコンパイルする場合は非常に簡単です。特に、他のシステム環境でコンパイルする条件がないとき、GitHub Actions はまさに神のような存在です。

GitHub Actions 設定ファイル

image

# 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 # ファイルの内容タイプ

image

image

この GitHub Actions 設定ファイルでは、以下のモジュール(actions)を使用しました:

  1. actions/checkout@v2:リポジトリのコードをチェックアウトするために使用します。

    - name: Checkout code
      uses: actions/checkout@v2
    
  2. actions-rs/toolchain@v1:Rust ツールチェーンを設定するために使用します。

    - name: Set up Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        profile: minimal
        override: true
    
  3. actions/upload-artifact@v2:ビルド成果物をワークフローのアーティファクトとしてアップロードするために使用します。

    - name: Upload artifact (Linux)
      uses: actions/upload-artifact@v2
      with:
        name: ubuntu-latest-heaven
        path: target/release/heaven
    
  4. actions/download-artifact@v2:前のステップでアップロードされたアーティファクトをダウンロードするために使用します。

    - name: Download artifact (Linux-x86_64)
      uses: actions/download-artifact@v2
      with:
        name: ubuntu-latest-heaven
        path: artifacts/ubuntu
    
  5. 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
    
  6. 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 の作成、そして成果物をリリースに公開するための完全なプロセスを提供します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。