GitHub ActionsでUnityTestRunnerを実行する(GameCI)

GameCIを使ったら、すごく簡単にUnityでもGitHubActionsが使えたのでご紹介します。
英語がわかる方は公式の[Getting Started](https://game.ci/docs/github/getting-started)を見たほうが早いです。  
※ちなみにパーソナルライセンスではビルドができなかったため、本記事には載せていないのですが[v2.0のalpha版](https://github.com/game-ci/unity-builder/issues/204)では使えたので、正式リリースされたら記事を書きます〜

# この記事の対象の方  
- UnityTestRunnerの手動実行に疲れた方  
- チーム開発の生産性をあげたい方
- てっとり早くUnityプロジェクトでGitHub Actionsを使いたい方 ←
- GitHubのVM上でUnity動かしたい方

# 必要な環境
- Unityライセンス(無料のパーソナルでOK)
- Unityプロジェクト
- GitHubActionsが実行可能なGitHubアカウント  

# 実現したいこと
0. GitHubでPushされる
1. 自動でUnityTestRunnerが走る
2. 結果ファイルがダウンロードできる

# ビルドまでの道
準備は２つで、あとはトリガーに従ってテストとビルドが実行されます。  
- ymlの用意
- Unityアクティベート  

## 必要なymlを用意
`.github/workflows/` 配下に2つのファイルを配置してmainブランチとマージしてください。
サンプルはこの環境で設定しています。
UnityVersion: 2019.4.5f1
ビルドターゲット: Android

- activation.yml  
GitHubActionsのVM上でUnityを動かせるようにライセンスと紐付けます

```yml:activation.yml  
name: Acquire activation file
# Work when you need
on: workflow_dispatch 

jobs:
  activation:
    name: Request manual activation file 🔑
    runs-on: ubuntu-latest
    steps:
     # R:equest manual activation file
    - name: Request manual activation file
      id: getManualLicenseFile
      uses: webbertakken/unity-request-manual-activation-file@v1.2
      with:
        unityVersion: 2019.4.5f1
    - name: Expose as artifact
      uses: actions/upload-artifact@v1
      with:
        name: ${{ steps.getManualLicenseFile.outputs.filePath }}
        path: ${{ steps.getManualLicenseFile.outputs.filePath }} 
```  
- main.yml  
テスト実行とビルドをしてくれます。  
デフォルトだとEditTest, PlayTestの両方が実行されます。  


```yml:main.yml
name: Unity Workflow Sample
on: [push]
env:
  UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}

jobs:
  setup:
    runs-on: ubuntu-latest
    steps:
     - name: Checkout repository
       uses: actions/checkout@v2
       with:
         lfs: true

     - uses: webbertakken/unity-test-runner@v1.4
       with:
        unityVersion: 2019.4.5f1

     - uses: actions/upload-artifact@v1
       with:
        name: Test results
        path: artifacts
```

## Unityアクティベート
### パーソナル(無料)の方
1. GitHub のActionsタブからactivation.ymlを実行(Run workflow)します。
![スクリーンショット 2021-02-13 16.21.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243925/297e9439-89d1-c74f-e484-f4f5d3b42642.png)
2. alfファイルをダウンロードしてきます。
![スクリーンショット 2021-02-13 16.42.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243925/0e3af3a8-8a1d-b792-9117-a8f65c46d0c4.png)
3. [license.unity3d.com](https://license.unity3d.com/manual)でalfファイルをアップロードします。そうするとulfファイルがもらえます。
4. urlファイルの中身をコピーしてをGithubの `Settings` > `Secrets`で`UNITY_LICENSE`に貼り付ける

### プロフェッショナルの方
必要情報をSecretsに詰めるだけでかんたんです。  [公式ドキュメント](https://game.ci/docs/github/activation#Professional%20license)に従って入力してください。

## 動作結果
あとはGitHubActionsのトリガーを実行するだけです。
何かしらpushがあったときに、`main.yml`が動きます。
テスト結果がartifactsにアップロードされています。 
![スクリーンショット 2021-02-13 18.19.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243925/ea369f0f-bb1d-d64b-bbbf-cfe2ffe4badb.png)
 
## 所感
UnityTestRunnerが動くようになったので、
PRで「自動テストちゃんと直しましたか？」という質問はいらなくなりまたね。
あとテスト結果を見やすくしたいですね...

## ビルドはしばしお待ち下さい
パーソナルライセンスでのビルドが今失敗してしまいますが、v2.0では修正されています。
[こちら](https://github.com/game-ci/unity-builder/issues/204)を参考にビルドも作ってみてください。


## 参考

[GameCI](https://game.ci/docs)