Blog

特定のファイルが変更されたらプルリクエストに警告を出すやり方

はじめに

こんにちは。ニフティのIWSです。

今回は特定のファイルが変更されたらPRに警告を出すやり方について共有します。

何かの参考になれば幸いです。

背景

1つのファイルに手を加えたら、他のファイルも忘れずに変更しないといけないプロジェクトでは、変更漏れがどうしても生じてしまいます。

目検で漏れがないかの確認は大変なので、このテンプレートに変更があるPRが作成されたときに「HTMLに変更あるけど意図したやつ?」「テンプレートの変更1つにしか無いけど漏れてない?」みたいに警告するワークフローをつくってみました。

動作について

PRを作成した際にHTMLをファイルに変更があった際に、以下の画像の用にコメントをするワークフローが動作します。

コード

GitHub Actionsに以下の設定を行います。

コードの解説については以降の章でお話ししますので、説明を読みつつ、ご自身の利用用途に応じて書き換えてみてください。

コードの解説

処理の流れは以下です。

  1. 特定のファイルに変更があった際に発火
  2. 変更があったテンプレートのリストを取得
  3. 変更がなかったリストも取得
  4. 変更があったもの、なかったものをそれぞれコメント

1.特定のファイルに変更があった際に発火

paths を使うことで指定したファイルに変更があったときだけワークフロー実行できます。サンプルコードは .html.htm のファイルに変更があったときだけ発火する処理となります。

(もし paths-ignore を使用すると、指定のファイル以外の変更があれば発火します。)

参考サイト:https://qiita.com/nacam403/items/3e2a5df5e88ba20aa76a

2. PRの差分を取得

git diff —name-only で変更があったファイルを取得し、 --relative をつかって指定Path以下のファイルの変更だけを取得し、それをsedで整形しています。(diff結果のPathの共通部分を削除しています django/templates/process/

sedの前に grep を入れることで対象を細かく指定できるようにもなります

3. 変更がなかったリストも取得

2で出した変更ファイルリストと、同じPathの全体のファイル一覧のリストを突き合わせて変更されていないファイルのリストを作っています。

comm コマンドについては以下をご参考くださいませ。

参考サイト:https://qiita.com/hypermkt/items/f6388bf72d9b30c6d601

2の処理でgrepを入れた場合はこちらにもgrepを入れるのを忘れないでください。

変更があったもの、なかったものをそれぞれコメント

2,3で作ったリストを使って body.txt を作っています

printf -- '- ...-- はそれ以降の – をオプションとして扱わないことを意味します。

今回のケースでは、Markdownとして - を使いたいのだけど、そのままだとオプションの - と勘違いされてしまうことを回避するために入れています。

- を抜くと実際にprintf: - : invalid option と怒られます。)

もしPRへコメントする際はghコマンドを使用してください。

WF発火したPRを ${{ github.event.pull_request.number }} で指定し body.txtの内容をコメントしています。ただし、複数行のコメントにはテキストファイルなどで渡す必要があるので注意してください。

おわりに

今回は特定のファイルが変更されたらPRに警告を出すやり方について紹介しました。

変更漏れが多いリポジトリなどに是非活用してみてください。

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!