FlutterでCI

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

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倍のコストがかかるので注意されたし。

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

インテグレーションテストの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分。

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

参考: FlutterでCI(Codemagic編)

記事

次の記事

WordPress+nginxのWebP対応