CI の一環として、GitHub のデフォルトブランチに PR を作成した時と、マージをした時に UT を行う GitHub Actions を作成します。
ファイル構成
.github
├─ actions
│ └─ go-ut
| └─ action.yml
└─ workflows
└─ ci.yml
json
├─ go.mod
├─ go.sum
├─ pretty_print.go
└─ pretty_print_test.go
.gitignore
最終的にはリリースも GitHub Actions から行うため、UT の実行は action.yml に記載しています。
今回は、Go 言語の UT を対象にしており、json フォルダの下にコードおよび、テストコードが置かれています。
Action
.github/actions/go-ut/action.yml
name: Go UT
description: Run go unit test
inputs:
go-directory:
required: true
result-file:
required: false
default: result.txt
runs:
using: 'composite'
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.21'
- name: Build
shell: bash
run: go build -v ./...
working-directory: ${{ inputs.go-directory }}
- name: Test
shell: bash
run: go test -cover ./... > ${{ inputs.result-file }}
working-directory: ${{ inputs.go-directory }}
- name: Summary
shell: bash
run: |
echo "### UT summary" >> $GITHUB_STEP_SUMMARY
while read LINE; do
echo $LINE >> $GITHUB_STEP_SUMMARY
done < ${{ inputs.result-file }}
working-directory: ${{ inputs.go-directory }}
引数には、テスト対象の Go モジュールのディレクトリ(go-directory)と、テスト結果の出力ファイル名(result-file)を定義しています。
また、テスト結果を GitHub Action のサマリーとして出力しています。
Workflow
.github/workflows/ci.yml
name: CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
UT:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Go UT
uses: ./.github/actions/go-ut
with:
go-directory: ./json
実行結果
main ブランチに PR を作成すると UT が実行されます。
Details から Action を確認すると Summary にテスト結果が表示されます。
TODO
- リリースを GitHub Actions から行う
- Summary を見やすくする