.PHONY: proto logging mocks .FORCE SHELL = bash PROTODIR=perxis-proto/proto DSTDIR=./proto ALLPROTO?=$(shell find -L $(PROTODIR) -name '*.proto' ) # Убираем status.proto нужен только для front PROTOFILES= $(filter-out $(PROTODIR)/status/status.proto, $(ALLPROTO)) PROTOGOFILES=$(PROTOFILES:.proto=.pb.go) PROTOGOGRPCFILES=$(PROTOFILES:.proto=_grpc.pb.go) PKGDIR=pkg ACCESSLOGGING=$(shell find $(PKGDIR) -name "logging_middleware.go" -type f) ERRORLOGGING=$(shell find $(PKGDIR) -name "error_logging_middleware.go" -type f) SERVICETELEMETRY=$(shell find $(PKGDIR) -name "telemetry_middleware.go" -type f) SERVICEMIDDLEWARE=$(shell find $(PKGDIR) -name "middleware.go" -type f) SERVICERECOVERING=$(shell find $(PKGDIR) -name "recovering_middleware.go" -type f) # Генерация grpc-клиентов для go proto: protoc-check protoc-gen-go-check $(PROTOGOFILES) echo "Generated all protobuf Go files" echo $(ALLPROTO) echo $(PROTODIR) find $(PROTODIR) -name '*.proto' %.pb.go: %.proto @protoc -I=$(PROTODIR) --experimental_allow_proto3_optional --go_out=$(DSTDIR) --go-grpc_out=$(DSTDIR) --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative "$<" proto-clean: @rm -r $(DSTDIR)/* # Helpers # # Проверка, что установлен компилятор для Protobuf protoc-check: ifeq (,$(shell which protoc)) $(error "Protocol Buffers not found. Run \"brew install protobuf\" \ or visit \"https://grpc.io/docs/protoc-installation/#install-using-a-package-manager\" for more.\n") endif # Проверяется, установлен ли 'protoc-gen-go' - плагин для генерации GRPC-Go клиента protoc-gen-go-check: ifeq (,$(wildcard $(GOPATH)/bin/protoc-gen-go)) $(error "Protocol Buffers Go plugin not found. \ Run \"go install google.golang.org/protobuf/cmd/protoc-gen-go@latest google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest\" \ or visit \"https://grpc.io/docs/languages/go/quickstart/\" for more.\n") endif # Генерация логгирования (access & error) для всех сервисов. Предполагается наличие файлов `logging_middleware.go/error_middleware.go` # с директивой go:generate и командой генерации кода в директориях `/pkg` сервисов # Для установки инструмента генерации выполнить команду `go get -u github.com/hexdigest/gowrap/cmd/gowrap` logging: $(ERRORLOGGING) $(ACCESSLOGGING) %/middleware/logging_middleware.go: .FORCE @echo "$@" @go generate "$@" %/middleware/error_logging_middleware.go: .FORCE @echo "$@" @go generate "$@" telemetry: $(SERVICETELEMETRY) %/middleware/telemetry_middleware.go: % .FORCE @echo "$@" @go generate "$@" middleware: $(SERVICEMIDDLEWARE) %/middleware/middleware.go: % .FORCE @echo "$@" @go generate "$@" recovering: $(SERVICERECOVERING) %/middleware/recovering_middleware.go: % .FORCE @echo "$@" @go generate "$@" # Генерация моков для всех интерфейсов, найденных в директории. Выходные файлы с моками сохраняются в `./mocks` MOCKSDIRS?=$(shell find . -name "service.go" -exec dirname {} \;) MOCKS=$(MOCKSDIRS:=/mocks) PROTOMOCKS=$(PROTODIR:=/mocks) mocks: $(PROTOMOCKS) @echo "Generate mocks $<" %/mocks: % @echo "$@ - $<" @mockery --log-level="error" --all --dir "$<" --output="$@" mocks-clean: @rm -rf $(MOCKS) # Deprecated # Генерация кода для go-kit при помощи 'github.com/devimteam/microgen' - go-kit перешел на github.com/recolabs/microgen/cmd/microgen #MICROGENFILES?=$(shell find . -name "service.go" -exec grep -Ril "microgen" {} \;) #microgen: $(MICROGENFILES) # #%/service.go: % .FORCE # -microgen -file "$@" -out "$<"