2022-11-02 23:52:22 +08:00
SHELL := /bin/bash
2022-09-19 23:24:11 +08:00
PROJECT_NAME := "github.com/zhufuyi/sponge"
PKG := " $( PROJECT_NAME) "
2022-10-09 22:26:28 +08:00
PKG_LIST := $( shell go list ${ PKG } /... | grep -v /vendor/ | grep -v /api/)
2023-03-11 19:24:49 +08:00
#GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/ | grep -v _test.go)
2022-09-19 23:24:11 +08:00
2022-10-07 22:50:45 +08:00
.PHONY : install
2022-09-27 22:30:59 +08:00
# installation of dependent tools
2022-10-07 22:50:45 +08:00
install :
2022-11-03 23:53:59 +08:00
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/envoyproxy/protoc-gen-validate@latest
go install github.com/srikrsna/protoc-gen-gotag@latest
go install github.com/zhufuyi/sponge/cmd/protoc-gen-go-gin@latest
2022-11-19 23:21:58 +08:00
go install github.com/zhufuyi/sponge/cmd/protoc-gen-go-rpc-tmpl@latest
2022-11-03 23:53:59 +08:00
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest
go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
go install github.com/swaggo/swag/cmd/swag@latest
go install github.com/ofabry/go-callvis@latest
2022-10-07 22:50:45 +08:00
go install golang.org/x/pkgsite/cmd/pkgsite@latest
.PHONY : mod
# add missing and remove unused modules
mod :
go mod tidy
2022-09-19 23:24:11 +08:00
2022-09-30 23:39:37 +08:00
.PHONY : fmt
# go format *.go files
fmt :
2022-10-07 22:50:45 +08:00
gofmt -s -w .
2022-09-30 23:39:37 +08:00
2022-09-19 23:24:11 +08:00
.PHONY : ci -lint
2022-09-27 22:30:59 +08:00
# check the code specification against the rules in the .golangci.yml file
2022-10-07 22:50:45 +08:00
ci-lint : fmt
2022-09-19 23:24:11 +08:00
golangci-lint run ./...
.PHONY : dep
2022-09-27 22:30:59 +08:00
# download dependencies to the directory vendor
2022-09-19 23:24:11 +08:00
dep :
2022-10-07 22:50:45 +08:00
go mod download
2022-09-19 23:24:11 +08:00
.PHONY : test
2022-10-07 22:50:45 +08:00
# go test *_test.go files, the parameter -count=1 means that caching is disabled
2022-09-19 23:24:11 +08:00
test :
2022-10-07 22:50:45 +08:00
go test -count= 1 -short ${ PKG_LIST }
2022-09-19 23:24:11 +08:00
.PHONY : cover
2022-09-27 22:30:59 +08:00
# generate test coverage
2022-09-19 23:24:11 +08:00
cover :
2022-10-31 23:40:40 +08:00
go test -short -coverprofile= cover.out -covermode= atomic ${ PKG_LIST }
2022-09-27 22:30:59 +08:00
go tool cover -html= cover.out
2022-09-19 23:24:11 +08:00
2022-10-17 23:11:21 +08:00
.PHONY : docs
# generate swagger docs, the host address can be changed via parameters, e.g. make docs HOST=192.168.3.37
docs : mod fmt
@bash scripts/swag-docs.sh $( HOST)
.PHONY : graph
# generate interactive visual function dependency graphs
graph :
@echo "generating graph ......"
2022-11-04 23:32:40 +08:00
@cp -f cmd/serverNameExample_mixExample/main.go .
go-callvis -skipbrowser -format= svg -nostd -file= serverNameExample_mixExample github.com/zhufuyi/sponge
@rm -f main.go serverNameExample_mixExample.gv
2022-10-17 23:11:21 +08:00
.PHONY : proto
2023-08-29 13:12:20 +08:00
# generate *.go code from *.proto files
2022-10-17 23:11:21 +08:00
proto : mod fmt
@bash scripts/protoc.sh
.PHONY : proto -doc
# generate doc from *.proto files
proto-doc :
@bash scripts/proto-doc.sh
2022-09-30 23:39:37 +08:00
.PHONY : build
2022-11-04 23:32:40 +08:00
# build serverNameExample_mixExample for linux amd64 binary
2022-09-30 23:39:37 +08:00
build :
2023-03-11 19:24:49 +08:00
@echo "building 'serverNameExample_mixExample', linux binary file will output to 'cmd/serverNameExample_mixExample'"
2023-03-25 15:18:36 +08:00
@cd cmd/serverNameExample_mixExample && CGO_ENABLED = 0 GOOS = linux GOARCH = amd64 GOPROXY = https://goproxy.cn,direct go build
2022-10-17 23:11:21 +08:00
2022-10-20 23:44:41 +08:00
# delete the templates code start
2022-10-17 23:11:21 +08:00
.PHONY : build -sponge
# build sponge for linux amd64 binary
build-sponge :
2023-03-11 19:24:49 +08:00
@echo "building 'sponge', linux binary file will output to 'cmd/sponge'"
2023-02-19 17:19:47 +08:00
@cd cmd/sponge && CGO_ENABLED = 0 GOOS = linux GOARCH = amd64 GOPROXY = https://goproxy.cn,direct go build -ldflags "all=-s -w"
2022-10-20 23:44:41 +08:00
# delete the templates code end
2022-09-30 23:39:37 +08:00
2023-02-19 17:19:47 +08:00
2022-09-30 23:39:37 +08:00
.PHONY : run
2023-02-19 17:19:47 +08:00
# run service
2022-09-30 23:39:37 +08:00
run :
@bash scripts/run.sh
2023-03-25 15:18:36 +08:00
2023-02-19 17:19:47 +08:00
.PHONY : run -nohup
2023-03-25 15:18:36 +08:00
# run server with nohup to local, if you want to stop the server, pass the parameter stop, e.g. make run-nohup CMD=stop
2023-02-19 17:19:47 +08:00
run-nohup :
2023-03-25 15:18:36 +08:00
@bash scripts/run-nohup.sh $( CMD)
2023-02-19 17:19:47 +08:00
2022-09-30 23:39:37 +08:00
.PHONY : docker -image
2023-03-25 15:18:36 +08:00
# build image for local docker, tag=latest, use binary files to build
2022-10-01 20:28:41 +08:00
docker-image : build
2023-03-25 15:18:36 +08:00
@bash scripts/image-build-local.sh
2022-09-27 22:30:59 +08:00
2022-09-30 23:39:37 +08:00
.PHONY : image -build
2023-03-25 15:18:36 +08:00
# build image for remote repositories, use binary files to build, e.g. make image-build REPO_HOST=addr TAG=latest
2022-10-01 20:28:41 +08:00
image-build :
2022-09-30 23:39:37 +08:00
@bash scripts/image-build.sh $( REPO_HOST) $( TAG)
2022-10-01 20:28:41 +08:00
.PHONY : image -build 2
2023-03-25 15:18:36 +08:00
# build image for remote repositories, phase II build, e.g. make image-build2 REPO_HOST=addr TAG=latest
2022-10-01 20:28:41 +08:00
image-build2 :
@bash scripts/image-build2.sh $( REPO_HOST) $( TAG)
2023-03-25 15:18:36 +08:00
.PHONY : image -build -rpc -test
# build rpc test image for remote repositories, e.g. make image-build-rpc-test REPO_HOST=addr TAG=latest
image-build-rpc-test :
@bash scripts/image-rpc-test.sh $( REPO_HOST) $( TAG)
2022-09-30 23:39:37 +08:00
.PHONY : image -push
2022-10-07 22:50:45 +08:00
# push docker image to remote repositories, e.g. make image-push REPO_HOST=addr TAG=latest
2022-09-30 23:39:37 +08:00
image-push :
@bash scripts/image-push.sh $( REPO_HOST) $( TAG)
.PHONY : deploy -k 8s
# deploy service to k8s
deploy-k8s :
@bash scripts/deploy-k8s.sh
2022-09-19 23:24:11 +08:00
2022-10-07 22:50:45 +08:00
.PHONY : deploy -docker
2023-03-25 15:18:36 +08:00
# deploy service to local docker, you must first run 'make docker-image' to generate a docker image, if you want to stop the server, pass the parameter stop, e.g. make deploy-docker CMD=stop
2022-10-07 22:50:45 +08:00
deploy-docker :
2023-03-25 15:18:36 +08:00
@bash scripts/deploy-docker.sh $( CMD)
2022-10-07 22:50:45 +08:00
2023-03-11 19:24:49 +08:00
.PHONY : binary -package
# packaged binary files
binary-package : build
@bash scripts/binary-package.sh
.PHONY : deploy -binary
# deploy binary, e.g. make deploy-binary USER=root PWD=123456 IP=192.168.1.10
deploy-binary : binary -package
@expect scripts/deploy-binary.sh $( USER) $( PWD) $( IP)
2023-08-17 00:01:59 +08:00
.PHONY : patch
# patch some dependent code, such as types.proto, mysql initialization code. e.g. make patch TYPE=types-pb , make patch TYPE=mysql-redis-init
patch :
@bash scripts/patch.sh $( TYPE)
2022-09-19 23:24:11 +08:00
.PHONY : clean
2023-03-03 21:05:25 +08:00
# clean binary file, cover.out, template file
2022-09-19 23:24:11 +08:00
clean :
2022-11-04 23:32:40 +08:00
@rm -vrf cmd/serverNameExample_mixExample/serverNameExample_mixExample
2022-09-27 22:30:59 +08:00
@rm -vrf cover.out
2023-03-03 21:05:25 +08:00
@rm -vrf main.go serverNameExample_mixExample.gv
@rm -vrf internal/ecode/*go.gen.*
2023-04-15 18:57:06 +08:00
@rm -vrf internal/routers/*go.gen.*
2023-05-17 22:45:04 +08:00
@rm -vrf internal/handler/*go.gen.*
2023-03-03 21:05:25 +08:00
@rm -vrf internal/service/*go.gen.*
2023-03-11 19:24:49 +08:00
@rm -rf serverNameExample-binary.tar.gz
2022-09-19 23:24:11 +08:00
@echo "clean finished"
# 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 := all