GOHOSTOS:=$(shell go env GOHOSTOS) GOPATH:=$(shell go env GOPATH) VERSION:=$(shell git describe --tags --always) PWD:=$(shell pwd) DOCKER_IMAGE:=youchumilkapi:latest DOCKER_SERVER:=youchumilkapi HTTP_PORT:=8083 ifeq ($(GOHOSTOS), windows) #the `find.exe` is different from `find` in bash/shell. #to see https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/find. #changed to use git-bash.exe to run find cli or other cli friendly, caused of every developer has a Git. #Git_Bash= $(subst cmd\,bin\bash.exe,$(dir $(shell where git))) Git_Bash=$(subst \,/,$(subst cmd\,bin\bash.exe,$(dir $(shell where git | grep cmd)))) INTERNAL_PROTO_FILES=$(shell $(Git_Bash) -c "find internal -name *.proto") API_PROTO_FILES=$(shell $(Git_Bash) -c "find api -name *.proto") else INTERNAL_PROTO_FILES=$(shell find internal -name *.proto) API_PROTO_FILES=$(shell find api -name *.proto) endif .PHONY: run # build image and run docker run: @echo "Building and running Docker image..." @docker stop $(DOCKER_SERVER) || true && docker rm $(DOCKER_SERVER) || true @docker rmi $(DOCKER_IMAGE) || true @docker build -t $(DOCKER_IMAGE) . @docker run --privileged -itd \ --name $(DOCKER_SERVER) \ --restart=always \ -p $(HTTP_PORT):$(HTTP_PORT) \ -v $(PWD)/.env:/app/.env \ $(DOCKER_IMAGE) .PHONY: init # init env init: go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install github.com/go-kratos/kratos/cmd/kratos/v2@latest go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest go install github.com/google/wire/cmd/wire@latest .PHONY: config # generate internal proto config: protoc --proto_path=./internal \ --proto_path=./third_party \ --go_out=paths=source_relative:./internal \ $(INTERNAL_PROTO_FILES) .PHONY: api # generate api proto api: protoc --proto_path=./api \ --proto_path=./third_party \ --go_out=paths=source_relative:./api \ --go-http_out=paths=source_relative:./api \ --validate_out=paths=source_relative,lang=go:./api \ --go-errors_out=paths=source_relative:./api \ --openapi_out=fq_schema_naming=true,default_response=false:./third_party/swagger_ui \ $(API_PROTO_FILES) .PHONY: wire # generate wire wire: cd ./cmd/server && wire .PHONY: build # build build: make all mkdir -p bin/ && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-X main.Version=$(VERSION)" -o ./bin/ ./... .PHONY: generate # generate generate: go get github.com/google/wire/cmd/wire@latest go generate ./... go mod tidy .PHONY: all # generate all all: make api; make config; make wire; make generate; # 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) .PHONY: ent ent: @echo '生成 ent 模型,命令格式:make ent t=表名,当前生成中...' sh ./sync_table_entgo.sh $(t) .DEFAULT_GOAL := help