FlutterでCI

2021-07-13
2021-07-13

Flutter手習いに作ってるタイマーアプリがある程度形になっていたのでCIを回したくなり、とりあえず無料でいけるGitHub ActionsでCIを回すことにした。

flutter-actionというイカしたモノがあるのでそれを使っていく。

GitHub

subosito/flutter-action

https://github.com/subosito/flutter-action

.github/workflows/ci.yml を以下のように作ってpushドーン。

name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    # runs-on: macos-latest
    # runs-on: windows-latest

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: '12.x'
      - uses: subosito/flutter-action@v1
        with:
          flutter-version: '2.2.0'
          channel: 'stable'
      - run: flutter pub get
      - run: flutter test
      # - run: flutter build apk
      # - run: flutter build ios --release --no-codesign
      # - run: flutter build web
      # - run: flutter config --enable-windows-desktop
      # - run: flutter build windows

macOSを使うとiOSのビルドもできたりとかするのでひと通り試した。
コメントアウトはその足跡。

ライブラリ追加でビルドできなくなったりすることがあったので、実際はビルドまで入れておきたいかな。

なおパブリックリポジトリのActionsは無料なので意識する必要はないが、プライベートリポジトリの場合はmacOS使うと10倍のコストがかかるので注意されたし。

GitHub Docs

GitHub Actionsの支払いについて

https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions

多分上限に達すると使えなくなるのかな。基本的にいきなり課金されることはない。

インテグレーションテストのCI

できんやろと思ってたらできたので感動した。

name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

  workflow_dispatch:

jobs:
  build:
    # runs-on: ubuntu-latest
    runs-on: macos-latest
    # runs-on: windows-latest
    strategy:
      matrix:
        device:
        - "iPhone 8 (14.4)"
        - "iPhone 11 Pro Max (14.4)"

    steps:
      - uses: actions/checkout@v2
      # - uses: actions/setup-java@v1
      #   with:
      #     java-version: '12.x'
      - name: "Start Simulator"
        run: |
          UDID=$(
            xcrun instruments -s |
            awk \
              -F ' *[][]' \
              -v 'device=${{ matrix.device }}' \
              '$1 == device { print $2 }'
          )
          xcrun simctl boot "${UDID:?No Simulator with this name found}"

      - uses: subosito/flutter-action@v1
        with:
          flutter-version: '2.2.0'
          channel: 'stable'
      - run: flutter pub get
      - run: flutter test
      # - run: flutter build apk
      # - run: flutter build ios --release --no-codesign
      # - run: flutter build web
      # - run: flutter config --enable-windows-desktop
      # - run: flutter build windows
      - run: "flutter drive --driver=test_driver/integration_test.dart --target=integration_test/home_test.dart"

参考: 【Flutter】3種類のテストをGithub Actionsで自動化する

CircleCIやCodemagicでもCIできるよ

FlutterのCIならCodemagicが簡単だし良さげ。
少し試してみたけどサクッと設定できた。

いずれも無料枠がだいたい500分。

CircleCI

弊社 CI ツールの料金プラン | CircleCI

https://circleci.com/ja/pricing/
Codemagic

Pricing | Codemagic

https://codemagic.io/pricing/

お金払うならCodemagicがいいかな?
Codemagicでもプルリクの時だけ動かせば無料分で足りるかもだが、ソロ開発でプルリクいちいち作るのもちょっとめんどいって言うか。

参考: FlutterでCI(Codemagic編)

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。