私が歌川です

@utgwkk が書いている

GitHub Actionsで、Perlの落ちたテストをアノテーションするTest2プラグインを書いた / GitHub ActionsのProblem matcherについて知った

表題にあるものを書きました。cpanm Test2::Plugin::GitHub::Actions::AnnotateFailedTest して use Test2::Plugin::GitHub::Actions::AnnotateFailedTest することで今すぐにご利用いただけます。

metacpan.org

以前書いたpytestプラグインとだいたい同じように、GitHub Actionsで落ちたテストがアノテーションされます。 さらに、Test2::V0を使っているのであれば、このように is の差分がアノテーションされるので、どのような状態でテストに落ちたのかが一目で分かるようになります*1

f:id:utgwkk:20200531020834p:plain
'山下七海' ne 'NA'

Problem matcherについて

今回書いたTest2プラグインを試すために、適当なリポジトリでSetup Perl Environment actionを使ってテストを走らせていたのですが、アノテーションプラグインをuseしなくても落ちたテストにアノテーションされていることに気づきました。

f:id:utgwkk:20200531021652p:plain
このように

よく見ると、以下のように当該actionのREADMEに書いてあります。

This action sets by perl environment for use in actions by:

  • optionally downloading and caching a version of perl
  • registering problem matchers for error output

このアノテーションは、Problem matcherという機能によって実現されていました。テストの出力から、落ちたテストのファイルパスや行数・メッセージを正規表現マッチで抽出してアノテーションしています。

なるほど、この機能のことを知らずにTest2プラグインを書いていた*2のですが、reviewdogに渡す出力のフォーマットを決めるのに似ているなと思いました。 落ちたテストの行数だけを知るのであれば、Problem matcherだけでも十分そうです。行数に加えてアサーションの詳細を見たい、というときには単純な正規表現マッチだけでは限界があるので、今回書いたプラグインのようなものを併用するのがよさそうと思いました。

*1:https://github.com/utgwkk/playground-of-Test2-Plugin-GitHub-Actions-AnnotateFailedTest/actions/runs/120008307

*2:当初は行数のアノテーションだけやっていて、アサーションの詳細もアノテーションしたいと思い一念発起して実装した後に気づいた