diff --git a/.github/workflows/go-coverage.yml b/.github/workflows/go-coverage.yml new file mode 100644 index 0000000..5816484 --- /dev/null +++ b/.github/workflows/go-coverage.yml @@ -0,0 +1,42 @@ +name: Coverage + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + coverage: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: '0' + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: 1.24 + cache: 'true' + + - name: Build + run: go install + + - name: Test + run: | + go test -v -cover ./... -coverprofile coverage.out -coverpkg ./... + go tool cover -func coverage.out -o coverage.out # Replaces coverage.out with the analysis of coverage.out + + - name: Go Coverage Badge + uses: tj-actions/coverage-badge-go@v3 + with: + green: 80 + filename: coverage.out + + - uses: stefanzweifel/git-auto-commit-action@v6 + id: auto-commit-action + with: + commit_message: Apply Code Coverage Badge + file_pattern: ./README.md diff --git a/README.md b/README.md index efea2a0..42c2626 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Exitplan +[![Go Reference](https://pkg.go.dev/badge/github.com/struct0x/exitplan.svg)](https://pkg.go.dev/github.com/struct0x/exitplan) +![Coverage](https://img.shields.io/badge/Coverage-83.2%25-brightgreen) A Go library for managing the lifecycle of an application with graceful shutdown capabilities. -[![Go Reference](https://pkg.go.dev/badge/github.com/struct0x/exitplan.svg)](https://pkg.go.dev/github.com/struct0x/exitplan) - ## Overview The Exitplan library provides a simple mechanism for managing the lifetime of an application. diff --git a/exitplan_test.go b/exitplan_test.go index ce63b09..5954cad 100644 --- a/exitplan_test.go +++ b/exitplan_test.go @@ -6,6 +6,7 @@ import ( "fmt" "slices" "sync" + "sync/atomic" "testing" "time" @@ -165,10 +166,10 @@ func TestOnExitTimeout(t *testing.T) { l := exitplan.New() - called := false + called := atomic.Bool{} l.OnExit(func() { time.Sleep(2 * timeout) - called = true + called.Store(true) }, exitplan.Timeout(timeout)) go func() { @@ -186,7 +187,7 @@ func TestOnExitTimeout(t *testing.T) { t.Errorf("expected timeout between %v and %v, got %v", timeout-timeoutJitter, timeout+timeoutJitter, end.Sub(start)) } - if called { + if called.Load() { t.Error("callback was called") } }