3
3

pubパッケージリリース用のワークフローを組んだ時のメモ

Last updated at Posted at 2024-06-01

はじめに

最近Github Actionsからpub.devへのパッケージ公開ができることを知ったのでやってみました。(結構前からできるらしい?)

他のactionも組み合わせて個人のパッケージにはちょうどいいのでは?って感じの構成にしてみました。

セットアップ

tagprの用意

リリースブランチにpushされるとリリースPRを作り、リリースPRがマージされるとtagを打ったりしてくれるactionです。

以下のファイルを用意しました。

tagprの設定ファイルです。
commandで次に紹介するMakefileを実行するようにしている以外は普通です。

.tagpr
[tagpr]
	releaseBranch = main
	versionFile = -
	vPrefix = false
	command = "make prerelease_for_tagpr"

tagprがリリースPRを作るタイミングでpubspec.yamlのバージョンを更新するようにしています。

Makefile
prerelease_for_tagpr:
	@echo "Current version: $(TAGPR_CURRENT_VERSION)"
	@echo "Next version: $(TAGPR_NEXT_VERSION)"
	sed -i "s/version: $(TAGPR_CURRENT_VERSION)/version: $(TAGPR_NEXT_VERSION)/" pubspec.yaml

Github Appでtagを打つようにしてます。

.github/workflows/tagpr.yaml
# .github/workflows/tagpr.yml
name: tagpr
on:
  push:
    branches: ["main"]
jobs:
  tagpr:
    runs-on: ubuntu-latest
    steps:
    - name: Generate token
      id: generate_token
      uses: actions/create-github-app-token@v1
      with:
        app-id: ${{ vars.APP_ID_OF_K9I_TAG_PUSHER }}
        private-key: ${{ secrets.APP_PRIVATE_KEY_OF_K9I_TAG_PUSHER }}

    - uses: actions/checkout@v4
      with:
        token: ${{ steps.generate_token.outputs.token }}

    - id: tagpr
      uses: Songmu/tagpr@v1
      env:
        GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}

pub.devへのpublishのワークフロー

基本はこれ通りやれば動きます。

今回flutter sdkへの依存があるパッケージだったので、flutterのセットアップが増えています。
ちょっとややこしいところとして、OIDCの用意のためにsetup-dartが必要です。

.github/workflows/tagpr.yaml
# .github/workflows/publish.yml
name: Publish to pub.dev

on:
  push:
    tags:
    - '[0-9]+.[0-9]+.[0-9]+*' # for tags like: '1.2.3'

# Publish using custom workflow
jobs:
  publish:
    permissions:
      id-token: write # Required for authentication using OIDC
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # setup OIDC token
      - uses: dart-lang/setup-dart@v1
      # https://github.com/dart-lang/setup-dart/blob/v1/.github/workflows/publish.yml
      - name: Fetch flutter config
        uses: kuhnroyal/flutter-fvm-config-action@v2
        id: fvm-config-action
      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }}
          channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }}
          cache: true
      - name: Install dependencies
        run: dart pub get
      - name: Publish
        run: dart pub publish --force

使い方

PRのマージなどでmainブランチにpushされると、tagprがリリースブランチを作ります。
minorやmajorバージョンを上げるときはラベルを使います。(詳しくはtagprのReadme)

あとはリリースブランチをマージするとpub.devに公開されます。

minor、majorを上げる時の注意

Automatically delete head branchesを有効にしてると、リリースPRのブランチが消えるタイミングの問題でchangelogの更新がうまくいかないかもです。(確認が不十分で確証が無い)

image.png

tagpr-from-*をprotected branchにしつつallow force pushsすると一応回避できそうでした。

まとめ

リリースが楽になりそうです。
こちらのリポジトリに設定してるので参考にどうぞ

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3