🐙

大きなプルリクにラベルを貼る GitHub Actions ワークフロー

2023/12/23に公開

クリスマス・イブですね。子供へ贈るクリスマス・プレゼントは大きい方がインパクトがあってよい!?かもですが、プルリクエストは小さい(追加・削除した行が少ない)方が一般的にはレビューしやすいかなと思います。

とはいえ場合によっては大きくならざるを得ないケースもあると思いますが、変更行数に応じて自動でラベルを貼るようにすると、チーム開発における注意喚起にもなりますし、また、ラベルはプルリクの一覧にも表示されますので、そのラベルが貼ってあるプルリクはじっくり見る必要があるので後で時間をとって見よう、複数人で見よう、レビュー会で取り上げよう、etc.. といった判断にも役立ちそうです。

方法

例えば変更行数が 200 行を超えたプルリクに自動で large PR ラベルを貼りたい、という場合は yumemi-inc/changed-filesGitHub 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 は拙作なのですが、これを利用すると今回の事例以外にもプルリクであれやこれやすることができますので、ぜひ試してみてください。

https://github.com/yumemi-inc/changed-files

また、ラベルの操作については下記の投稿でも書きましたので、よろしければそちらも参考にして頂ければと思います。

https://zenn.dev/hkusu/articles/a4053fd6feede6

脚注
  1. この例の場合、contents: readpull-requests: writerepository-projects: read の3つの permission が必要です。contents: read は yumemi-inc/changed-files で必要で、pull-requests: writerepository-projects: read は GitHub CLI でのラベルの付与・削除で必要となります。 ↩︎

株式会社ゆめみ

Discussion