私が歌川です

@utgwkk が書いている

Goのテスト結果をtparseで整形する・GitHub ActionsのJob Summaryと組み合わせる

あらすじ

go test が出力するログはシンプルです。シンプルなのはいいんですがテストサマリ的な情報が乏しくて、ログを全部見返さないとどのテストが落ちたのか分からなくなりがちという問題があります。

tparseというツールを使うと、go test を使いつつテストサマリが見れるようになるので紹介します。

tparseについて

tparseは、go test の出力をパースして人間に分かりやすいサマリを生成してくれるツールです。

github.com

最も簡単な使い方としては、READMEにあるように go test の出力をそのままパイプする (あるいは一時ファイルを経由する) ことで動作します。

% set -o pipefail && go test ./... -json | tparse -all

# あるいは
% go test ./... -json > fmt.out
% tparse -all -file=fmt.out

tparseとGitHub ActionsのJob Summaryを組み合わせる

こっちが本題です。

GitHub ActionsにはJob Summaryという機能があり、ジョブの結果をまとめたレポートをMarkdown形式でジョブに添付することができます。詳しくはGitHubのブログ記事を読んでください。

github.blog

tparseはテストサマリをいくつかの形式で生成することができます。対応している形式の中にはMarkdownがあります。

ということで、tparseが生成するMarkdown形式のテストサマリをJob Summaryとして出力できるようにしてみましょう。Job Summaryを生成するステップを分ける場合は、以下のように go test の出力を tee コマンドで一時ファイルに出しつつ引き回したり、if: always() でテストがコケたときも実行されるようにしたりなどいくつか気をつけるポイントがあります。

- name: Test
  run: |
    set -o pipefail
    go test ./... -json | tee ./go-test.out | go run github.com/mfridman/tparse -all
- name: Add job summary
  if: always()
  run: |
    go run github.com/mfridman/tparse -file ./go-test.out -format markdown >> $GITHUB_STEP_SUMMARY

うまくいくと以下のようなJob Summaryが生成されると思います。テストの数が多くなると見慣れた表形式でテストの状況を俯瞰できて便利そうですね。

GitHub Actions Job Summaryの例

おわりに

tparseで go test のテストサマリを生成し、GitHub ActionsのJob Summaryと組み合わせる例について紹介しました。普段から使っているテストランナーは差し替えずに、テストの出力結果をパースして整形してくれるのがUNIX的でいいですね。

Goのテストが出力するログが見づらいと思っている方はぜひ使ってみてください。