-
Notifications
You must be signed in to change notification settings - Fork 0
/
app_makefile
129 lines (111 loc) · 3.81 KB
/
app_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
GOPATH:=$(shell go env GOPATH)
VERSION=$(shell git describe --tags --always)
APP_RELATIVE_PATH=$(shell a=`basename $$PWD` && cd .. && b=`basename $$PWD` && echo $$b/$$a)
CMD_PATH=$(shell a=`basename $$PWD` && echo "cmd/$$a")
INTERNAL_PROTO_FILES=$(shell find internal -name *.proto)
API_PROTO_FILES=$(shell cd ../../../api/$(APP_RELATIVE_PATH) && find . -name *.proto)
KRATOS_VERSION=$(shell go mod graph |grep go-kratos/kratos/v2 |head -n 1 |awk -F '@' '{print $$2}')
KRATOS=$(GOPATH)/pkg/mod/github.com/go-kratos/kratos/v2@$(KRATOS_VERSION)
APP_NAME=$(shell echo $(APP_RELATIVE_PATH) | sed -En "s/\//-/p")
DOCKER_IMAGE=$(shell echo $(APP_NAME) |awk -F '@' '{print "exuan/ruber-" $$0 ":0.1.0"}')
.PHONY: init
# init env
init:
go get -u google.golang.org/protobuf/cmd/protoc-gen-go
go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc
go get -u github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2
go get -u github.com/google/wire/cmd/wire
go get -u github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
go get -u github.com/favadi/protoc-go-inject-tag
go get -u entgo.io/ent/cmd/ent
.PHONY: grpc
# generate grpc code
grpc:
cd ../../../api/$(APP_RELATIVE_PATH) && protoc --proto_path=. \
--proto_path=../../ \
--proto_path=../../../third_party \
--go_out=paths=source_relative:. \
--go-grpc_out=paths=source_relative:. \
$(API_PROTO_FILES) && find ./* -name '*.pb.go' -exec protoc-go-inject-tag -input={} \;
.PHONY: http
# generate http code
http:
cd ../../../api/$(APP_RELATIVE_PATH) && protoc --proto_path=. \
--proto_path=../../ \
--proto_path=../../../third_party \
--go_out=paths=source_relative:. \
--go-http_out=paths=source_relative:. \
$(API_PROTO_FILES) && find ./* -name '*.pb.go' -exec protoc-go-inject-tag -input={} \;
.PHONY: errors
# generate errors code
errors:
cd ../../../api/$(APP_RELATIVE_PATH) && protoc --proto_path=. \
--proto_path=../../ \
--proto_path=../../../third_party \
--go_out=paths=source_relative:. \
--go-errors_out=paths=source_relative:. \
$(API_PROTO_FILES) && find ./* -name '*.pb.go' -exec protoc-go-inject-tag -input={} \;
.PHONY: swagger
# generate swagger
swagger:
cd ../../../api/$(APP_RELATIVE_PATH) && protoc --proto_path=. \
--proto_path=../../ \
--proto_path=../../../third_party \
--openapiv2_out . \
--openapiv2_opt logtostderr=true \
$(API_PROTO_FILES)
.PHONY: proto
# generate internal proto struct
proto:
protoc --proto_path=. \
--proto_path=../../../third_party \
--go_out=paths=source_relative:. \
$(INTERNAL_PROTO_FILES)
.PHONY: generate
# generate client code
generate:
go generate ./...
.PHONY: build
# build
build:
mkdir -p bin/ && go build -ldflags "-X main.Version=$(VERSION)" -o ./bin/ ./...
.PHONY: test
# test
test:
go test -v ./... -cover
.PHONY: run
run:
cd $(CMD_PATH) && go run .
.PHONY: ent
ent:
cd internal/data/ && ent generate ./ent/schema --feature sql/upsert
.PHONY: docker
docker:
cd ../../.. && docker build -f deploy/build/Dockerfile --build-arg APP_RELATIVE_PATH=$(APP_RELATIVE_PATH) -t $(DOCKER_IMAGE) .
.PHONY: wire
# generate wire
wire:
cd $(CMD_PATH) && wire
.PHONY: api
# generate api proto
api: grpc http swagger errors
.PHONY: all
# generate all
all: grpc http proto generate build test
# 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 := help