-
-
Notifications
You must be signed in to change notification settings - Fork 851
/
Copy pathMakefile
158 lines (127 loc) · 5.82 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
157
158
DIST := dist
EXECUTABLE := gorush
GO ?= go
DEPLOY_ACCOUNT := appleboy
DEPLOY_IMAGE := $(EXECUTABLE)
GOFMT ?= gofumpt -l -s -extra
TARGETS ?= linux darwin windows
ARCHS ?= amd64
GOFILES := $(shell find . -name "*.go" -type f)
TAGS ?= sqlite
LDFLAGS ?= -X main.version=$(VERSION) -X main.commit=$(COMMIT)
PROTOC_GEN_GO=v1.28
PROTOC_GEN_GO_GRPC=v1.2
ifneq ($(shell uname), Darwin)
EXTLDFLAGS = -extldflags "-static" $(null)
else
EXTLDFLAGS =
endif
ifneq ($(DRONE_TAG),)
VERSION ?= $(DRONE_TAG)
else
VERSION ?= $(shell git describe --tags --always || git rev-parse --short HEAD)
endif
COMMIT ?= $(shell git rev-parse --short HEAD)
.PHONY: all
all: build
## help: print this help message
.PHONY: help
help:
@echo 'Usage:'
@sed -n 's/^##//p' ${MAKEFILE_LIST} | column -t -s ':' | sed -e 's/^/ /'
## init: check the environment variables
init:
ifeq ($(FCM_CREDENTIAL),)
@echo "Missing FCM_CREDENTIAL Parameter"
@exit 1
endif
ifeq ($(FCM_TEST_TOKEN),)
@echo "Missing FCM_TEST_TOKEN Parameter"
@exit 1
endif
@echo "Already set FCM_CREDENTIAL and endif global variable."
## install: install the gorush binary
.PHONY: install
install: $(GOFILES)
$(GO) install -v -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)'
@echo "\n==>\033[32m Installed gorush to ${GOPATH}/bin/gorush\033[m"
## build: build the gorush binary
.PHONY: build
build: $(EXECUTABLE)
.PHONY: $(EXECUTABLE)
$(EXECUTABLE): $(GOFILES)
$(GO) build -v -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/$@
## test: run the tests
.PHONY: test
test: init
@$(GO) test -v -cover -tags $(TAGS) -coverprofile coverage.txt ./... && echo "\n==>\033[32m Ok\033[m\n" || exit 1
## build_linux_amd64: build the gorush binary for linux amd64
build_linux_amd64:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/amd64/$(DEPLOY_IMAGE)
## build_linux_i386: build the gorush binary for linux i386
build_linux_i386:
CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/i386/$(DEPLOY_IMAGE)
## build_linux_arm64: build the gorush binary for linux arm64
build_linux_arm64:
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/arm64/$(DEPLOY_IMAGE)
## build_linux_arm: build the gorush binary for linux arm
build_linux_arm:
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/arm/$(DEPLOY_IMAGE)
## build_linux_lambda: build the gorush binary for linux lambda
build_linux_lambda:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags 'lambda' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/linux/lambda/$(DEPLOY_IMAGE)
## build_darwin_amd64: build the gorush binary for darwin amd64
build_darwin_amd64:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/darwin/amd64/$(DEPLOY_IMAGE)
## build_darwin_i386: build the gorush binary for darwin i386
build_darwin_i386:
CGO_ENABLED=0 GOOS=darwin GOARCH=386 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/darwin/i386/$(DEPLOY_IMAGE)
## build_darwin_arm64: build the gorush binary for darwin arm64
build_darwin_arm64:
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/darwin/arm64/$(DEPLOY_IMAGE)
## build_darwin_arm: build the gorush binary for darwin arm
build_darwin_arm:
CGO_ENABLED=0 GOOS=darwin GOARCH=arm GOARM=7 go build -a -tags '$(TAGS)' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/darwin/arm/$(DEPLOY_IMAGE)
## build_darwin_lambda: build the gorush binary for darwin lambda
build_darwin_lambda:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -a -tags 'lambda' -ldflags '$(EXTLDFLAGS)-s -w $(LDFLAGS)' -o release/darwin/lambda/$(DEPLOY_IMAGE)
## clean: cleans up the project directory
# Cleans up the project directory by performing the following actions:
# - Runs `go clean` with the `-modcache`, `-x`, and `-i` flags to clean the module cache and remove installed packages.
# - Deletes all files named `coverage.txt` in the project directory and its subdirectories.
# - Deletes all files with the `.tar.gz` extension in the project directory and its subdirectories.
# - Deletes all files with the `.db` extension in the project directory and its subdirectories.
# - Removes the `release`, `dist`, and `.cover` directories if they exist.
clean:
$(GO) clean -modcache -x -i ./...
find . -name coverage.txt -delete
find . -name *.tar.gz -delete
find . -name *.db -delete
-rm -rf release dist .cover
## proto_install: install the protoc-gen-go and protoc-gen-go-grpc
.PHONY: proto_install
proto_install:
$(GO) install google.golang.org/protobuf/cmd/protoc-gen-go@$(PROTOC_GEN_GO)
$(GO) install google.golang.org/grpc/cmd/protoc-gen-go-grpc@$(PROTOC_GEN_GO_GRPC)
## generate_proto_js: generate the proto file for nodejs
generate_proto_js:
npm install grpc-tools
protoc -I rpc/proto rpc/proto/gorush.proto --js_out=import_style=commonjs,binary:rpc/example/node/ --grpc_out=rpc/example/node/ --plugin=protoc-gen-grpc="node_modules/.bin/grpc_tools_node_protoc_plugin"
## generate_proto_go: generate the proto file for golang
generate_proto_go:
protoc -I rpc/proto rpc/proto/gorush.proto --go_out=rpc/proto --go-grpc_out=require_unimplemented_servers=false:rpc/proto
## generate_proto: generate the proto file for golang and nodejs
generate_proto: generate_proto_go generate_proto_js
## air: install air for hot reload
.PHONY: air
air:
@hash air > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
$(GO) install github.com/cosmtrek/air@latest; \
fi
## dev: run the air for hot reload
.PHONY: dev
dev: air
air --build.cmd "make" --build.bin release/gorush
## version: print the version
version:
@echo $(VERSION)