🐙
Android アプリの起動チェックを行う GitHub Actions ワークフロー
ネタです。
GitHub Actions の runner 上のエミュレーターで、アプリが正常に起動できるかのみをチェックするワークフローです。Renovate や Dependabot のようなボットが作成するプルリクで動かすと、少なくとも起動できるところまではこのワークフローで担保できるのでよいかも。
普通に Espresso 等で起動を確認するテストコードを用意してもよいのですがネタなのでw
name: Launch Check
on: pull_request
jobs:
check:
runs-on: macos-latest
steps:
- name: Check out
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: 17
- name: Build with Gradle
run: ./gradlew assembleDebug
- name: Set up Maestro
run: export MAESTRO_VERSION=1.33.1; curl -Ls https://get.maestro.mobile.dev | bash
- name: Get apk path
id: apk-path
run: echo "path=$(find . -regex '^.*/build/outputs/apk/.*\.apk$' -type f | head -1)" >> $GITHUB_OUTPUT
- name: Create test code
run: |
tool="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/apkanalyzer"
application_id="$("$tool" manifest application-id '${{ steps.apk-path.outputs.path }}')"
echo "appId: $application_id" >> ./flow.yaml
echo '---' >> ./flow.yaml
echo '- launchApp' >> ./flow.yaml
echo '- assertVisible: Hello, Android' >> ./flow.yaml # 起動後の画面に表示される文言を指定
- name: Run Maestro
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 28
target: 'google_apis'
arch: 'x86'
profile: 'pixel'
disable-animations: true
script: |
$ANDROID_HOME/platform-tools/adb install '${{ steps.apk-path.outputs.path }}'
~/.maestro/bin/maestro test --no-ansi ./flow.yaml
Maestro を利用して起動の確認を行っています。ワークフロー上で動的に CLI のインストールおよびテストコードの生成をしているので、このワークフローの導入にあたって特に手元の Android プロジェクトに手を加える必要はありません。
この例では runner に macos-latest
を指定していますが、larger runners を利用すると実行時間の短縮が望めそうです。また actions/checkout 等を利用して Gradle の成果物のキャッシュもしておいた方がよいでしょう。
larger runners を利用する際は次の設定は忘れずに。
Discussion