大きなプルリクにラベルを貼る GitHub Actions ワークフロー
クリスマス・イブですね。子供へ贈るクリスマス・プレゼントは大きい方がインパクトがあってよい!?かもですが、プルリクエストは小さい(追加・削除した行が少ない)方が一般的にはレビューしやすいかなと思います。
とはいえ場合によっては大きくならざるを得ないケースもあると思いますが、変更行数に応じて自動でラベルを貼るようにすると、チーム開発における注意喚起にもなりますし、また、ラベルはプルリクの一覧にも表示されますので、そのラベルが貼ってあるプルリクはじっくり見る必要があるので後で時間をとって見よう、複数人で見よう、レビュー会で取り上げよう、etc.. といった判断にも役立ちそうです。
方法
例えば変更行数が 200
行を超えたプルリクに自動で large PR
ラベルを貼りたい、という場合は yumemi-inc/changed-files と GitHub CLI を用いて次のようにします[1]。
- uses: yumemi-inc/changed-files@v3
id: changed
- env:
GH_REPO: ${{ github.repository }} # GitHub CLI で必要
GH_TOKEN: ${{ github.token }} # GitHub CLI で必要
PR_NUMBER: ${{ github.event.number }}
OPTION: ${{ 200 < steps.changed.outputs.changes && '--add-label' || '--remove-label' }}
run: |
gh pr edit $PR_NUMBER $OPTION 'large PR'
プルリクのコードを編集して追加 push した結果、行数が 200 未満となるケースもあると思うので、上記のワークフローはラベルの削除にも対応させています。もし削除は不要という場合は、もう少しシンプルな形になると思います。
この際、変更行のカウントに含めるファイルを絞ったり、逆に除外したりする場合は patterns
でそれらを指定します。
- uses: yumemi-inc/changed-files@v3
id: changed
with:
patterns: |
**/*.js
!doc/**
更に、ファイルのステータスで絞る場合(例えば削除されたコードはカウントしない等)は statuses
または exclude-statuses
を指定します。
- uses: yumemi-inc/changed-files@v3
id: changed
with:
patterns: |
**/*.js
!doc/**
exclude-statuses: 'removed'
おわりに
応用として、逆に小さいプルリクにラベルを貼って、レビューしやすいよという目印にしてもよさそうです(あくまで変更行数からの判断となりますが、目安として..)。
今回 紹介した下記の custom action は拙作なのですが、これを利用すると今回の事例以外にもプルリクであれやこれやすることができますので、ぜひ試してみてください。
また、ラベルの操作については下記の投稿でも書きましたので、よろしければそちらも参考にして頂ければと思います。
-
この例の場合、
contents: read
、pull-requests: write
、repository-projects: read
の3つの permission が必要です。contents: read
は yumemi-inc/changed-files で必要で、pull-requests: write
とrepository-projects: read
は GitHub CLI でのラベルの付与・削除で必要となります。 ↩︎
Discussion