-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathMakefile
More file actions
172 lines (152 loc) · 4.41 KB
/
Copy pathMakefile
File metadata and controls
172 lines (152 loc) · 4.41 KB
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# ========================
# 模块列表
# ========================
SUBMODULES := system demo auth
# ========================
# 模块路径
# ========================
SYSTEM_PATH := app/system
DEMO_PATH := app/demo
AUTH_PATH := app/auth
# ========================
# 模块名
# ========================
SYSTEM_NAME := system
DEMO_NAME := demo
AUTH_NAME := auth
# ========================
# 脚本路径
# ========================
REPLACE_SCRIPT := scripts/replace.sh
# ========================
# 初始化工具
# ========================
.PHONY: init
# init 初始化 goctl 工具和整理依赖
init:
goctl env -w GOCTL_EXPERIMENTAL=off
go install github.com/zeromicro/go-zero/tools/goctl@latest
go mod tidy
# ========================
# 模块通用规则模板
# ========================
define MODULE_RULES
# -------- API 生成 --------
.PHONY: api-$(1)
# api-$(1) 生成 $(1) 模块的 API 代码
api-$(1):
goctl api go \
--api desc/$(1)/api/desc.api \
--style "go_zero" \
--dir $($(shell echo $(1) | tr a-z A-Z)_PATH)
rm -rf $($(shell echo $(1) | tr a-z A-Z)_PATH)/etc
# -------- gRPC 生成 --------
.PHONY: grpc-$(1)
# grpc-$(1) 生成 $(1) 模块的 gRPC 代码
grpc-$(1):
goctl rpc protoc desc/$(1)/rpc/desc.proto \
--style "go_zero" \
--go_out=$($(shell echo $(1) | tr a-z A-Z)_PATH)/pb \
--go-grpc_out=$($(shell echo $(1) | tr a-z A-Z)_PATH)/pb \
--zrpc_out=$($(shell echo $(1) | tr a-z A-Z)_PATH) \
--client=true -m
rm -rf $($(shell echo $(1) | tr a-z A-Z)_PATH)/desc.go $($(shell echo $(1) | tr a-z A-Z)_PATH)/etc
# -------- 数据库生成 --------
.PHONY: db-$(1)
# db-$(1) 生成 $(1) 模块的数据库代码
db-$(1):
gentool -c "gen/$(1)/gen.yaml"
$(REPLACE_SCRIPT) $($(shell echo $(1) | tr a-z A-Z)_PATH)
# -------- 构建模块 --------
.PHONY: build-$(1)
# build-$(1) 构建 $(1) 模块
build-$(1):
go build -ldflags="-s -w" -tags no_k8s \
-o $($(shell echo $(1) | tr a-z A-Z)_NAME) \
$($(shell echo $(1) | tr a-z A-Z)_PATH)/$($(shell echo $(1) | tr a-z A-Z)_NAME).go
# -------- 运行模块 --------
.PHONY: run-$(1)
# run-$(1) 运行 $(1) 模块
run-$(1):
go run $($(shell echo $(1) | tr a-z A-Z)_PATH)/$($(shell echo $(1) | tr a-z A-Z)_NAME).go \
-f etc/$($(shell echo $(1) | tr a-z A-Z)_NAME).yaml
# -------- 后台运行模块 --------
.PHONY: back-$(1)
# back-$(1) 后台运行 $(1) 模块
back-$(1):
nohup ./$$($(shell echo $(1) | tr a-z A-Z)_NAME) \
> $$($(shell echo $(1) | tr a-z A-Z)_NAME).log 2>&1 &
endef
# ========================
# 遍历模块生成规则
# ========================
$(foreach mod,$(SUBMODULES),$(eval $(call MODULE_RULES,$(mod))))
# ========================
# 构建所有模块
# ========================
.PHONY: build-all
# build-all 构建所有模块
build-all:
@for mod in $(SUBMODULES); do \
$(MAKE) build-$$mod; \
done
# ========================
# 批量生成所有模块 API / gRPC / DB
# ========================
.PHONY: gen-all
# gen-all 批量生成所有模块的 API / gRPC / DB
gen-all:
@for mod in $(SUBMODULES); do \
echo ">>> Generating API for $$mod"; \
$(MAKE) api-$$mod; \
echo ">>> Generating gRPC for $$mod"; \
$(MAKE) grpc-$$mod; \
echo ">>> Generating DB for $$mod"; \
$(MAKE) db-$$mod; \
done
# ========================
# 替换生成 model 的软删除字段
# ========================
.PHONY: replace
# replace 将生成 model 的 DelFlag 替换为 gorm soft_delete 类型
replace:
$(REPLACE_SCRIPT) .
# ========================
# 后台运行所有模块
# ========================
.PHONY: back-all
# back-all 后台运行所有模块
back-all:
@for mod in $(SUBMODULES); do \
$(MAKE) back-$$mod; \
done
# ========================
# Traefik 运行
# ========================
.PHONY: traefik-run
# traefik-run 启动 Traefik
traefik-run:
./bin/traefik/traefik --configfile=./bin/traefik/traefik.yaml
# ========================
# 显示 help
# ========================
.PHONY: 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-2); \
printf "\033[36m%-22s\033[0m %s\n", helpCommand, helpMessage; \
} \
} \
{ lastLine = $$0 }' $(MAKEFILE_LIST)
# ========================
# 默认目标
# ========================
.DEFAULT_GOAL := help