背景
GitHub を使った開発では、
- master ブランチがいつでも本番に出せる状態として、
- master から切った develop ブランチを開発のベースとし、
- 各フィーチャは develop から切って develop にマージし、
- リリースのタイミングで develop を master にマージ、リリース
……という流れを pull request ベースで行うのがよくあるパターンのひとつだと思います。リリースの際、ステージングや QA という名前のついた本番前環境でそれぞれの機能が正しく動いているか確認するのもよくあるフローです。
このチェックを pull request 本文のチェックボックスを使って行おう、というアイデアを実装したのが git-pr-releaseで、もともと id:hitode909がチーム向けにこしらえたものを
パクった汎用化したものでした。この仕組はとても便利で、いまも社内で使われているのですが、GitHub 上のチェックボックスを利用するのはすこし困るところがありました:
- (最近はないけど)Firefox で挙動がおかしいことがあった
- 誰がチェックしたかわからない
- 複数人でチェックできない
- チェックが完了したかどうか、リリース担当者が確認する必要がある
などなど。GitHub の機能追加でチェックボックスまわりが今後リッチになっていく可能性は十分ありますが、それがいつのことかは当然わかりません。チームのプロセスの進歩のためには、自分たちで拡張可能な仕組みにする必要があります。
prchecklist
そういうわけでこのチェックリストをウェブアプリケーション化したのが prchecklist です。
GitHub - motemen/prchecklist: Provides checklists based on release PR
git-pr-release と同様に、複数のフィーチャ PR をまとめて master にマージする「リリース PR」に対してチェックリストを生成します(pull request の作成はおこないません)。チェックリストは、リポジトリへのアクセス権限のある GitHub ユーザによってチェックされ、設定によっては Slack への通知も行えます。
動作を大づかみするには、Heroku にデプロイしているデモを見るのが早そうです。サンプルのリリース PR である https://github.com/motemen/test-repository/pull/2のチェックリストが 、prchecklist 上では https://prchecklist.herokuapp.com/motemen/test-repository/pull/2になります(GitHub における URL のパスが prchecklist のパスに対応しています)。ログイン必須で右上から GitHub ログインする必要がありますが、repo 権限が必要なのでちょっと厳しいかも……。という人はあとの説明をみて、手元で立てて確かめてみてください。
設定
先のデモでは、qa と production の2ステージが選択できるようになっていました(右上のドロップダウン)。このような設定は、リポジトリ直下の prchecklist.ymlでカスタマイズできます。
例はステージの設定のみですが、通知を設定することもできて、以下はチェックリストのアイテムがチェックされた場合と、チェックリストがすべてチェックされた場合に別々の Slack チャンネルに通知するような例です。
stages:- qa - production notification:events:on_check:- ch_check on_complete:- ch_complete channels:ch_complete:url: https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX ch_check:url: https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX
通知は、こんな感じのが来ます。
ビルド/デプロイ
https://github.com/motemen/prchecklist/releasesにビルド済みのバイナリをアップロードしています。go get github.com/motemen/prchecklist/cmd/prchecklist
または git clone
して make
でも取得可能です。
利用するには GitHub にアプリケーションを登録する必要があります(-github-client-id
と -github-client-secret
)。また、チェック情報の保存に別途ストレージが必要で、デフォルトでは Boltを利用しますが、-datasource redis://u:<password>@<host>
のような形で Redis も指定可能です。
% prchecklist -h Usage of prchecklist: -behind-proxy prchecklist is behind a reverse proxy (PRCHECKLIST_BEHIND_PROXY) -datasource string database source name (default "bolt:./prchecklist.db") -github-client-id string GitHub client ID (GITHUB_CLIENT_ID) -github-client-secret string GitHub client secret (GITHUB_CLIENT_SECRET) -github-domain string GitHub domain (GITHUB_DOMAIN) (default "github.com") -licenses show license notifications -listen address address to listen (default "localhost:8080") -session-secret string session secret (PRCHECKLIST_SESSION_SECRET) -version show version information
おわり
便利なウェブアプリ、prchecklistの紹介でした。
今のところ社内でも順調に使われています。git-pr-release と組み合わせるとより便利でしょう。
ためしに Gitterルームも用意してみました。make develop
で開発環境も簡単に立ち上がりますし、PR ウェルカムです!