sano11o1

Goのテスト結果をsedコマンドで色付きで表示しつつexits codeを返却する方法

公開日:

Goの標準test/testingモジュールにはテスト結果に色をつける方法が提供されていません。

sedコマンドで testコマンドの結果の特定の文字列に色をつけることができます。

Goのテストに失敗するとexits code 1を返却します。

sedの色付けの部分が成功するとテストが失敗した場合でもexits code 0を返却します。

GithubActionsではコマンドの実行ステータス(exits code)を評価し、成功(0)でない場合はPull Requestをマージできないように設定できます。
https://docs.github.com/ja/actions/creating-actions/setting-exit-codes-for-actions
https://docs.github.com/ja/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule

sedコマンドで色をつけた場合、 go testのexits codeを返却する必要があります。
bashではPIPESTAUS変数から任意の結果にアクセスできます。
この結果を返すbashスクリプトを実行することで、Goのテスト結果をsedコマンドで色付きで表示しつつexits codeを返却できます。

#!/bin/bash		
set -o pipefail
go test -v ./... \
  | sed 's/PASS/'"$(printf "\033[32mPASS\033[0m")"'/g' \
  | sed 's/FAIL/'"$(printf "\033[31mFAIL\033[0m")"'/g'
exit ${PIPESTATUS[0]}