GitHub ワークフローにおいて発生したエラーを Problem Matcher でアノテーションする

create
2021年01月25日
update
2021年01月25日

はじめに🥞

エラー発生頻度がそれなりにある場合、いちいちワークフローの実行ログを確認するのが面倒だったので、エラーメッセージをアノテーションとして表示させたかった。

アノテーションを表示するには Problem Matchers を定義し、ワークフローで読み込めばいいらしい。

GitHub アノテーション🔔

UIに表示される特定のメッセージのこと。
ワークフロー実行結果の下部に表示されるやつ。

GitHubアノテーション

Problem Matchers 🌡️

GitHub Action の出力を正規表現のパターンで解析してアノテーションとして表示する機能。

Problem Matcher の定義は JSONファイルに記述し、ワークフローファイルでその定義ファイルを有効化する。

定義

ここのドキュメントを参考にして定義する。

指定する正規表現パターンではキャプチャグループ () を利用してファイル名や行番号、エラーメッセージなどを設定する。

Example 1. Problem Matcherの定義例
.github/my-problem-matcher.json
{
  "problemMatcher": [
    {
      "owner": "this_matcher_ID",  (1)
      "pattern": [
        {
          "regexp": "^([^:]+):(\\d+):(\\d+): (.+)$",  (2)
          "message": 4,  (3)
          "file": 1,
          "fromPath": 1,
          "line": 2,
          "column": 3
        }
      ]
    }
  ]
}
1 必須Problem MatcherID として任意の名前をつける。
2 必須。出力から抽出する正規表現パターンを指定。
キャプチャグループを用いることで他プロパティから利用できるようにする。
3 必須regexp のグループ番号からエラーメッセージにあたる値を指定。
owner , regexp , message が必須プロパティ。

有効化/無効化

ワークフローコマンドで Problem Matcher の有効・無効を制御する。

有効化

add-matcher コマンドで定義 JSON ファイルを指定する。

ワークフローで独自 Problem Matcher を有効化
steps:
  - name: Enable problem matcher
    run: echo "::add-matcher::.github/my-problem-matcher.json"
無効化

remove-matcher コマンドで Problem MatcherIDowner プロパティの値)を指定する。

独自 Problem Matcher を無効化
steps:
  - name: Disable problem matcher
    run: echo "::remove-matcher owner=matcher-ID::"
add-matcher ではファイルパスを指定、
remove-matcher では定義された owner プロパティ値を指定する。

おわりに😎

Problem Matcher の正規表現パターンさえ書ければアノテーションとして表示できることがわかった。

ワークフローのログがわかりやすくなるのでうまく利用していきたい。