貧乏Unity 開発環境 lfsやgame-ciなど

ちゃんとした業務開発ではあんまり役に立たない知識を授けます

LFS

GitLFSは入れておきたい。なんだかんだアセットの容量はバカにならないし、LFSは使いたいもののGitHub LFSは高い。帯域に課金されるのが辛くて、GitHubActionsを使う時毎回帯域を消費するのがちょっと残念。

UnityVersionControlを使ってみたものの、操作ミスでデータをすべて吹き飛ばすということを二回やらかしたのであきらめた。大規模開発なら使った方が良いのだろうが、ファイルロックも特に必要ないのでGitも使いたい

※git lfs 2.0からファイルロック機能も提供されているらしい

どうしたものかと思っていたが、この記事がいい感じだった。 qiita.com

Googleで課金していて2TB使えるストレージがあるし、かなり良さそうだと思った。rclone周りでちょっと手間取ったが使えるようになった。

game-ci

今一人で作業しているので、正直必要はないのだが、サーバーサイド出身の人間は自動テスト×デプロイの環境が無いと落ち着かないのだ。

TDDっぽい開発フローを採用しているので一応入れておく。なんだかんだ入れておくとgitのpush忘れとかも気づけたりするので良いんじゃないだろうか

github actionでlfsを動かす

LFSをGoogleDriveで代用するのはいいがそれでGithub Actions側でLFS対象ファイルが取れないのは後々困りそうなので対応。

github.com

これをベースに

C:\Users\hogehoge> rclone config file
Configuration file is stored at:
C:\Users\hogehoge\AppData\Roaming\rclone\rclone.conf

で場所が分かるのでこのファイルをwslにもっていって

$ base64 -w 0 rclone.conf

で出た値をRCLONE_CONFIGにいれて、ciを

name: unity-ci
on:
  workflow_dispatch: {}
jobs:
  test:
    name: test
    runs-on: ubuntu-latest
    steps:
    - name: set rclone
      uses: AnimMouse/setup-rclone@v1
      with:
        rclone_config: ${{ secrets.RCLONE_CONFIG }}
    - name: set git-lfs-agent-rclone 
      run: |
        wget https://github.com/funatsufumiya/git-lfs-agent-rclone/releases/download/v0.0.2/git-lfs-agent-rclone_v0.0.2_linux_x64.zip
        unzip git-lfs-agent-rclone_v0.0.2_linux_x64.zip
        mv git-lfs-agent-rclone /usr/local/bin/git-lfs-agent-rclone
    - run: |
        git config --global lfs.standalonetransferagent rclone
        git config --global lfs.customtransfer.rclone.path git-lfs-agent-rclone
        git config --global lfs.customtransfer.rclone.args $場所
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    - name: Checkout
      uses: actions/checkout@v4
      with:
        lfs: true
    - name: test
      uses: game-ci/unity-test-runner@v4
      env:
        UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
        UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
        UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
      with:
        projectPath: ./
        githubToken: ${{ secrets.GITHUB_TOKEN }}

のように書いて完了。lfs: trueを利かせる前にもろもろのconfigを設定することと、checkoutをする前はリポジトリのフォルダが無くてlocalに設定できないので、--global をつけておくことがミソ

ビルドして配布したりとか、マシンをself-hosted runnerに差し替えて諸々のファイル(Libraryなど)をキャッシュしたりとかを今後はしていく