Flutterで開発する時のGitHub Actions
個人開発でFlutterを採用するケースが多いので、備忘録も兼ねて自分流のGitHub Actionsを記事にしました。
個人開発はFreeプランで行うことが多いため、必要なフェーズで必要なActionsを追加できるように #導入編 #誰かとやることになった時編 #リリース後編 #育てていくぞ!編 で分けています。
導入編
リポジトリ作成直後に設定しているActionsたちです。
flutter installのComposite
準備として、FlutterをインストールするComposite(複合アクション)を作成します。
これから作成するActionsで都度Flutter installの記述をするのは面倒なために、共通化として作成しています。
FVMを使ってバージョン管理しているため.fvm/fvm_config.json
からFlutterのバージョンを取得しています。
他にバージョンの取得方法はこちらのActionsを使う方法も便利です。
name: "Install Flutter Dependencies"
description: "dependencies install step"
runs:
using: "composite"
steps:
- name: "Read flutter version from fvm config"
id: flutter_info
run: |
FLUTTER_VERSION=$(jq -r '.flutterSdkVersion' ./.fvm/fvm_config.json)
echo "FLUTTER_VERSION=$FLUTTER_VERSION" >> $GITHUB_ENV
shell: bash
- name: "Setup Flutter"
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
flutter test
FlutterのTestを実行するためのActionです。
name: flutter test
on:
pull_request:
types: [opened, synchronize]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v4
- uses: ./.github/actions/install_flutter_dependencies
- name: "Run tests"
run: flutter test
flutter analyze
Flutterのanalyzeコマンドを走らせるためのActionです。
name: flutter analyze
on:
pull_request:
types: [opened, synchronize]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v4
- uses: ./.github/actions/install_flutter_dependencies
- name: "Run analyze"
run: flutter analyze
dependabot
Actionsとはちょっと違いますが、dependabotの設定ファイルもこのタイミングで作成しちゃいます。
version: 2
enable-beta-ecosystems: true
updates:
- package-ecosystem: "pub"
directory: "/"
schedule:
interval: "weekly"
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
reviewers:
- "imajoriri" # 個人やチームに置き換えてください
誰かとやることになった時編
自分以外の誰か(人)と開発をすることになった時に設定するActionsです。
Pull requestのAuthorを追加
PRを作成した時に、Assigneeに作成者を追加してくれます。
PR一覧で、作成者が見れるので便利で使っています。
name: pull request author
on:
pull_request:
types: [opened]
jobs:
author:
runs-on: ubuntu-latest
uses: technote-space/assign-author@v1.3.1
deploy編
GitHub Pagesへのデプロイ
Flutter WebをGitHub pagesへデプロイするActionです。
このほかにGitHubの「Settings -> Actions -> General -> Workflow permissionsを「Read and write permissions」にする必要があります。
成功すると、以下のリンクから開けます。
name: deploy flutter web
on:
push:
branches: ["main"]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
pages: write
id-token: write
contents: write
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/install_flutter_dependencies
# --base-hrefには、リポジトリ名に変えてください
- name: build web
run: |
flutter build web --base-href=/widgetbook_sample/
- uses: actions/upload-pages-artifact@v1
with:
path: ./build/web
deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
Flutter webをS3へdeploy
name: deploy flutter web for s3
on:
push:
branches:
- main
jobs:
deploy_widgetbook:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v3.3.0
- name: Install dependencies
uses: ./.github/actions/install_dependencies
# ここら辺は適宜変更してください
- uses: aws-actions/configure-aws-credentials@v4.0.1
with:
role-to-assume: arn:aws:iam::xxx:role/xxx
aws-region: ap-northeast-1
role-duration-seconds: 3600
role-session-name: xxx
# --base-hrefには、s3のバケット名を指定する
- name: build web
run: |
flutter build web --base-href=/backagename/
- name: Copy files to s3
run: |
aws s3 cp ./build/web/ s3://xxx/backagename/ --acl public-read --recursive
(Mac App)releaseが作成されたらビルドをzip化してreleaseに添付
GitHubのリリース作成時にビルドしassetsにzipファイルをアップロードするactionです。
私は個人開発とかで使用しています。
例えばこちらのリポジトリのreleaseなどをみてもらうとapp-macos.zip
がそれです。
name: Build and Release macOS App
on:
release:
types: [published]
jobs:
build:
runs-on: macos-latest
steps:
- name: "Checkout"
uses: actions/checkout@v4
- name: "setup java"
uses: actions/setup-java@v3
with:
distribution: "zulu"
java-version: "12.x"
- uses: ./.github/actions/install_flutter_dependencies
- name: Build macOS app
run: flutter build macos --dart-define-from-file=dart_defines/prod.json
- name: Zip the app
run: |
cp -r build/macos/Build/Products/Release/Tokeru.app Tokeru.app
zip -r release.zip Tokeru.app
- name: Upload ZIP to Release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./release.zip
asset_name: app-macos.zip
asset_content_type: application/zip
そのほか編
CodeRabbit
AIがコードレビューをしてくれるサービスのCodeRabbitです。
1人で開発していると、レビューをしてくれる人がいないため重宝しています。
...執筆中!! フォローして待っててね!
Discussion