GitHub ActionsとUnity-CIで簡単CIビルド構築WebGL対応版

こちらは [Unity #2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/unity2) の 7日目の記事です

# 概要
- GitHub Actionsでお手軽CI構築
- Unity-CIで即ビルド実行
- WebGL版が出力可能

GitHub Actionsを用いてWebGL版のビルドを作成します
本来はconfig用に細かな設定が必要ですが、
UnityでのActionsを統合したライブラリ [Unity-CI](https://unity-ci.com/docs) の力を借りてお手軽にビルドまで行います
リポジトリがあれば3分でビルドできるようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72975/bd30e609-68f8-0abd-b240-7e15bb586ac2.png)

# GitHub Actionsについて
https://github.co.jp/features/actions
リポジトリの変更に基づいて設定スクリプトを走らせます
設定ファイルはymlファイルで書くことができます
リポジトリページのActionsから実行状況や履歴が確認できます

# Unity-CIについて
https://unity-ci.com/docs
Unity+CIのActionsをまとめており、
GitHubだけでなくGitLabやTravis CIなどとも連携できるようです
今回はUnity-CIの[GitHubのページ](https://unity-ci.com/docs/github/getting-started)を参考にCI構築を行います

# Unityライセンス認証準備
[Unity-CIのアクティベーション](https://unity-ci.com/docs/github/activation)を参考にアクティベーションを行います
1. activation.yml を以下の内容で作成し、.github/workflows以下に置いておきます

```
name: Acquire activation file
on: [push]
jobs:
  activation:
    name: Request manual activation file 🔑
    runs-on: ubuntu-latest
    steps:
      # Request manual activation file
      - name: Request manual activation file
        id: getManualLicenseFile
        uses: webbertakken/unity-request-manual-activation-file@v1.1
        with:
          unityVersion: 2019.2.11f1 # ※使用するUnityのバージョンに一致させます
      # Upload artifact (Unity_vXXXX.X.XXXX.alf)
      - name: Expose as artifact
        uses: actions/upload-artifact@v1
        with:
          name: ${{ steps.getManualLicenseFile.outputs.filePath }}
          path: ${{ steps.getManualLicenseFile.outputs.filePath }}

```

2.コミット・プッシュを行うことでActionが実行され、Action結果のArtifactsにUnity_vXXXX.X.XXXX.alfが生成されます
Unity_vXXXX.X.XXXX.alfをダウンロードしておきましょう

Unity-CIでは[gableroux/unity3d](https://gitlab.com/gableroux/unity3d/)のイメージを使用しているため新しすぎるバージョンは対応していない場合があります
最新バージョンは[こちら](https://gitlab.com/gableroux/unity3d/-/blob/master/.gitlab-ci.yml)から確認できます

3.[マニュアルライセンスページ](https://license.unity3d.com/manual)でUnity_vXXXX.X.XXXX.**alf**をアップロードするとUnity_vXXXX.x.**ulf**がダウンロードできます

4.リポジトリページのSettings > serctes > new repository secret（https://github.com/XX/XX/settings/secrets/actions/new
）を選択
Unity_vXXXX.x.ulfの中身（xml形式）をコピーしValueに貼り付けます
secretの名前は **UNITY_LICENSE** にします

5.このActionは1度実行すればいいため削除しておきます

## WebGLビルド
[ビルドページ](https://unity-ci.com/docs/github/getting-started) を参考にWebGLのビルドを行います
1. main.yml を以下の内容で作成し、.github/workflows以下に置いておきます

```
name: Actions 😎

on:
  pull_request: {}
  push: { branches: [main] }

env:
  UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} ※secretで設定した値が実行時に入ります

jobs:
  build:
    name: Build my project ✨
    runs-on: ubuntu-latest
    steps:
      # Checkout
      - name: Checkout repository
        uses: actions/checkout@v2

      # Cache
      - uses: actions/cache@v1.1.0
        with:
          path: Library
          key: Library

      # Build
      - name: Build project
        uses: webbertakken/unity-builder@v0.10
        with:
          unityVersion: 2019.2.11f1 ※使用するUnityのバージョンに一致させます
          targetPlatform: WebGL

      # Output
      - uses: actions/upload-artifact@v1
        with:
          name: Build
          path: build

```
サンプルからLFSの使用とテストを除いています

2.コミット・プッシュを行うことでActionが実行され、Action結果のArtifactsにWebGLビルドが生成されます
on: の項目で実行のトリガーがコントロールでき、今回はプルリクエストかmainブランチ更新のタイミングで実行されるようになっています

## 補足
### 実行の制限
GitHub Actionsは無料プランで2000分/月まで利用できます
ほぼ空のプロジェクトで10分/1ビルドでした
[料金表](https://docs.github.com/ja/free-pro-team@latest/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions)

### イメージのOS
今回のイメージはUbuntu版を利用しています
Unity-CIは現在Ubuntu版のみサポートしているらしいです
そのためスタンドアローン版はビルドできません
https://unity-ci.com/docs/unity-ci/docker-images
GitHub Actionsそのものは他OS（WindwosやMacOS）も選択できますが利用コストが増えるようです

限定的ではありますがビルドマシンの準備やコストが不要で、
すぐにCIビルド環境が用意できるためゲームジャムでの導入をしてみるのはいかがでしょうか？