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つのジョブを実行しています。それぞれ以下の通りです。
- Analyzer:
flutter analyze
でリントの検査をする。 - Formatter:
flutter format
でフォーマットの検査をする。 - 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 パッケージを使用しています。
- subosito/flutter-action: Flutter environment for use in GitHub Actions.
- https://github.com/subosito/flutter-action
なお cache: true
のオプションを指定することでキャッシュが効き、実行が早くなります。指定しておきましょう。
flutter-version
のところは適宜調整ください。
参考:Composite action(Composite Run Steps)について #
- https://docs.github.com/ja/actions/creating-actions/creating-a-composite-action
- https://docs.github.com/ja/actions/creating-actions/metadata-syntax-for-github-actions#runs-for-composite-actions
- https://github.blog/changelog/2020-08-07-github-actions-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
配下にテストファイルを配置しているため、ディレクトリを指定しています。
- 注意:私は
以上 #
ご参考になりましたら幸いです!