Flutter:GitHub Actions で Lint と Formatter と Test を実行する

Flutter:GitHub Actions で Lint と Formatter と Test を実行する

July 25, 2022

GitHub Actions で Flutter の Lint(Analyzer)と Formatter と Test を実行するようにワークフローを作成します。

先に完成したコードを掲載し、その後解説します。

完成したコード #

ファイルの配置 #

.github/
 ├ actions/
 │  └ action.yaml
 └ workflows/
    └ main.yaml

.github/actions/action.yaml #

# This is a "Composite action" or "Composite Run Steps" file.

runs:
  using: 'composite'
  steps:
    - name: 'Setup Flutter'
      uses: subosito/flutter-action@v2
      with:
        flutter-version: '3.x'
        channel: 'stable'
        cache: true

    - name: 'Show Flutter version'
      run: flutter --version
      shell: bash

    - name: 'Install dependencies'
      run: flutter pub get
      shell: bash

.github/workflows/main.yaml #

name: 'Static Analysis and Testing'

on:
  pull_request:

jobs:
  Analyzer:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions
      - run: flutter analyze

  Formatter:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions
      - run: flutter format --output=none --set-exit-if-changed .

  Test:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions
      - run: flutter test lib

解説 #

上記のワークフローでは Analyzer と Formatter と Test という3つのジョブを実行しています。それぞれ以下の通りです。

  1. Analyzer: flutter analyze でリントの検査をする。
  2. Formatter: flutter format でフォーマットの検査をする。
  3. Test: flutter test でテストを行う。

共通の処理 #

それぞれのジョブで共通して必要になる処理があります。それが Flutter のセットアップとパッケージのインストールです。これらの処理を各ジョブに記載する、つまり計3回書くのは冗長ですので、共通化しましょう。

共通化には GitHub Actions の Composite action(あるいは Composite Run Steps とも)という機能を利用します。

これは action.yaml(あるいは action.yml)というファイルを作成すると、それをワークフローから呼び出して実行することができるという機能です。

そのファイルが .github/actions/action.yaml です。

Flutter のセットアップには subosito/flutter-action という GitHub Actions パッケージを使用しています。

なお cache: true のオプションを指定することでキャッシュが効き、実行が早くなります。指定しておきましょう。

flutter-version のところは適宜調整ください。

参考:Composite action(Composite Run Steps)について #

メインの処理 #

メインとなるワークフローの処理が .github/workflows/main.yaml のファイルです。

今回は pull_request 時に起動されるように設定しています。適宜調整ください。

各ジョブ内の下記が、さきほどの .github/actions/action.yaml を実行している記述です。

- uses: ./.github/actions

なお Composite action は - uses: actions/checkout@v3 のチェックアウト後に使用できるようになります。そのため checkout 処理は Composite action のファイルに含めず、メインのワークフロー内で実行する必要があります。

その後は各ジョブごとにそれぞれの処理を実行しています。具体的には次の通りです。

  • Analyzer: flutter analyze
  • Formatter: flutter format --output=none --set-exit-if-changed .
    • 注意:--set-exit-if-changed をつけましょう。
  • Test: flutter test lib
    • 注意:私は lib 配下にテストファイルを配置しているため、ディレクトリを指定しています。

以上 #

ご参考になりましたら幸いです!