🌊
GitHub ActionsでFlutter Windowsアプリをリリースする
はじめに
現在、下記環境でFlutter Windowsアプリを開発しています。
ツール名 | バージョン |
---|---|
Windows 11 Pro | 22H2 |
Flutter SDK | 3.10.5 |
Windows 11 SDK | 10.0.22000.0 |
リリースする度にいろいろやらないといけないのは面倒くさいっと思ったので、GitHub Actionsを使ってテストからデプロイまでの作業を自動化しています。
自分用メモですが、ご参考になれば幸いです。
事前に用意しておくと良いもの
-
GitHub Personal access tokenを作成
GitHub Releaseを作るため、access tokenを作りましょう(作成方法)。 -
作成したtokenをRepository secretsに登録
workflowでtokenを利用するため、repo
にアクセスする権限を付与してGitHubに登録しましょう(登録方法)。
設定ファイルを作る
共通設定
まずは全体の設定を書きます。
# .github\workflows\build.yml
name: build
# 実行するトリガーを指定
# - masterブランチ
# - Pull Request
on:
push:
branches:
- master
pull_request:
# 同じブランチで新しいJobが来たら、今実行中のJobをキャンセルする
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
# 環境変数を設定
env:
# 使用しているFlutter SDKのバージョン
flutter_version: 3.10.5
# 成果物のファイル名
release_file_name: your_release_file_name
テストJobの設定
次は静的検査とテスト用のJobの設定を書きます。
※キャッシュは7日間に使用されていなければ自動的に削除される[1]
# .github\workflows\build.yml
jobs:
# Job名
analyze-and-test:
# ubuntuで実行する
runs-on: ubuntu-latest
steps:
# ソースコードをDL
- uses: actions/checkout@v3
# Flutter SDKをインストール
- name: Install flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.flutter_version }}
channel: 'stable'
cache: true
cache-key: ${{ runner.os }}-flutter-sdk-v${{ env.flutter_version }}
# キャッシュ設定
- name: Cache pubspec
id: cache-pubspec
uses: actions/cache@v3
with:
path: |
${{ env.FLUTTER_HOME }}/.pub-cache
**/.flutter-plugins
**/.flutter-plugin-dependencies
**/.dart_tool/package_config.json
key: pubspec-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
pubspec-
# Flutterのパッケージをインストール
- name: Run pub get
run: flutter pub get
# キャッシュ設定
- name: Cache build_runner
id: cache-build-runner
uses: actions/cache@v3
with:
path: |
**/.dart_tool/build
key: build-runner-${{ hashFiles('**/asset_graph.json') }}-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
build-runner-
# ソースコードの自動生成を行う
- name: Run build_runner
run: flutter packages pub run build_runner build -d
# Flutterの静的検査を実行
- name: Run analyze
run: flutter analyze --fatal-infos
# Flutterのユニットテストを実行
- name: Run test
run: flutter test --machine > test-report.json
# ユニットテストの結果をGitHub Actionsに反映
- name: Archive report
uses: dorny/test-reporter@v1
if: success() || failure()
with:
name: Flutter Tests
path: test-report.json
reporter: flutter-json
fail-on-error: true
リリースJobの設定
最後にリリース用のJobの設定を書きます。
# .github\workflows\build.yml
jobs:
# Job名
build-windows:
# masterブランチのみで実行
if: github.ref == 'refs/heads/master'
# テストJobが成功していることを前提とする
needs: analyze-and-test
# Windowsで実行する
runs-on: windows-latest
steps:
# ソースコードをDL
- uses: actions/checkout@v3
# Flutter SDKをインストール
- name: Install flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.flutter_version }}
channel: 'stable'
cache: true
cache-key: ${{ runner.os }}-flutter-sdk-v${{ env.flutter_version }}
# キャッシュ設定
- name: Cache pubspec
id: cache-pubspec
uses: actions/cache@v3
with:
path: |
${{ env.FLUTTER_HOME }}/.pub-cache
**/.flutter-plugins
**/.flutter-plugin-dependencies
**/.dart_tool/package_config.json
key: pubspec-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
pubspec-
# Flutterのパッケージをインストール
- name: Run pub get
run: flutter pub get
# キャッシュ設定
- name: Cache build_runner
id: cache-build-runner
uses: actions/cache@v3
with:
path: |
**/.dart_tool/build
key: build-runner-${{ hashFiles('**/asset_graph.json') }}-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
build-runner-
# ソースコードの自動生成を行う
- name: Run build_runner
run: flutter packages pub run build_runner build -d
# アプリのビルド番号の自動設定
- name: Bump build number
run: |
flutter pub global activate cider
cider bump build --build=${{ github.run_number }}
# Windowsアプリのビルドを実行
- name: Build windows
run: |
flutter config --enable-windows-desktop
flutter build windows --release
# GitHubのtag名を取得
- name: Set tag name
run: echo "tag_name=v$(cider version)" >> $env:GITHUB_ENV
# 成果物をzip形式で圧縮
- name: Archive release
uses: thedoctor0/zip-release@main
with:
type: 'zip'
filename: '${{ env.release_file_name }}-${{ env.tag_name }}-windwos.zip'
directory: build/windows/runner/Release
# zip形式の成果物をGitHub Releaseに公開
- name: Publish release
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: build/windows/runner/Release/${{ env.release_file_name }}-${{ env.tag_name }}-windwos.zip
generateReleaseNotes: true
tag: ${{ env.tag_name }}
# 事前に登録したtokenを使用
token: ${{ secrets.RELEASE_TOKEN }}
これからやりたいこと
ひとまずテスト~リリースの作業を自動化しましたが、まだ改善の余地があるので次のステップとして下記機能を実装したいと思っています。
-
exe
もしくはmsi
形式でリリースする - Microsoft Storeにも公開する
Discussion