🏷️

GitHub ActionsでPull Requestのラベルのつけ忘れをチェックする

2024/02/11に公開

GitHubのラベル

GitHubのラベルって色々な使い道があって便利ですよね。
僕は最近、自動生成リリースノートの分類にも使えるということを知りました:
https://docs.github.com/ja/repositories/releasing-projects-on-github/automatically-generated-release-notes

でもラベルを貼るのは基本的に人間です。そして人間は忘れやすい生き物です。
忘れやすいのなら機械でチェックしてあげようということで、掲題の「GitHub ActionsでPull Requestのラベルのつけ忘れをチェックする」ということを実現してみました。

やること

やることはとても簡単です。
下記のようなGitHub Actions用YAMLを書いてやるだけです:

.github/workflows/assert-label.yml
name: Assert PR Labels

on:
  pull_request:
    types: [opened, reopened, synchronize, labeled, unlabeled]

jobs:
  check_labels:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: main
      - name: Check if PR labels are empty
        run: |
          LABELS=$(gh pr view ${{ github.event.pull_request.number }} --json labels | jq '.labels')
          if [[ $LABELS == "[]" ]]; then
            echo "PRにラベルが1つも貼られていません。ラベルを貼ってください。"
            exit 1
          else
            echo "PRにラベルが貼られています。OK!"
          fi
        env:
          GH_TOKEN: ${{ github.token }}

なお、github.token を使う場合は下記画像の設定が必要なので注意してください(リポジトリのSettings→Actions→General→Workflow permissions):
Workflow permissionsでRead and write permissionsを選択

やっていることとしては、gh pr view ${{PR番号}} --json labels | jq '.labels' をして、その結果が空かどうかチェックしているというとてもシンプルなものです(gh pr view のマニュアルはこちら)。gh、GitHub Actionsでも使えてとても便利です。

これでラベルが貼られていなければCIがコケるので、ラベルの貼り忘れに人間が気づけるという仕組みです。

ちなみにこのYAMLはChatGPT 4さんに尋ねて作ってもらったものを少しアレンジしたものです。ChatGPT 4優秀ですね。

まとめ

とっても簡単なGitHub Actionsの活用法でした。みなさんも試してみてはいかがでしょうか。
応用すれば、特定の条件で特定のラベルが貼られていないことをチェック、とかもできそうです。

最後に手前味噌ですが、GitHubのラベルに関して、「リポジトリをまたいでラベルを操作する」OSSツールを作っているので、よかったら使ってみたりしてみてください:
https://github.com/tnagatomi/takolabel

Discussion