以前こんなブログを書いたが、やはりCIでチェックしたいと考えた。
全ファイルをチェックしようとすると時間がかかってしまうので毎回のテストでは実行したくない。しかし、毎回のテストで実行しないと結局はmerge前に検出するのが難しくなる。この背景から、どうせgitを使ってるし、変更点だけチェックすればいいのではと考えた。
gitで変更があったファイルの一覧を取得するには
git diff --stat --name-only master...HEAD
とすれば良い。
これを利用すれば以下のようにして変更点だけテストできる。
use Test::More; use Test::UsedModules; my $base_branch = "origin/master"; my $changed_files = [ split "\n", qx{git diff --stat --name-only $base_branch...HEAD} ]; my $target_files = [ grep { $_ =~ /(?:\.pm|\.t)\z/ } @$changed_files ]; for my $file (@$target_files) { used_modules_ok($file); } done_testing();