LoginSignup
6
6

More than 3 years have passed since last update.

【Flutter】自作パッケージの運用とリリースをGithub Actionsでちょっと楽に

Last updated at Posted at 2019-12-22

背景

先日Flutterで点線を描画できるカスタムWidget、dotted_lineを公開しました!
さて、公開後は運用が始まるわけですが、機能が限定的で概ね必要な機能は揃っているので、そこまで更新頻度は高くないだろうと予想しています。
頻繁に行わない作業というのは忘れがちで、実施する度に手順書を探したりググったりして余計な手間がかかってしまいます。
そのため、Github Actionsを使ってリリース前チェックやリリース作業をあらかじめ自動化させておこうと思ったのが今回の背景です。

対象読者

今回は自作パッケージを現在作成中である、もしくは既に公開済みである方を対象としています。
自作パッケージの実装方法についてはご紹介していません、ご了承ください。

運用フローと自動化する作業

まずは自動化の前に運用フローを整理しました。
★を付けたところが今回の自動化対象です。

  • developブランチで開発(コントリビュータからのPRなどもdevelopヘマージ)
  • 今回のリリースで必要な開発が終わり次第masterへのPRを作成
  • ★pub.devへのパッケージアップロードに必要なファイルの更新忘れがないかチェック
  • 問題なければmasterにdevelopをマージ
  • 今回のリリースのタグをプッシュ
  • ★pub.devへパッケージをアップロード & Githubのリリース作成

pub.devへのパッケージアップロードに必要なファイルの更新忘れがないかチェック

パッケージリリース時には下記のファイルの更新が必要です。

  • pubspec.yaml(パッケージのバージョンを上げる必要がある)
  • CHANGELOG.md(新バージョンの変更内容を記載する必要がある)

これらのファイルの更新を忘れていないかチェックするために、Dangerを用いてPR作成時に警告コメントを表示するようにしました。(Danger導入については公式サイトをご参照ください。)
(もしチーム開発など複数人での運用を想定するのであれば、上記ファイルの該当行が更新されていなければPRのマージを不可にするくらいのことをやった方がよさそうですが、今回は個人での運用になるのでファイル更新が必要であることに気付ければいい程度の温度感だったため、警告コメントを残すのみにしました。)

Dangerの実行結果はこのような感じになります。
image.png

Github Actionsのファイルはこちら

check.yml
name: Pre-release check

on:
  pull_request:
    branches:
      - master

jobs:
  check:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Set up Ruby
        uses: actions/setup-ruby@v1
        with:
          ruby-version: 2.6.x

      - name: Danger
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gem install bundler
          bundle install
          danger

Dangerfileはこちら

Dangerflie
warn("Did you update your pubspec.yaml version before the release?", file: "pubspec.yaml", line: 3)
warn("Have you added the new version to CHANGELOG.md?", file: "CHANGELOG.md", line: 1)

pub.devへパッケージをアップロード & Githubのリリース作成

タグのプッシュをトリガーにして、pub.devへのアップロードコマンドを実行します。
Github Actions上でpub publishコマンドを実行する方法は、下記の記事を参考にさせていただきました。
https://medium.com/evenbit/publishing-dart-packages-with-github-actions-5240068a2f7d

また、pub.devへのアップロードが完了次第、Githubのリリースを作成します。

Github Actionsのファイルはこちら

publish.yml
name: Publish package to pub.dev

on:
  push:
    tags: 
      - 'v*'

jobs:
  publish:
    runs-on: ubuntu-latest
    container:
      image:  google/dart:latest

    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Setup credentials
        run: | 
          mkdir -p ~/.pub-cache 
          cat <<EOF > ~/.pub-cache/credentials.json
          {
            "accessToken":"${{ secrets.CREDENTIALS_ACCESS_TOKEN }}",
            "refreshToken":"${{ secrets.CREDENTIALS_REFRESH_TOKEN }}",
            "tokenEndpoint":"https://accounts.google.com/o/oauth2/token",
            "scopes": [ "openid", "https://www.googleapis.com/auth/userinfo.email" ],
            "expiration": 1576508276459
          }
          EOF

      - name: Publish
        run: |
          pub publish -f

      - name: Create release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}

まとめ

これで自作パッケージの更新頻度が高くなくても、更新に必要なものをググる必要もなくリリースも自動で行うことができるようになりました。
Github Actionsは非常に簡単に導入できるのでCI導入を検討されている方にはおすすめです。

追記(2020/06/04)

ついに初めてコントリビュータの方がPRをくれました!
この取り組みが日の目を見る機会がきてとても嬉しかったです。
Flutterやこちらの自作パッケージの運用から長らく離れていたため運用に関する多くの部分が抜け落ちていたのですが、この自動化を行なっていたお陰で難なく対応することができました!

6
6
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
6
6