-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.mk
140 lines (114 loc) · 3.77 KB
/
app.mk
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
GOPATH ?= $(shell go env GOPATH)
# Ensure GOPATH is set before running build process.
ifeq "$(GOPATH)" ""
$(error Please set the environment variable GOPATH before running `make`)
endif
FAIL_ON_STDOUT := awk '{ print } END { if (NR > 0) { exit 1 } }'
GO := GO111MODULE=on go
ARCH := "`uname -s`"
LINUX := "Linux"
MAC := "Darwin"
ifeq ($(OS),Windows_NT)
IS_WINDOWS:=1
endif
APP_VERSION=$(shell git describe --tags --always)
APP_RELATIVE_PATH=$(shell a=`basename $$PWD` && cd .. && b=`basename $$PWD` && echo $$b/$$a)
APP_NAME=$(shell echo $(APP_RELATIVE_PATH) | sed -En "s/\//-/p")
APP_DOCKER_IMAGE=$(shell echo $(APP_NAME) |awk -F '@' '{print "kratos-gorm-example/" $$0 ":0.1.0"}')
.PHONY: init dep vendor build clean docker conf ent wire api openapi run test cover vet lint app
# initialize develop environment
init:
@go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
@go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
@go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest
@go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors/v2@latest
@go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest
@go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest
@go install github.com/envoyproxy/protoc-gen-validate@latest
@go install github.com/bufbuild/buf/cmd/buf@latest
@go install github.com/google/gnostic@latest
@go install entgo.io/ent/cmd/ent@latest
@go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
@go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
# download dependencies of module
dep:
@go mod download
# create vendor
vendor:
@go mod vendor
# build golang application
build:
ifeq ("$(wildcard ./bin/)","")
mkdir bin
endif
@go build -ldflags "-X main.Service.Version=$(APP_VERSION)" -o ./bin/ ./...
# clean build files
clean:
@go clean
$(if $(IS_WINDOWS), del "coverage.out", rm -f "coverage.out")
# build docker image
docker:
@docker build -t $(APP_DOCKER_IMAGE) . \
-f ../../../.docker/Dockerfile \
--build-arg APP_RELATIVE_PATH=$(APP_RELATIVE_PATH) GRPC_PORT=9000 REST_PORT=8000
# generate config define code
conf:
protoc --proto_path=./internal/conf/ \
--proto_path=../../../api/third_party \
--go_out=paths=source_relative:./internal/conf/ \
./internal/conf/conf.proto
# generate ent code
ent:
ifneq ("$(wildcard ./internal/data/ent)","")
@go run -mod=mod entgo.io/ent/cmd/ent generate \
--feature privacy \
--feature sql/modifier \
--feature entql \
--feature sql/upsert \
./internal/data/ent/schema
endif
# generate wire code
wire:
@go run -mod=mod github.com/google/wire/cmd/wire ./cmd/server
# generate protobuf api go code
api:
@cd ../../../ && \
buf generate
# generate OpenAPI v3 doc
openapi:
@cd ../../../ && \
buf generate --path api/admin/service/v1 --template api/admin/service/v1/buf.openapi.gen.yaml
# run application
run:
@go run ./cmd/server -conf ./configs
# run tests
test:
@go test ./...
# run coverage tests
cover:
@go test -v ./... -coverprofile=coverage.out
# run static analysis
vet:
@go vet
# run lint
lint:
@golangci-lint run
# build service app
app: api wire conf ent build
# 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