coverage: make targets + close zero-cov gaps (namegen, sessionstream)
Adds `make coverage` (per-package + total via -coverpkg=./...), `make coverage-html`, and `make coverage-total` (CI-friendly). Wires coverage.out/coverage.html through `make clean` and .gitignore. Closes the two easy zero-coverage packages: namegen (77.8%) and sessionstream (93.5%). Total statement coverage 51.7% -> 52.1%.
This commit is contained in:
parent
88425fb857
commit
18bf89eae9
5 changed files with 204 additions and 11 deletions
39
Makefile
39
Makefile
|
|
@ -28,19 +28,22 @@ GO_LDFLAGS := -X banger/internal/buildinfo.Version=$(VERSION) -X banger/internal
|
|||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
.PHONY: help build banger bangerd test fmt tidy clean install bench-create lint lint-go lint-shell
|
||||
.PHONY: help build banger bangerd test fmt tidy clean install bench-create lint lint-go lint-shell coverage coverage-html coverage-total
|
||||
|
||||
help:
|
||||
@printf '%s\n' \
|
||||
'Targets:' \
|
||||
' make build Build ./build/bin/banger, ./build/bin/bangerd, and ./build/bin/banger-vsock-agent' \
|
||||
' make install Build and install banger, bangerd, and the companion vsock helper' \
|
||||
' make test Run go test ./...' \
|
||||
' make lint Run gofmt + go vet + shellcheck (errors)' \
|
||||
' make fmt Format Go sources under cmd/ and internal/' \
|
||||
' make tidy Run go mod tidy' \
|
||||
' make clean Remove built Go binaries' \
|
||||
' make bench-create Benchmark vm create and SSH readiness with scripts/bench-create.sh'
|
||||
' make build Build ./build/bin/banger, ./build/bin/bangerd, and ./build/bin/banger-vsock-agent' \
|
||||
' make install Build and install banger, bangerd, and the companion vsock helper' \
|
||||
' make test Run go test ./...' \
|
||||
' make coverage Run tests with coverage; print per-package + total' \
|
||||
' make coverage-html Open a browsable per-line HTML report (writes coverage.html)' \
|
||||
' make coverage-total Print just the total statement coverage (for scripts/CI)' \
|
||||
' make lint Run gofmt + go vet + shellcheck (errors)' \
|
||||
' make fmt Format Go sources under cmd/ and internal/' \
|
||||
' make tidy Run go mod tidy' \
|
||||
' make clean Remove built Go binaries and coverage artefacts' \
|
||||
' make bench-create Benchmark vm create and SSH readiness with scripts/bench-create.sh'
|
||||
|
||||
build: $(BINARIES)
|
||||
|
||||
|
|
@ -59,6 +62,22 @@ $(VSOCK_AGENT_BIN): $(BUILD_INPUTS) go.mod go.sum
|
|||
test:
|
||||
$(GO) test ./...
|
||||
|
||||
# Coverage targets use -coverpkg=./... so packages without their own
|
||||
# tests still get counted when another package exercises them (common
|
||||
# for daemon/* subpackages). coverage.out is gitignored.
|
||||
coverage:
|
||||
$(GO) test -coverpkg=./... -coverprofile=coverage.out ./...
|
||||
@echo ''
|
||||
@echo 'Per-package:'
|
||||
@$(GO) tool cover -func=coverage.out | awk -F'\t+' '/^total:/ {total=$$NF; next} {pkg=$$1; sub("banger/", "", pkg); sub("/[^/]+:[0-9]+:$$", "", pkg); pkgs[pkg]+=1; covered[pkg]+=$$NF+0} END {for (p in pkgs) printf " %-40s %.1f%% (avg of %d funcs)\n", p, covered[p]/pkgs[p], pkgs[p] | "sort"; print ""; print "Total statement coverage:", total}'
|
||||
|
||||
coverage-html: coverage
|
||||
$(GO) tool cover -html=coverage.out -o coverage.html
|
||||
@echo 'wrote coverage.html'
|
||||
|
||||
coverage-total:
|
||||
@$(GO) test -coverpkg=./... -coverprofile=coverage.out ./... >/dev/null 2>&1 && $(GO) tool cover -func=coverage.out | awk '/^total:/ {print $$NF}'
|
||||
|
||||
lint: lint-go lint-shell
|
||||
|
||||
lint-go:
|
||||
|
|
@ -80,7 +99,7 @@ tidy:
|
|||
$(GO) mod tidy
|
||||
|
||||
clean:
|
||||
rm -rf "$(BUILD_BIN_DIR)"
|
||||
rm -rf "$(BUILD_BIN_DIR)" coverage.out coverage.html
|
||||
|
||||
bench-create: build
|
||||
BANGER_BIN="$(abspath $(BANGER_BIN))" bash ./scripts/bench-create.sh $(ARGS)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue