AndroidアプリのCIをGitHub Actionsに移行した話他
個人で作っているAndroidアプリのCIをBitriseからGitHub Actionsに乗り換えた話などをしていきます。
GitHub Actionsで使ってるyamlはこんな感じです。
name: Android CI on: [pull_request] jobs: build: 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: Setup ruby uses: actions/setup-ruby@v1 with: ruby-version: '2.6' architecture: 'x64' - name: Install danger run: | gem install bundler bundle install - name: Build with Gradle run: ./gradlew assembleDebug - name: Check lint if: always() run: ./gradlew ktlintCheck - name: Run test if: always() run: ./gradlew testDebugUnitTest - name: Run Danger if: always() env: DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: bundle exec danger
単純に諸々の準備をした後でアプリのビルド、lint、ユニットテストを行い、lintとテスト結果をDangerでコメントさせています。
if: always()
を使うと前のステップで失敗していても当該ステップを実行できます。
ちなみにDangerFileはこんな感じです*1。
warn("このPRはWIPです") if github.pr_title.include? "[WIP]" ktlint_report_dir = "**/ktlintMainCheck.xml" Dir[ktlint_report_dir].each do |file_name| checkstyle_format.base_path = Dir.pwd checkstyle_format.report file_name end ktlint_test_report_dir = "**/ktlintTestCheck.xml" Dir[ktlint_report_dir].each do |file_name| checkstyle_format.base_path = Dir.pwd checkstyle_format.report file_name end junit_output_dir = "**/test-results/**/*.xml" Dir[junit_output_dir].each do |file_name| junit.parse(file_name) junit.show_skipped_tests = true junit.report end
マルチモジュールなのでテスト結果やlintの結果が複数出てくるのでえいやしています*2。
マルチモジュールでDangerをいい感じにするのはインターンでお世話になったしせうがエレガントに解決してる記事があるのでこちらも参照されたし。
閑話休題。yamlのシンタックスについては僕が何か説明するより公式(GitHub Actionsのワークフロー構文 - GitHub ヘルプ)が整っているのでそちらをご覧いただければと思います。
jobsをいい感じに使えてなかったりうむぅな箇所もありますが、こんな感じでGitHub Actionsライフを送っております。
Bitriseから移行した理由やいいとこなど
新しいから試してみたかったというのも大きな理由ではありますが、テストを走らせるようになってからBitriseの無料枠で使える10分ではビルドが終わらなくなってしまっていたのが最大の理由です。
Circle CIとGitHub Actionsは無料で使うには月ごとのビルド時間に制限があるのですが、Circle CIは1000分でGitHub Actionsは2000分(パブリックリポジトリなら無制限)なのでなんかお得感があります*3。
また、並列で行えるジョブについてもCircle CIが無料だと1つのみなのに対してGitHub Actionsは料金プランに関わらず(っぽい)20までと、お金を払いたくない人にとってはGitHub Actionsは結構いいのではと感じています *4。
*1:参考 Kotlin+DangerをGithub Actionsで動かす - Qiita
*2:参考 Danger on Android :: iamjonfry — iamjonfry
*3:追記: Circle CIの方が早いらしいです。参考 GitHub ActionでAndroidのCIを設定してみた - phicdy devlog
*4:僕Circle CI使ったことないのでアレなんですけどね