diff --git a/Makefile b/Makefile index 2dd10fdbd..8e697535e 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,7 @@ include scripts/make-rules/copyright.mk include scripts/make-rules/gen.mk include scripts/make-rules/dependencies.mk include scripts/make-rules/tools.mk +include scripts/make-rules/release.mk # ============================================================================== # Usage @@ -54,9 +55,9 @@ export USAGE_OPTIONS build: @$(MAKE) go.build -## build-multiarch: Build binaries for multiple platforms. See option PLATFORMS. -.PHONY: build-multiarch -build-multiarch: +## multiarch: Build binaries for multiple platforms. See option PLATFORMS. +.PHONY: multiarch +multiarch: @$(MAKE) go.build.multiarch ## tidy: tidy go.mod diff --git a/scripts/coverage.awk b/scripts/coverage.awk new file mode 100644 index 000000000..49389054e --- /dev/null +++ b/scripts/coverage.awk @@ -0,0 +1,13 @@ +#!/usr/bin/env awk + +{ + print $0 + if (match($0, /^total:/)) { + sub(/%/, "", $NF); + printf("test coverage is %s%(quality gate is %s%)\n", $NF, target) + if (strtonum($NF) < target) { + printf("test coverage does not meet expectations: %d%, please add test cases!\n", target) + exit 1; + } + } +} diff --git a/scripts/coverage.sh b/scripts/coverage.sh new file mode 100644 index 000000000..9fb77b59a --- /dev/null +++ b/scripts/coverage.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# http://stackoverflow.com/a/21142256/2055281 + +echo "mode: atomic" > coverage.txt + +for d in $(find ./* -maxdepth 10 -type d); do + if ls $d/*.go &> /dev/null; then + go test -coverprofile=profile.out -covermode=atomic $d + if [ -f profile.out ]; then + cat profile.out | grep -v "mode: " >> /tmp/coverage.txt + rm profile.out + fi + fi +done + diff --git a/scripts/make-rules/golang.mk b/scripts/make-rules/golang.mk index f9a73b5bd..25939b090 100644 --- a/scripts/make-rules/golang.mk +++ b/scripts/make-rules/golang.mk @@ -150,7 +150,7 @@ go.test: .PHONY: go.test.junit-report go.test.junit-report: tools.verify.go-junit-report @echo "===========> Run unit test > $(TMP_DIR)/report.xml" - @$(GO) test -v -coverprofile=$(TMP_DIR)/coverage.out 2>&1 ./... | $(TOOLS_DIR)/go-junit-report -set-exit-code > $(OUTPUT_DIR)/report.xml + @$(GO) test -v -coverprofile=$(TMP_DIR)/coverage.out 2>&1 ./... | $(TOOLS_DIR)/go-junit-report -set-exit-code > $(TMP_DIR)/report.xml @sed -i '/mock_.*.go/d' $(TMP_DIR)/coverage.out @echo "===========> Test coverage of Go code is reported to $(TMP_DIR)/coverage.html by generating HTML" @$(GO) tool cover -html=$(TMP_DIR)/coverage.out -o $(TMP_DIR)/coverage.html