-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
139 lines (109 loc) · 3.84 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
GO_VER = $(shell go version | sed -n -r 's/.*go([0-9.]+).*/\1/p')
ifeq ($(strip $(GO_VER)), 1.10)
$(error Please install and config GoLang 1.13+ environment)
endif
export GO111MODULE=on
GOFMT=gofmt
GOIMPORTS=goimports
DEBUG=Y
# module & pkg name
MODULE = $(shell env GO111MODULE=on go list -m)
#PKGS = $(or $(PKG),$(shell env GO111MODULE=on $(GO) list ./...))
# get GOPATH
GOPATH = $(shell go env GOPATH)
# these for --version cmd
BUILD_VERSION ?= $(shell git describe --tags --always --dirty --match=v* 2> /dev/null || cat $(CURDIR)/.version 2 > /dev/null || echo v0)
BUILD_TIME ?= $(shell date +%FT%T%z)
BUILD_NAME ?= $(MODULE)/$@_$(shell date "+%Y%m%d%H" )
COMMIT_SHA1 ?= $(shell git rev-parse HEAD )
# extract branch or tag func
BRANCH_NAME ?= $(shell git -C . rev-parse --abbrev-ref HEAD | grep -v HEAD || git -C . describe --exact-match HEAD || git -C . rev-parse HEAD)
# build dir
BIN_DIR = $(CURDIR)/build
# printf config
V = 0
Q = $(if $(filter 1,$V),,@)
M = $(shell printf "\033[34;1m▶\033[0m")
# pb config
PROTOCOL_DIR = ./api
PROTO_RPC_FILES = $(shell find ${PROTOCOL_DIR} -name *rpc.proto)
PROTO_RPC_GO = $(patsubst %.proto,%.pb.go,$(PROTO_RPC_FILES))
PROTO_FLAGS = --go_out=paths=source_relative:
PROTO_RPC_FLAGS = --go_out=plugins=grpc,paths=source_relative:
# build flag
COMMON_PKG = $(MODULE)/pkg
DEFINE_VARIABLE = -X '$(COMMON_PKG)/util.BuildVersion=$(BUILD_VERSION)' \
-X '$(COMMON_PKG)/util.BuildTime=$(BUILD_TIME)' \
-X '$(COMMON_PKG)/util.BuildName=$(BUILD_NAME)' \
-X '$(COMMON_PKG)/util.CommitID=$(COMMIT_SHA1)' \
-X '$(COMMON_PKG)/util.BranchName=$(BRANCH_NAME)' \
-X 'google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn' \
ifeq ($(MAKECMDGOALS),unittest)
# BLD_FLAGS += -gcflags=all=-l
DEFINE_VARIABLE += -X '$(COMMON_PKG)/util.UnittestCompile=true'
endif
BLD_FLAGS += -ldflags "$(DEFINE_VARIABLE)"
ifeq ($(DEBUG),Y)
BLD_FLAGS += -gcflags=all="-N -l"
endif
# module list
MODS = second third four
# unittest files
UNITTEST_FILES = coverprofile.cov report.out cover.html test_result*
.PHONY: all
all: fmt $(MODS)
@echo "Build all modules successfully."
.PHONY: unittest
unittest: create_errors
$Q go test $(BLD_FLAGS) -v -covermode=count -coverprofile=coverprofile.cov ./... | tee report.out
$Q go tool cover -html=coverprofile.cov -o cover.html
$Q mkdir -p test_result/
$Q cp coverprofile.cov report.out cover.html test_result/
$Q zip -q test_result.zip test_result/*
.PHONY: $(MODS)
$(MODS): protos $(BIN); $(info $(M) building executable $@) @ ## Build program binary
$Q go build $(BLD_FLAGS) -o $(BIN_DIR)/$@/$@ cmd/$@/*.go
$(BIN):
@mkdir -p $@
.PHONY: protos $(info $(M) building protos $@) @
protos: $(PROTO_RPC_GO)
$(info $(M) building pb ok)
$(PROTO_RPC_GO): %.pb.go: %.proto ;
$Q protoc -I $(<D) -I $(PROTO_RPC_FLAGS)$(@D) $<
.PHONY: fmt
fmt:
$(GOFMT) -s -w .
@echo "Go files have been formatted."
.PHONY: imports
goimports:
$(GOIMPORTS) -l -w ./...
@echo "Go files have been goimports fix."
.PHONY: clean
clean: ; $(info $(M) cleaning) @ ## Cleanup everything
-rm -f $(PROTO_META_GO)
-rm -f $(PROTO_RPC_GO)
-rm -rf $(BIN_DIR)/*
-rm -rf ${UNITTEST_FILES}
-rm -rf ${CURDIR}/pkg/common/errors/errors.go
.PHONY: env
env:
@go env
.PHONY: version
version:
@echo $(BUILD_VERSION)
.PHONY: help
help:
@echo "--------------- ---------------"
@echo "modules: $(MODS)"
@echo "--------------- ---------------"
@echo "Build all protos: make protos"
@echo "--------------- ---------------"
@echo "Build all modules: make all"
@echo "Build certain module: make <modules>"
@echo "--------------- ---------------"
@echo "Clean all build files: make clean"
@echo "--------------- ---------------"
@echo "Print golang environment: make env"
@echo "--------------- ---------------"
@echo "Print build version: make version"
@echo "--------------- ---------------"