UnityとGithubActionsを使って自動テストをセットアップする手順の備忘録

# 概要
* GithubActionsでUnityTestRunnner実行と結果を出力するまでの手順をまとめました
* 作業した手順の備忘録です
* 細かい説明は記事の最下部にある参考リンクを参照してください

# 環境
* Windows10 Home
* Unity 2018.4.19f1

# 事前準備

## ALF作成
* GitHubでALF作成用プライベートリポジトリ作成
* .github/workflowsフォルダ以下にCreateLicenseALF.yamlを作成
* 内容は以下

```yaml:CreateLicenseALF.yaml

name: Create ALF File

on: push

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        unity-version: [2018.4.19f1]

    container: docker://gableroux/unity3d:${{ matrix.unity-version }}

    steps:
    - run: mkdir artifact
    # 1.Unityを起動してALFファルを作成
    - run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -logfile -createManualActivationFile || exit 0
    - run: cp "Unity_v${{ matrix.unity-version }}.alf" artifact
    # 出力
    - uses: actions/upload-artifact@v2
      with:
        name: ${{ matrix.unity-version }}
        path: artifact
```

* 少し待つとALF作成用リポジトリのActionsタブに実行結果が表示される
* 正常に完了するとArtifactsに作成されたALFファイルが表示されるのでダウンロード
* zipファイルになっています

## ULFファイルの取得
* 以下を開く
    * https://license.unity3d.com/manual
* 先ほどダウンロードしたzipを解凍してALFファイルをアップロード
* いくつかの質問に答えたらULFファイルがダウンロード出来るようになるのでULFファイルを保存
* 以降ALF作成用プライベートリポジトリは、使用しません(何かをプッシュするたびALFファイルが作成されてしまうため)

## テストを行うUnityプロジェクトの作成とリポジトリの作成(必要な場合)
* テストを行う用のUnityプロジェクトを新規作成します
* UnityプロジェクトにPlayModeとEditModeのテストコードを追加
* テストを行う用のリポジトリを新規作成します

## ULFファイルをSecretsに設定する
* 以降はテストを行う用のUnityプロジェクト・リポジトリに移動して作業を行います。
* テストを行う用リポジトリの Settings > Secrets を開く
* ページ右上のNew repository secretを押す
* Nameに「UNITY_LICENSE」を入れ、先ほどのULFファイルの中身をまるっとValueにコピペします
* Add secret を押下で設定完了です

## テストを行う用のリポジトリにテスト用yaml追加
* .github/workflowsフォルダ以下にUnityTest.yamlを作成
* 内容は以下

```yaml:UnityTest.yaml
name: UnityTest

on: push

env:
  UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
  PROJECT_ROOT: .

jobs:
  testAllModes:
    name: Test in ${{ matrix.testMode }} on version ${{ matrix.unityVersion }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        unityVersion:
          - 2018.4.19f1
        testMode:
          - playmode
          - editmode
    steps:
      - uses: actions/checkout@v1
        with:
          lfs: true

      - uses: actions/cache@v1.1.0
        with:
          path: ${{ env.PROJECT_ROOT }}/Library
          key: Library-${{ env.PROJECT_ROOT }}

      - uses: webbertakken/unity-test-runner@v1.4
        id: tests
        with:
          projectPath: ${{ env.PROJECT_ROOT }}
          unityVersion: ${{ matrix.unityVersion }}
          testMode: ${{ matrix.testMode }}
          artifactsPath: ${{ matrix.testMode }}-artifacts

      - uses: actions/upload-artifact@v1
        with:
          name: Test results for ${{ matrix.testMode }}
          path: ${{ steps.tests.outputs.artifactsPath }}
```

* 少し待つとテストを行う用のリポジトリ内Actionsタブに実行結果が表示される
* 正常に完了するとArtifactsにテスト結果が表示されます
* 以下の2ファイルが表示されていれば成功です
    * Test results for editmode
    * Test results for playmode
* zipファイルになっています
* 解凍すると中にテスト結果がxmlに書き出されています
    * editmode-results.xml
    * playmode-results.xml

# 参考リンク
* 【Unity】GithubActionsでUnityを起動してTestRunner実行後の結果を出力するまでの手順
    * https://qiita.com/ohbashunsuke/items/63f0007067a070869ca8

* 【Unity】GitHub Actions v2でUnity Test Runnerを走らせて、結果をSlackに報告する【入門】
    * https://qiita.com/pCYSl5EDgo/items/690dd56ffb0fcf64e70b

* Unityでエディタ拡張を作っている人向けの「GitHub Actionsを使ったCI構築」
    * https://qiita.com/Sokuhatiku/items/5b80b133e559893adc45