Open7

【GitHub Actions】Macでself-hosted runnerとしてUnityプロジェクトをビルドする

だーら(Flamers / Memotia)だーら(Flamers / Memotia)

まずローカルのコマンドでUnityビルドを行う

  • ビルドスクリプトは、参考にはったURLをご確認
  • ターミナルでコマンドを実行
/Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile ~/Projects/UnitySamples/CICDBuildSample/Logs/Build/build.log -projectPath ~/Projects/UnitySamples/CICDBuildSample -executeMethod MacBuild.BuildReleaseMac -nographics
  • できてた!

参考

https://qiita.com/sango/items/474efb4c016a136c84ce

だーら(Flamers / Memotia)だーら(Flamers / Memotia)

GitHub Actionsの設定

Runnerへの登録作業

  • Settings > Actions > Runnersから登録

    その後表示されたコマンドの、DownloadとConfigureを入力し設定完了!
~/actions-runner
$ ./run.sh

√ Connected to GitHub

Current runner version: '2.306.0'
2023-07-23 02:23:59Z: Listening for Jobs

参考

https://developer.mamezou-tech.com/blogs/2022/08/05/setup-github-actions-self-hosted-runner/

だーら(Flamers / Memotia)だーら(Flamers / Memotia)

簡単なJob実行

  • 簡単なJobを設定して、実行してみる
  • pushではなく、ボタンをトリガーとする
    • (nameのBuild for Macは全くの嘘になったw)
name: Build for Mac
on: workflow_dispatch
jobs:
  Build:
    runs-on: self-hosted
    steps:
      - run: echo "Hello World"

runs-onの設定について

  • なお、runs-on: Dara-MacBook-ProとしたところJobは実行されなかった。runs-onで指定するのはRunner自体の名前ではなく、labelを指定する必要がある模様。
  • 試しに、Dara-MacBook-ProのRunnerに、dara-macbook-proのラベルをつけ、ymlでruns-on: dara-macbook-proとしたところ、実行された

参考

だーら(Flamers / Memotia)だーら(Flamers / Memotia)

GitHub Actionにおけるcheckoutの挙動調査

  • ローカル・リモートのブランチの状況がどのように反映されるのかを検証する
  • 追記: このセクションの、リモートのブランチがpullされていないように見える現象は、runコマンドが間違っていることが原因

スクリプトはこちら

name: Build for Mac
on: workflow_dispatch
jobs:
  Build:
    runs-on: dara-macbook-pro
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          clean: false
      - name: Build
        run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile ~/Projects/UnitySamples/CICDBuildSample/Logs/Build/build.log -projectPath ~/Projects/UnitySamples/CICDBuildSample -executeMethod MacBuild.BuildReleaseMac -nographics

実験

  • mainとchangedというブランチを2つ作成し、changedに変更を加える。ビルドを起動すると、mainなのかchangedなのか分かるようにする
番号 ローカルブランチ リモートの状況 ビルド指示 ビルド結果
changed changedはpush済みで、mainへ未マージ ローカルUnityEditor changed(当たり前)
changed GitHub Action / use workflow from "main" changed
main main
changed GitHub Action / use workflow from "changed" changed
main GitHub Action / use workflow from "changed" main
main changedブランチをmainへマージ GitHub Actions / use workflow from "main" main(変更前)
  • ②の実行画面の画像

上記実験から分かること

  • ②と③の比較: (リモートとローカルのブランチ状況に差がない前提で)ローカルブランチの変更が反映される
  • ⑥について: pullの設定がうまくできていないのでは?
  • 実験結果から分かることではないが、use workflow fromの設定は、安定したらmain固定でよさそう
だーら(Flamers / Memotia)だーら(Flamers / Memotia)

workflowのコマンドを見直して、リモートの変更が反映されるようになった

  • 上記のでは、runコマンドで指定しているプロジェクトが、action-runnerの下ではなく、~/Projectsという全く関係ない場所を指していた。
  • action-runnerによって管轄されているプロジェクトを参照するように変更した(そもそもaction-runnerによって、~/Projects配下とは別の場所にもう一つUnityProjectができているということを知らなかった)
build.yml
- name: Build
  run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile -projectPath . -executeMethod MacBuild.BuildReleaseMac -nographics -logFile
  • ~/Projects配下のUnityProjectのmainブランチが古い状態 & リモートのmainブランチが新しい状態で、GitHub Actions経由でビルド
    • 結果: ~/action-runner配下のプロジェクト内にビルドが出力され、最新mainになっていた(このときも~/Projects配下のUnityプロジェクトのmainブランチは古いまま)
    • 完全に独立して動いていることが分かる
だーら(Flamers / Memotia)だーら(Flamers / Memotia)

同じワークフローで、複数のプラットフォーム向けのビルドを作成する

  • workflow_dispatchを押したら、Windows/Mac等の複数のビルドを走らせる
  • その際、Switch Platformを用いずに、プラットフォームごとにプロジェクトを作成する
    • 理由: プラットフォームを切り替える際にコンパイルなどが走る。「コンパイル処理が終了するのを待つ」などをやるとビルドが不安定になりやすい。

実装

build.yml
name: Build All Platform
on: workflow_dispatch
jobs:
  Build:
    runs-on: dara-macbook-pro
    steps:
    - name: Checkout-Windows
      uses: actions/checkout@v3
      with:
        clean: false
        path: PlatformWindows
    - name: Checkout-Mac
      uses: actions/checkout@v3
      with:
        clean: false
        path: PlatformMac
    - name: BuildWindows
      run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile -projectPath ./PlatformWindows -executeMethod Build.BuildReleaseWindows -nographics -logFile
    - name: BuildMac
      run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile -projectPath ./PlatformMac -executeMethod Build.BuildReleaseMac -nographics -logFile

結果

  • ターゲットプラットフォームごとのUnityプロジェクトが作成される
    • 最初の1回は、プラットフォームが指定のものになっていないことがある。その場合、手動でUnityプロジェクトを起動し、プラットフォームを切り替えてから終了する。