7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FlutterでCI(Github Action編)

Last updated at Posted at 2020-04-04

下記環境で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に作ったほうが良いです(特に無視したいブランチがある場合)。

github_actions_tab.png

2.Simple workflowを選ぶ

Simple workflowの[Set up this workflow]を選ぶ

simple_workflow.png

Simple workflowが先頭に表示されていない場合は、[Set up a workflow yourself]でも可。

3.yamlを編集する

Flutter actionというのを公開してくださっている方がいるので、そちらを利用して、下記のようなワークフローを作ってみました。

.github/workflows/flutterci.yml
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になっていてかっこ悪いので(笑)

yaml_filename.png

その後、[Start commit]ボタンを押して、適当なコミットメッセージを入れて[Commit new file]します。

対象リポジトリをmaster以外にしている場合は、masterの変更をそのリポジトリにマージしてからpushすると、最初のワークフロー実行がキックされます。

感想

初回だけで無く、たまにものすごく時間がかかることがあるので、テストツールのインストールあたりはキャッシュした方が良いかも・・・
Flutter actionはキャッシュしているように見えるけど・・・

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?