AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

GitHub ActionでAndroidのCIを設定してみた

ベータを申し込んだら1日で有効になったので使ってみた

help.github.com

設定

ひとまずPR時にUTとlintを並列で動かしてみる。

name: Android CI

on:
  pull_request:
    branches:
    - develop

jobs:
  unit_test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Decode google-services.json
      env:
        GOOGLE_SERVICE: ${{ secrets.GOOGLE_SERVICE}}
      run: echo $GOOGLE_SERVICE | base64 --decode > ./app/google-services.json
    - name: Unit Test
      env:
        TZ: Asia/Tokyo
      run: ./gradlew testDebugUnitTest
      
  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Decode google-services.json
      env:
        GOOGLE_SERVICE: ${{ secrets.GOOGLE_SERVICE}}
      run: echo $GOOGLE_SERVICE | base64 --decode > ./app/google-services.json
    - name: Lint
      run: ./gradlew lintDebug

を.github/workflows以下に置くだけ。 google-services.jsonは一旦base64のデコードでお茶を濁す。Secretsはリポジトリ -> Settings -> Secret -> Add a new secretで追加できる。 タイムゾーン環境変数TZを設定してあげればよい。

help.github.com

感想

まず無料でベータだから仕方ないかもしれないがCircleCIに比べて単純に遅い。無課金のCircleCIで ./gradlew testDebugUnitTest が1分10秒ほど、 ./gradlew lintDebug が1分30秒ほどだったのに対し、GitHub Actionでは ./gradlew testDebugUnitTest が3分20秒ほど、 ./gradlew lintDebug が3分40秒ほどかかった。個人プロジェクトなど時間にこだわらない用途であればいい選択肢だと思う。無料で1リポジトリ辺り20並列まで使えるのはCircleCIやBitriseより遥かに上を行っているし、この程度の設定なら30分くらいで設定できた。実際のプロダクトで使うかはCPUが強いプランが来てくれたらかなと思った。

また↓の記事では不安定だったというのもあるのでそのあたりも改善されたい。

diary.app.ssig33.com

あとGitHub Actionが出たことによってCircleCIやBitriseとの競争がより激しくなり、互いのサービスがよりよくなる流れがきてるのがいいなと思った。