【Github Actions】gradle.propertiesの設定方法

## はじめに
Githubで保管しているAPIキーを取得してgradle.propertiesに出力する方法が、
他の人の記事を参考にしてもうまくいかなかったので自分の解決策を紹介します。

全コードはこちらから ↓
https://github.com/kuwabara-hirokazu/facial_expression_championship

## Githubにキーを登録
①Githubのプロジェクトから Settings >> Secrets に遷移
②右上の「New repository secret」を押して作成したいキーと値を登録する
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/20fdc473-31fd-b421-5b86-6fc5bde8be61.png" width=80%>

## 最初に記述したyml設定（ビルド失敗）
gradle.propertiesにAPIキーのみを記載した。

```yaml:check_push.yml
- name: Restore gradle.properties
  env:
    FACE_API_KEY: ${{ secrets.FACE_API_KEY }}
  # ${{ secrets.キー名 }} でGithub上に登録してあるキーの値を取得できる。
  run:
    echo "faceApiKey=$FACE_API_KEY" >> ./gradle.properties
  # 「faceApiKey=***」をgradle.propertiesに記載
```

## 修正1回目（ビルド失敗）
![スクリーンショット 2021-12-05 13.53.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/9e64170b-d1f3-505d-7e4a-bc0a6336cc67.png)
GithubActionsのログに`android.useAndroidX=true`を設定しろと記載があったので追加。
>Androidプラグインはサポートライブラリの代わりに適切なAndroidXライブラリを使用する
[公式より](https://developer.android.com/jetpack/androidx/migrate#migrate_an_existing_project_using_android_studio)

```yaml:check_push.yml
- name: Restore gradle.properties
  env:
    FACE_API_KEY: ${{ secrets.FACE_API_KEY }}
  run: |
 # 下記を追加    
    echo "android.useAndroidX=true" >> ./gradle.properties
    echo "faceApiKey=$FACE_API_KEY" >> ./gradle.properties
```

## 修正2回目（ビルド成功）
再度ログをよく見てみると
`Daemon will be stopped at the end of the build after running out of JVM memory`や`Caused by: java.lang.OutOfMemoryError: Metaspace`という記載があったので、
もしやと思い`org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8`を追加してGradleデーモンの最大ヒープサイズを2048MBに増やしてみたところ、成功した。

```yaml:check_push.yml
- name: Restore gradle.properties
  env:
    FACE_API_KEY: ${{ secrets.FACE_API_KEY }}
  run:
    echo "android.useAndroidX=true" >> ./gradle.properties
    echo "org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8" >> ./gradle.properties
    echo "faceApiKey=$FACE_API_KEY" >> ./gradle.properties
```

`-Dfile.encoding=UTF-8`はなくてもいいかもしれないけど、ローカルビルド時に自動作成された`./gradle.properties`にも記載されていたので一応。


## まとめ 全体設定
```yaml:check_push.yml
name: Check push
on: [ push ]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      # チェックアウト
      - name: Check out
        uses: actions/checkout@v2

      # JDKのセットアップ
      - name: set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      # Gradleのキャッシュ復元（2回目以降の実行が早くなる）
      - name: Gradle cache
        uses: actions/cache@v2
        with:
          path: ~/.gradle/caches
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
          restore-keys: |
            ${{ runner.os }}-gradle-

      # APIキーを取得してgradle.propertiesに出力
      - name: Restore gradle.properties
        env:
          FACE_API_KEY: ${{ secrets.FACE_API_KEY }}
        run: |
          echo "android.useAndroidX=true" >> ./gradle.properties
          echo "org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8" >> ./gradle.properties
          echo "faceApiKey=$FACE_API_KEY" >> ./gradle.properties

      # テスト実行
      - name: UnitTest
        run: ./gradlew testDebugUnitTest

```

## おわりに
Yaml自体初めてさわったので書き方という点でもめちゃくちゃ苦しんでたけど、
ローカルビルド時に自動作成された./gradle.propertiesを参考に作成すればいいだけの話だったというオチでした。