はじめに
Githubで保管しているAPIキーを取得してgradle.propertiesに出力する方法が、
他の人の記事を参考にしてもうまくいかなかったので自分の解決策を紹介します。
全コードはこちらから ↓
https://github.com/kuwabara-hirokazu/facial_expression_championship
Githubにキーを登録
①Githubのプロジェクトから Settings >> Secrets に遷移
②右上の「New repository secret」を押して作成したいキーと値を登録する
最初に記述したyml設定(ビルド失敗)
gradle.propertiesにAPIキーのみを記載した。
- 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回目(ビルド失敗)
GithubActionsのログにandroid.useAndroidX=true
を設定しろと記載があったので追加。
Androidプラグインはサポートライブラリの代わりに適切なAndroidXライブラリを使用する
公式より
- 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に増やしてみたところ、成功した。
- 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
にも記載されていたので一応。
まとめ 全体設定
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を参考に作成すればいいだけの話だったというオチでした。