Dockerコンテナアクション
GitHub Actions (GHA)のDockerコンテナアクションは
- アクションを呼び出したときに実行したいスクリプト(entrypoint.sh)
- その実行環境としてのDockerfile
を用意してGHAのアクションとしてまとめたもの。かんたんに他のリポジトリから利用できるアクションを作ることができる。
problem matchers
GHAにはproblem matchersという機能がある。この機能を使うと、アクション実行時に標準出力に現れる文字列(多くは静的解析ツールが出力する警告など)を解析する正規表現を含む設定ファイルを事前に::add-matcher
コマンドで登録することで、プルリクエスト (PR)の"Files changed"タブにアノテーションを表示できる。
- 公式ドキュメント
- 公式だが若干わかりにくい
- GitHub Actions の Problem Matchers でコード中に注釈を入れる
- わかりやすい記事
アノテーションとは、具体的には次のような表示のこと。
Dockerコンテナアクションの実行時にproblem matchersを有効化する
以上の機能を組み合わせて、Dockerコンテナアクションで静的解析ツールを実行して、その結果をproblem matchersによってアノテーションとして表示したいときは次のようにする。
まず、アクションのentrypoint.shで::add-matcher
をechoしておく。
#!/bin/sh -l # アクションのリポジトリの.github/matcher.jsonにmatcherの定義を書いておく echo "::add-matcher::.github/matcher.json" # 静的解析ツールの実行など…
これでmatcherの設定ファイルがGHAに認識され、登録される。
あとは、matcherで定義したパターンの文字列(ファイル行を含む)を標準出力に出力すると、matcherがパターンを解析して、アクションを呼び出したPRの"Files changed"タブのdiff上で対応する行にアノテーションを付与する。
::add-matcher
のドキュメントの例では、ワークフロー上でmatcherを追加する例だけが載っているだけなのだが、GHAとしては標準出力に::add-matcher
が出ていれば、それを見てmatcherを登録するだけなので、アクション側のスクリプトでechoしても問題ないというのが発見だった。