okaryo.log

FlutterアプリをGitHubActionsでビルドする際にコミット数をビルド番号として設定する | okaryo.log

FlutterアプリをGitHubActionsでビルドする際にコミット数をビルド番号として設定する

    #Flutter#GitHubActions#GitHub#CI/CD

はじめに

先日以下の記事の中でFlutterアプリビルド時のビルド番号の与え方を迷っていると書いていたところ、@idonuntiusさんにコミット数を使ったビルド番号の設定を教えていただいた。

実際に自分でも設定してみたところ、とても良かったので紹介する。

事前準備

今回の方法ではciderというライブラリを使用するのでその紹介を軽くしておく。

ciderとは

パッケージ管理を自動化するためのコマンドラインユーティリティで、pub.devで管理されているパッケージだ。

使う際は、グローバルにインストールして使用する。

pub global activate cider

以下が今回使うバージョンに関する簡単な使い方になる。

# 現在のバージョンを取得
cider version

# pubspec.yaml内のバージョンを5.0.0+1に書き換える
cider version 5.0.0+1

ciderはこれ以外にもCHANGELOG.mdの操作やバージョンのバンプアップも良い感じにやってくれる。詳しくは公式のREADMEを読んでいただきたい。

GitHubActionsの設定

ciderの紹介が終わったので今回の本題に入る。

早速だが以下がGitHubActionsの設定になる。不要なステップやビルド時の引数は省略している。

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Set up Flutter
        uses: subosito/flutter-action@v2
        with:
          channel: 'stable'
          cache: true
      - name: Set up cider
        run: flutter pub global activate cider
      - name: Set up build number
        run: |
          VERSION=$(cider version)
          BUILD_NUMBER=$(git rev-list HEAD --count)
          cider version $VERSION+$BUILD_NUMBER
      - name: Build aab
        run: flutter build appbundle

各ステップの紹介

actions/checkout@v3

リポジトリへのチェックアウトのためのアクションだが、今回はfetch-depth: 0を指定する必要がある。

デフォルトでは直近の1コミット分しか取得されないが、これを指定することでコミット履歴全体を取得できるようになる。以下の記事にも書いておいた。

GitHubActionsでリポジトリ内の全てのコミット履歴を取得できるようにする

Set up Flutter

Flutterをインストールしているだけなので割愛。

Set up cider

ここでciderのインストールをしている。

Set up build number

ここでpubspec.yaml内のビルド番号書き換えを行っている。

# アプリのバージョンを取得
VERSION=$(cider version)

# コミット数を取得してビルド番号として設定
BUILD_NUMBER=$(git rev-list HEAD --count)

# ciderを使ってpubspec.yamlのバージョンを書き換える
# 例えば、3.0.0+500のようになる
cider version $VERSION+$BUILD_NUMBER

2022-10-06追記

すでにアプリをバージョン番号10000などでリリースしている場合、この方法は失敗する可能性が大きい。もしそうであれば以下に自分なりの解決法を書いたので参考にしてみていただきたい。

Androidアプリのバージョンコードは最新のものが以前のものよりも常に大きくある必要がある

追記おわり

Build aab

Flutterアプリのビルドを実行している。

この時点でpubspec.yamlにバージョンとビルド番号がciderによって書き換えられているので、引数からビルド番号を与える必要がなくなった。

おわり

これでビルド時にビルド番号を引数で渡す必要もなくなったし、ビルド番号をGitHubのSecretsで管理する必要もなくなって運用がかなり楽になった。

@idonuntiusさん、教えていただきありがとうございました。


関連記事
最新記事
プロモーション

This site uses Google Analytics.