1
+ .PHONY : help
2
+ help : # # Prints help (only for targets with comments)
3
+ @grep -E ' ^[a-zA-Z._-]+:.*?## .*$$' $(MAKEFILE_LIST ) | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
4
+
5
+ SRC_PACKAGES =$(shell go list -mod=vendor ./... | grep -v "vendor")
6
+ BUILD? =$(shell git describe --always --dirty 2> /dev/null)
7
+ GOLINT: =$(shell command -v golint 2> /dev/null)
8
+ RICHGO =$(shell command -v richgo 2> /dev/null)
9
+ GOMETA_LINT =$(shell command -v golangci-lint 2> /dev/null)
10
+ GOLANGCI_LINT_VERSION =v1.20.0
11
+ GO111MODULE =on
12
+ SHELL =bash -o pipefail
13
+
14
+ ifeq ($(GOMETA_LINT ) ,)
15
+ GOMETA_LINT=$(shell command -v $(PWD)/bin/golangci-lint 2> /dev/null)
16
+ endif
17
+
18
+ ifeq ($(RICHGO ) ,)
19
+ GO_BINARY=go
20
+ else
21
+ GO_BINARY=richgo
22
+ endif
23
+
24
+ ifeq ($(BUILD ) ,)
25
+ BUILD=dev
26
+ endif
27
+
28
+ ifdef CI_COMMIT_SHORT_SHA
29
+ BUILD=$(CI_COMMIT_SHORT_SHA)
30
+ endif
31
+
32
+ all : setup build
33
+
34
+ ci : setup-common build-common
35
+
36
+ ensure-build-dir :
37
+ mkdir -p out
38
+
39
+ build-deps : # # Install dependencies
40
+ go get
41
+ go mod tidy
42
+ go mod vendor
43
+
44
+ update-deps : # # Update dependencies
45
+ go get -u
46
+
47
+ compile : compile-app # # Compile library
48
+
49
+ compile-app : ensure-build-dir
50
+ $(GO_BINARY ) build -mod=vendor ...
51
+
52
+ build : fmt build-common # # Build the library
53
+
54
+ build-common : vet lint-all test compile
55
+
56
+ fmt :
57
+ GOFLAGS=" -mod=vendor" $(GO_BINARY ) fmt $(SRC_PACKAGES )
58
+
59
+ vet :
60
+ $(GO_BINARY ) vet -mod=vendor $(SRC_PACKAGES )
61
+
62
+ setup-common :
63
+ ifeq ($(GOMETA_LINT ) ,)
64
+ curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s $(GOLANGCI_LINT_VERSION)
65
+ endif
66
+ ifeq ($(GOLINT ) ,)
67
+ GO111MODULE=off $(GO_BINARY) get -u golang.org/x/lint/golint
68
+ endif
69
+
70
+ setup-richgo :
71
+ ifeq ($(RICHGO ) ,)
72
+ GO111MODULE=off $(GO_BINARY) get -u github.com/kyoh86/richgo
73
+ endif
74
+
75
+ setup : setup-richgo setup-common ensure-build-dir # # Setup environment
76
+
77
+ lint-all : lint setup-common
78
+ $(GOMETA_LINT ) run
79
+
80
+ target :
81
+ for number in 1 2 3 4 ; do \
82
+ echo $$number ; \
83
+ done
84
+
85
+ lint :
86
+ golint $(SRC_PACKAGES )
87
+
88
+ test : ensure-build-dir # # Run tests
89
+ ENVIRONMENT=test $(GO_BINARY ) test -mod=vendor $(SRC_PACKAGES ) -race -coverprofile ./out/coverage -short -v | grep -viE " start|no test files"
90
+
91
+ test-cover-html : # # Run tests with coverage
92
+ mkdir -p ./out
93
+ @echo " mode: count" > coverage-all.out
94
+ $(foreach pkg, $(SRC_PACKAGES ) ,\
95
+ ENVIRONMENT=test $(GO_BINARY ) test -mod=vendor -coverprofile=coverage.out -covermode=count $(pkg ) ; \
96
+ tail -n +2 coverage.out >> coverage-all.out; )
97
+ $(GO_BINARY ) tool cover -html=coverage-all.out -o out/coverage.html
98
+
99
+ generate-test-summary :
100
+ ENVIRONMENT=test $(GO_BINARY ) test -mod=vendor $(SRC_PACKAGES ) -race -coverprofile ./out/coverage -short -v -json | grep -viE " start|no test files" | tee test-summary.json; \
101
+ sed -i '' -E "s/^(.+\| {)/{/" test-summary.json; \
102
+ passed=`cat test-summary.json | jq | rg '"Action": "pass"' | wc -l`; \
103
+ skipped=`cat test-summary.json | jq | rg '"Action": "skip"' | wc -l`; \
104
+ failed=`cat test-summary.json | jq | rg '"Action": "fail"' | wc -l`; \
105
+ echo "Passed: $$passed | Failed: $$failed | Skipped: $$skipped"
0 commit comments