下記環境でFlutterアプリを開発中です。
ツールなど | バージョンなど |
---|---|
MacBook Air Early2015 | macOS Mojave 10.14.5 |
Android Studio | 3.6.1 |
Java | 1.8.0_131 |
Flutter | 1.12.13+hotfix.5 |
Dart | 2.7.0 |
テストが一通り書けてきたので、CIを回したくなってきました。
とりあえずいまいまは、無料で使えるところ、ということで、Github Actionsで回すことにしました。
1.ワークフローを作成する
Githubのリポジトリページに分かりづらいけどタブがあります。そこの[Actions]を選びます。
多分、最初はmasterに作ったほうが良いです(特に無視したいブランチがある場合)。
2.Simple workflowを選ぶ
Simple workflowの[Set up this workflow]を選ぶ
Simple workflowが先頭に表示されていない場合は、[Set up a workflow yourself]でも可。
3.yamlを編集する
Flutter actionというのを公開してくださっている方がいるので、そちらを利用して、下記のようなワークフローを作ってみました。
name: Flutter CI
on:
push:
branches:
- 'develop'
jobs:
prepare:
runs-on: ubuntu-latest
if: "! contains(github.event.head_commit.message, '[ci skip]')"
steps:
- run: echo "${{ github.event.head_commit.message }}"
build:
runs-on: macOS-latest
needs: prepare
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: '1.8'
- name: Setup flutter
uses: subosito/flutter-action@v1
with:
flutter-version: '1.12.13+hotfix.5'
- name: Set up test tools
run: |
flutter pub get
flutter pub global activate dart_dot_reporter
flutter pub global activate junitreport
pip install junit2html
- name: Test
run: |
export PATH=$PATH:${FLUTTER_HOME}/bin/cache/dart-sdk/bin
export PATH=$PATH:${FLUTTER_HOME}/.pub-cache/bin
./test.sh
- name: Arcive test results
if: always()
uses: actions/upload-artifact@v1
with:
name: test-reports
path: test-reports
- name: Slack notification
if: always()
uses: homoluctus/slatify@master
with:
type: ${{ job.status }}
job_name: '*Build and DebugCheck*'
channel: '#general'
commit: true
token: ${{ secrets.GITHUB_TOKEN }}
url: ${{ secrets.SLACK_WEBHOOK_URL }}
prepareステップの解説
prepare
ステップでは、最後のコミットが[ci skip]
というコミットメッセージが始まっている場合、スキップするための設定をしています。
buildステップの解説
-
runs-on: macOS-latest
- macOSにしていますが、ubuntuでも行けるはず。
-
needs: prepare
-
prepare
の条件を満たしていることを要求しています。結果、最後のコミットメッセージが[ci skip]
で始まっているとビルドがスキップされます。
-
-
actions/checkout@v2
- 該当ブランチをチェックアウト
-
Set up JDK 1.8
- JDKのバージョンを8にしています。これはAndroidのバージョンに合わせています。
-
Setup flutter
-
Flutter action
を使ったflutter SDKのセットアップ
-
-
Set up test tools
- 以前の記事で紹介したhtmlファイルでテストレポートを出すため、必要なツールをインストールしています。
-
Test
- 以前の記事で紹介したhtmlファイルでテストレポートを出すために作成したシェルスクリプトを叩いています。その際に必要なPATHをその前に設定しています。
-
FLUTTER_HOME
は、Flutter action
が設定してくれます。
-
Archive test results
- テスト結果をアーティファクトにアップロード
-
Slack notification
- ビルド結果をSlackに通知
-
${{secrets.GITHUB_TOKEN}}
は、 自分でSecretsを作る必要はありません(参照)。
3.commit
コミット・・・の前に、ファイル名を変更します。デフォルトだと、blank.yml
になっていてかっこ悪いので(笑)
その後、[Start commit]ボタンを押して、適当なコミットメッセージを入れて[Commit new file]します。
対象リポジトリをmaster以外にしている場合は、masterの変更をそのリポジトリにマージしてからpushすると、最初のワークフロー実行がキックされます。
感想
初回だけで無く、たまにものすごく時間がかかることがあるので、テストツールのインストールあたりはキャッシュした方が良いかも・・・
Flutter action
はキャッシュしているように見えるけど・・・