Pull requestを作成したときに、変更されたファイルによって自動でラベルを付けることは、GitHub Actionsのactions/labelerを使えば簡単に実現できます。
今回は、そのactions/labelerを使ってみようと思い、導入しつつ、挙動の確認をしてみたので、そのメモを残しておきたいと思います。
actions/labelerの導入
まずは、ラベルを自動でつける処理を実装します。
やり方はactions/labeler
のリポジトリのREADME.mdに書かれているので、今回はそれを参考に作っていきたいと思います。
.github/labeler.ymlの作成
まずは、.github/labeler.yml
を作成します。
ここには、どのファイルが変更されたときにどのラベルを付けるかを定義します。
hoge: - hoge/*
今回は雑にhogeディレクトリ内のファイルが変更されたらhogeというラベルを付けるというものを作成してみました。
workflowの作成
次にworkflowを作成します。こちらもREADME.mdに書かれている内容を真似します。
以下の内容で.github/workflows/labeler.yml
を作成します。
name: "Pull Request Labeler" on: - pull_request_target jobs: triage: runs-on: ubuntu-latest steps: - uses: actions/labeler@v3 with: repo-token: "${{ secrets.GITHUB_TOKEN }}"
GITHUB_TOKENの設定が必要になるかもしれないです。ただ、自分の環境では特に何も設定しなかったので、設定済みだったのか、設定が不要なのかがちょっとわからず。。
挙動を確認してみる
さて、いろんな挙動を確認してみたいと思います。
ワークフローをベースブランチにマージしないと動かない
まずは、上記のworkflowファイル(.github/labeler.yml
と.github/workflows/labeler.yml
)を追加した対応のプルリクエストを作成して、動くかを確認してみました。
・・・。
動きませんでした!
ドキュメントを確認してみましょう。
今回使用しているpull_request_target
のWebhookイベントのところのGITHUB_SHA
を見てみると、PR ベースブランチの直近のコミットと書いています。
git-flowのようなブランチ運用を利用せず、masterブランチ(今でいうmainブランチ)にマージしていくプルリクの場合だと、mainブランチにワークフローがマージされてないと動かないということでしょうか。
とりあえずワークフローの設定はマージしないと反映されないということだけ覚えておけば良さそうですね。
ファイルを変更してみる
基本挙動になりますね。ちゃんと対象のファイルを変更したらラベルがつくのかを確認しましょう。
改めて.github/labeler.yml
の中身についてですが、以下のように設定しています。
hoge: - hoge/*
この定義に対して、以下のようにhoge/fuga
ファイルに変更を加えてみました。
(1つ前のステップでfugaファイルを作成していたので、ここでは内容の変更になります)
この変更でPull requestを作成してみます。
スクショの赤枠で囲まれているところのように、無事ラベルが設定されました。
なので、対象のファイルが追加・変更された場合に定義したラベルが付くことが確認できました。
変更したファイルをリバートしてみる
次に、変更加えたけど、やっぱその変更は取り消し!のように、ラベルを付けてもらったけど、外してもらいたいという状況も起こり得るでしょう。
その時、ちゃんとラベルが外されるのかを確認してみたいと思います。
このスクショだとわかりにくいですが、ラベルが付いた直後のコミットでファイルの変更がないように戻しています。変更内容をリバートしているイメージです。(リバートすればよかったと後悔)
すると、ちゃんとラベルが削除されています。
すなわち、プルリク内でファイルを変更しているけど、結果差分がない場合はラベルがちゃんと外れることが確認できました。
さいごに
今回、actions/labeler
について導入して動作確認をしてみましたが、自分がやりたいこと、こう動いてほしいなって思ったことはそのまま動いてくれました。さすがgithubですね!
便利なのでチーム開発でも利用していこうかなと思います!