公開日:
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]}