@@ -5,54 +5,90 @@ LDFLAGS := -X "main.gitTag=$(GIT_TAG)" -X "main.gitCommit=$(GIT_COMMIT)" -ext
5
5
6
6
FIRST_GOPATH := $(firstword $(subst :, ,$(shell go env GOPATH) ) )
7
7
GOLANGCI_LINT_BIN := $(FIRST_GOPATH ) /bin/golangci-lint
8
- GOSEC_BIN := $(FIRST_GOPATH ) /bin/gosec
9
8
10
9
.PHONY : all
11
- all : build
10
+ all : vendor build
12
11
13
12
.PHONY : clean
14
13
clean :
15
14
git clean -Xfd .
16
15
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
+ # ######################################
20
19
21
20
.PHONY : vendor
22
21
vendor :
23
22
go mod tidy
24
23
go mod vendor
25
24
go mod verify
26
25
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
+
27
36
.PHONY : image
28
- image : build
37
+ image : image
29
38
docker build -t $(PROJECT_NAME ) :$(GIT_TAG ) .
30
39
40
+ .PHONY : build-push-development
31
41
build-push-development :
32
42
docker buildx create --use
33
43
docker buildx build -t webdevops/$(PROJECT_NAME ) :development --platform linux/amd64,linux/arm,linux/arm64 --push .
34
44
35
- .PHONY : test
36
- test :
37
- go test ./...
45
+ # ######################################
46
+ # quality checks
47
+ # ######################################
38
48
39
- .PHONY : dependencies
40
- dependencies :
41
- go mod vendor
49
+ .PHONY : check
50
+ check : vendor lint test
42
51
43
- .PHONY : check-release
44
- check-release : vendor lint gosec test
52
+ .PHONY : test
53
+ test :
54
+ time go test ./...
45
55
46
56
.PHONY : lint
47
57
lint : $(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
53
59
54
60
$(GOLANGCI_LINT_BIN ) :
55
61
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(FIRST_GOPATH ) /bin
56
62
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