forked from go-eagle/eagle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
157 lines (132 loc) · 3.98 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
SHELL := /bin/bash
BASEDIR = $(shell pwd)
# build with version infos
versionDir = "github.com/go-eagle/eagle/pkg/version"
gitTag = $(shell if [ "`git describe --tags --abbrev=0 2>/dev/null`" != "" ];then git describe --tags --abbrev=0; else git log --pretty=format:'%h' -n 1; fi)
buildDate = $(shell TZ=Asia/Shanghai date +%FT%T%z)
gitCommit = $(shell git log --pretty=format:'%H' -n 1)
gitTreeState = $(shell if git status|grep -q 'clean';then echo clean; else echo dirty; fi)
ldflags="-w -X ${versionDir}.gitTag=${gitTag} -X ${versionDir}.buildDate=${buildDate} -X ${versionDir}.gitCommit=${gitCommit} -X ${versionDir}.gitTreeState=${gitTreeState}"
PROJECT_NAME := "github.com/go-eagle/eagle"
PKG := "$(PROJECT_NAME)"
PKG_LIST := $(shell go list ${PKG}/... | grep -v /vendor/)
GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/ | grep -v _test.go)
# init environment variables
export PATH := $(shell go env GOPATH)/bin:$(PATH)
export GOPATH := $(shell go env GOPATH)
export GO111MODULE := on
# make make all
.PHONY: all
all: lint test build
.PHONY: build
# make build, Build the binary file
build: dep
@go build -v -ldflags ${ldflags} .
.PHONY: dep
# make dep Get the dependencies
dep:
@go mod download
.PHONY: fmt
# make fmt
fmt:
@gofmt -s -w .
.PHONY: lint
# make lint
lint:
@golint -set_exit_status ${PKG_LIST}
.PHONY: ci-lint
# make ci-lint
ci-lint: prepare-lint
${GOPATH}/bin/golangci-lint run ./...
.PHONY: prepare-lint
# make prepare-lint
prepare-lint:
@if ! which golangci-lint &>/dev/null; then \
echo "Installing golangci-lint"; \
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s latest; \
fi
.PHONY: test
# make test
test: test-case vet
@go test -short ${PKG_LIST}
.PHONY: test-case
# make test-case
test-case:
@go test -cover ./... | grep -v vendor;true
.PHONY: vet
# make vet
vet:
go vet ./... | grep -v vendor;true
.PHONY: cover
# make cover
cover: gen-coverage
@go tool cover -html=coverage.txt
.PHONY: gen-coverage
# make gen-coverage
gen-coverage:
@go test -short -coverprofile coverage.txt -covermode=atomic ${PKG_LIST}
.PHONY: docker
# make docker 生成docker镜像
docker:
docker build -t eagle:$(versionDir) -f Dockeffile .
.PHONY: clean
# make clean
clean:
@-rm -vrf eagle
@-rm -vrf cover.out
@-rm -vrf coverage.txt
@go mod tidy
@echo "clean finished"
.PHONY: docs
# gen swagger doc
docs:
@if ! which swag &>/dev/null; then \
echo "downloading swag"; \
go get -u github.com/swaggo/swag/cmd/swag; \
fi
@swag init
@mv docs/docs.go api/http
@mv docs/swagger.json api/http
@mv docs/swagger.yaml api/http
@echo "gen-docs done"
@echo "see docs by: http://localhost:8080/swagger/index.html"
.PHONY: graph
# make graph 生成交互式的可视化Go程序调用图(会在浏览器自动打开)
graph:
@export GO111MODULE="on"
@if ! which go-callvis &>/dev/null; then \
echo "downloading go-callvis"; \
go get -u github.com/ofabry/go-callvis; \
fi
@echo "generating graph"
@go-callvis github.com/go-eagle/eagle
.PHONY: mockgen
# make mockgen gen mock file
mockgen:
@echo "downloading mockgen"
@go get github.com/golang/mock/mockgen
cd ./internal && for file in `egrep -rnl "type.*?interface" ./dao | grep -v "_test" `; do \
echo $$file ; \
cd .. && mockgen -destination="./internal/mock/$$file" -source="./internal/$$file" && cd ./internal ; \
done
.PHONY: ca
# generate ca
ca:
openssl req -new -nodes -x509 -out config/server.crt -keyout config/server.key -days 3650 -subj "/C=DE/ST=NRW/L=Earth/O=Random Company/OU=IT/CN=127.0.0.1/[email protected]"
# show help
help:
@echo ''
@echo 'Usage:'
@echo ' make [target]'
@echo ''
@echo 'Targets:'
@awk '/^[a-zA-Z\-\_0-9]+:/ { \
helpMessage = match(lastLine, /^# (.*)/); \
if (helpMessage) { \
helpCommand = substr($$1, 0, index($$1, ":")-1); \
helpMessage = substr(lastLine, RSTART + 2, RLENGTH); \
printf "\033[36m%-22s\033[0m %s\n", helpCommand,helpMessage; \
} \
} \
{ lastLine = $$0 }' $(MAKEFILE_LIST)
.DEFAULT_GOAL := all