JavaScriptを有効にしてください

【GitHub Actions】Flutter 各種 Build を自動化

 ·  ☕ 3 分で読めます

【GitHub Actions】Flutter 各種 Build を自動化

GitHub Actions で Flutter の各種 Build を自動化してみました。

作成したビルド対象は以下の5種類です。

  • Android
  • iOS
  • Linux Desktop
  • Windows Desktop
  • Web

サンプル

以下を使用して Flutter を GitHub Actions で実行できるようにします。
Flutter action · Actions · GitHub Marketplace

Andoroid, Linux, Web の Build は ubuntu 上で可能なので1つにまとめることも可能です。
わかりやすいように分割して今回はサンプル化しています。

5行目の cachetrue にしておくとキャッシュしてくれて次回以降からキャッシュがヒットすれば早くなります。

1
2
3
4
5
    - uses: subosito/flutter-action@v2
      with:
        flutter-version: '3.0.4'
        channel: 'stable'
        cache: true

Android

Andoroid だと Android App Bundle(aab)Android application Package(apk) の2種類のビルドが可能です。

flutter build appbundleAndroid App Bundle(aab)
flutter build apkAndroid application Package(apk)

Andoroidエンジニアではないので詳しくはないですが aab の形式の方が新しいようです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
name: Flutter Andoroid Build

on: [push]

jobs:
  build-android:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-java@v2
      with:
        distribution: 'zulu'
        java-version: '11'
    - uses: subosito/flutter-action@v2
      with:
        flutter-version: '3.0.4'
        channel: 'stable'
        cache: true
    - run: flutter pub get
    - run: flutter test
    - run: flutter build apk
    - run: flutter build appbundle

    # 成果物アップロード
    - name: artifact upload
      uses: actions/upload-artifact@v2.2.0
      with:
        # 保存ファイル名(name.zip)
        name: andoroid
        # 保存するファイル
        path: ./build/app/outputs/
        # 保存期間(日)
        retention-days: 1

iOS

flutter build ipa で iOS用の実行ファイルを作れるようですが、証明書などが必要なので省きます。
flutter build ios の場合は Xcode 用のソースを吐きます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
name: Flutter iOS Build

on: [push]

jobs:
  build-ios:
    needs: test
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@v3
    - uses: subosito/flutter-action@v2
      with:
        flutter-version: '3.0.4'
        channel: 'stable'
        cache: true
    - run: flutter pub get
    - run: flutter test
    # iOS Build
    - run: flutter build ios --release --no-codesign
    # 成果物アップロード
    - name: artifact upload
      uses: actions/upload-artifact@v2.2.0
      with:
        # 保存ファイル名(name.zip)
        name: ios
        # 保存するファイル
        path: ./build/ios/
        # 保存期間(日)
        retention-days: 1

Linux Desktop

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: Flutter Linux Build

on: [push]

jobs:
  build-linux:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: subosito/flutter-action@v2
      with:
        flutter-version: '3.0.4'
        channel: 'stable'
        cache: true
    - run: flutter pub get
    - run: flutter test
    - name: Flutter Linux Build
      run: |
        sudo apt-get update -y
        sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev
        flutter config --enable-linux-desktop
        flutter build linux        
    # 成果物アップロード
    - name: artifact upload
      uses: actions/upload-artifact@v2.2.0
      with:
        # 保存ファイル名(name.zip)
        name: linux
        # 保存するファイル
        path: ./build/linux/
        # 保存期間(日)
        retention-days: 1

Windows Desktop

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name: Flutter Windows Build

on: [push]

jobs:
  build-windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.0.4'
          channel: 'stable'
          cache: true
      - run: flutter pub get
      - run: flutter test
      - name: Flutter Build Windows
        run: |
          flutter config --enable-windows-desktop
          flutter build windows          
      # 成果物アップロード
      - name: artifact upload
        uses: actions/upload-artifact@v2.2.0
        with:
          # 保存ファイル名(name.zip)
          name: windows
          # 保存するファイル
          path: ./build/windows/runner/Release/
          # 保存期間(日)
          retention-days: 1

Web

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
name: Flutter Web Build

on: [push]

jobs:
  build-web:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: subosito/flutter-action@v2
      with:
        flutter-version: '3.0.4'
        channel: 'stable'
        cache: true
    - run: flutter pub get
    - run: flutter test
    - run: flutter build web
    # 成果物アップロード
    - name: artifact upload
      uses: actions/upload-artifact@v2.2.0
      with:
        # 保存ファイル名(name.zip)
        name: web
        # 保存するファイル
        path: ./build/web/
        # 保存期間(日)
        retention-days: 1

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer