@@ -5,54 +5,90 @@ LDFLAGS := -X "main.gitTag=$(GIT_TAG)" -X "main.gitCommit=$(GIT_COMMIT)" -ext
55
66FIRST_GOPATH := $(firstword $(subst :, ,$(shell go env GOPATH) ) )
77GOLANGCI_LINT_BIN := $(FIRST_GOPATH ) /bin/golangci-lint
8- GOSEC_BIN := $(FIRST_GOPATH ) /bin/gosec
98
109.PHONY : all
11- all : build
10+ all : vendor build
1211
1312.PHONY : clean
1413clean :
1514 git clean -Xfd .
1615
17- .PHONY : build
18- build :
19- GOOS= ${GOOS} GOARCH= ${GOARCH} CGO_ENABLED=0 go build -a -ldflags ' $(LDFLAGS) ' -o $( PROJECT_NAME ) .
16+ # ######################################
17+ # builds
18+ # ######################################
2019
2120.PHONY : vendor
2221vendor :
2322 go mod tidy
2423 go mod vendor
2524 go mod verify
2625
26+ .PHONY : build-all
27+ build-all :
28+ GOOS=linux GOARCH=${GOARCH} CGO_ENABLED=0 go build -ldflags ' $(LDFLAGS)' -o ' $(PROJECT_NAME)' .
29+ GOOS=darwin GOARCH=${GOARCH} CGO_ENABLED=0 go build -ldflags ' $(LDFLAGS)' -o ' $(PROJECT_NAME).darwin' .
30+ GOOS=windows GOARCH=${GOARCH} CGO_ENABLED=0 go build -ldflags ' $(LDFLAGS)' -o ' $(PROJECT_NAME).exe' .
31+
32+ .PHONY : build
33+ build :
34+ GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 go build -ldflags ' $(LDFLAGS)' -o $(PROJECT_NAME ) .
35+
2736.PHONY : image
28- image : build
37+ image : image
2938 docker build -t $(PROJECT_NAME ) :$(GIT_TAG ) .
3039
40+ .PHONY : build-push-development
3141build-push-development :
3242 docker buildx create --use
3343 docker buildx build -t webdevops/$(PROJECT_NAME ) :development --platform linux/amd64,linux/arm,linux/arm64 --push .
3444
35- .PHONY : test
36- test :
37- go test ./...
45+ # ######################################
46+ # quality checks
47+ # ######################################
3848
39- .PHONY : dependencies
40- dependencies :
41- go mod vendor
49+ .PHONY : check
50+ check : vendor lint test
4251
43- .PHONY : check-release
44- check-release : vendor lint gosec test
52+ .PHONY : test
53+ test :
54+ time go test ./...
4555
4656.PHONY : lint
4757lint : $(GOLANGCI_LINT_BIN )
48- $(GOLANGCI_LINT_BIN ) run -E exportloopref,gofmt --timeout=30m
49-
50- .PHONY : gosec
51- gosec : $(GOSEC_BIN )
52- $(GOSEC_BIN ) ./...
58+ time $(GOLANGCI_LINT_BIN ) run --verbose --print-resources-usage
5359
5460$(GOLANGCI_LINT_BIN ) :
5561 curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(FIRST_GOPATH ) /bin
5662
57- $(GOSEC_BIN ) :
58- curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s -- -b $(FIRST_GOPATH ) /bin
63+ # ######################################
64+ # release assets
65+ # ######################################
66+
67+ RELEASE_ASSETS = \
68+ $(foreach GOARCH,amd64 arm64,\
69+ $(foreach GOOS,linux darwin windows,\
70+ release-assets/$(GOOS ) .$(GOARCH ) ) ) \
71+
72+ word-dot = $(word $2,$(subst ., ,$1) )
73+
74+ .PHONY : release-assets
75+ release-assets : clean-release-assets vendor $(RELEASE_ASSETS )
76+
77+ .PHONY : clean-release-assets
78+ clean-release-assets :
79+ rm -rf ./release-assets
80+ mkdir -p ./release-assets
81+
82+ release-assets/windows.% : $(SOURCE )
83+ echo ' build release-assets for windows/$(call word-dot,$*,2)'
84+ GOOS=windows \
85+ GOARCH=$(call word-dot,$*,1) \
86+ CGO_ENABLED=0 \
87+ time go build -ldflags '$(LDFLAGS)' -o './release-assets/$(PROJECT_NAME).windows.$(call word-dot,$*,1).exe' .
88+
89+ release-assets/% : $(SOURCE )
90+ echo ' build release-assets for $(call word-dot,$*,1)/$(call word-dot,$*,2)'
91+ GOOS=$(call word-dot,$* ,1) \
92+ GOARCH=$(call word-dot,$*,2) \
93+ CGO_ENABLED=0 \
94+ time go build -ldflags '$(LDFLAGS)' -o './release-assets/$(PROJECT_NAME).$(call word-dot,$*,1).$(call word-dot,$*,2)' .
0 commit comments