kids-ugc-contracts/Makefile

92 lines
3.4 KiB
Makefile

BIN_DIR := $(CURDIR)/bin
TMP_DIR := $(CURDIR)/tmp
OUT_DIR := $(CURDIR)/pkg
PROTO_DIR := $(CURDIR)/api/proto
# https://github.com/protocolbuffers/protobuf/releases
PROTO_VERSION := 24.0
# https://pkg.go.dev/google.golang.org/grpc?tab=versions
GO_GRPC_VERSION := 1.57.0
# https://pkg.go.dev/google.golang.org/protobuf?tab=versions
PROTO_GEN_GO_VERSION := 1.31.0
# https://pkg.go.dev/google.golang.org/grpc/cmd/protoc-gen-go-grpc?tab=versions
PROTO_GEN_GO_GRPC_VERSION := 1.3.0
# https://github.com/pseudomuto/protoc-gen-doc/releases
PROTO_GEN_DOC_VERSION := 1.5.1
# https://github.com/yoheimuta/protolint/releases
PROTOLINT_VERSION = 0.45.1
# Workaround for https://github.com/golang/protobuf/issues/52
# https://github.com/favadi/protoc-go-inject-tag/releases
PROTO_GO_INJECT_TAG_VERSION = 1.4.0
# Workaround for https://github.com/golang/protobuf/issues/513
# https://github.com/kluevandrew/protoc-go-remove-enum-prefix/releases
PROTOC_GO_REMOVE_ENUM_PREFIX_VERSION = 1.1.0
PATH := $(BIN_DIR):$(PATH)
ifeq ($(OS),Windows_NT)
IS_DARWIN := 0
OSNAME := "win"
OSARCH := $(if ($(PROCESSOR_ARCHITEW6432),AMD64),"64","32")
else
IS_DARWIN := $(filter Darwin,$(shell uname -s))
OSNAME := $(if $(filter Darwin,$(shell uname -s)),"osx","linux")
OSARCH := "-x86_64"
endif
.ONESHELL: protoc-install
.PHONY: protoc-install
protoc-install:
@type $(BIN_DIR)/protoc > /dev/null 2>&1 && exit 0 || (\
(mkdir -p $(BIN_DIR) || true) && \
(mkdir -p $(TMP_DIR) || true) && \
curl -sSL "https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTO_VERSION)/protoc-$(PROTO_VERSION)-$(OSNAME)$(OSARCH).zip" \
-o $(TMP_DIR)/protoc.zip && \
unzip -q -o $(TMP_DIR)/protoc.zip -d $(TMP_DIR)/protoc && \
cp -f $(TMP_DIR)/protoc/bin/protoc $(BIN_DIR)/protoc && \
cp -rf $(TMP_DIR)/protoc/include $(BIN_DIR)/include && \
chmod +x $(BIN_DIR)/protoc && \
export GOBIN=$(BIN_DIR) && \
go install -ldflags '-w -s' google.golang.org/protobuf/cmd/protoc-gen-go@v${PROTO_GEN_GO_VERSION} && \
go install -ldflags '-w -s' google.golang.org/grpc/cmd/protoc-gen-go-grpc@v${PROTO_GEN_GO_GRPC_VERSION} && \
go install -ldflags '-w -s' github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v${PROTO_GEN_DOC_VERSION} && \
go install -ldflags '-w -s' github.com/favadi/protoc-go-inject-tag@v${PROTO_GO_INJECT_TAG_VERSION} && \
go install -ldflags '-w -s' github.com/kluevandrew/protoc-go-remove-enum-prefix@v${PROTOC_GO_REMOVE_ENUM_PREFIX_VERSION} && \
go install github.com/yoheimuta/protolint/cmd/protolint@v${PROTOLINT_VERSION} && \
rm -rf $(TMP_DIR)/* && echo "Installed")
.ONESHELL: generate
.PHONY: generate
.DEFAULT_GOAL := generate
generate: protoc-install
export GOBIN=$(BIN_DIR) && \
export PATH=$$GOBIN:$$PATH && \
protoc \
-I $(BIN_DIR)/include \
--proto_path $(PROTO_DIR) \
--go_out=$(OUT_DIR) \
--go-grpc_out=$(OUT_DIR) \
--go_opt=paths=source_relative \
--go-grpc_opt=paths=source_relative \
$(PROTO_DIR)/*/*.proto \
&& \
protoc-go-inject-tag -input=$(OUT_DIR)/*/*.pb.go -remove_tag_comment && \
protoc-go-remove-enum-prefix -input=$(OUT_DIR)/*/*.pb.go
.ONESHELL: clean
.PHONY: clean
clean:
rm -rf $(BIN_DIR) $(TMP_DIR)
.ONESHELL: lint
.PHONY: lint
lint: protoc-install
export GOBIN=$(BIN_DIR) && \
export PATH=$$GOBIN:$$PATH && \
protolint lint api/proto
.ONESHELL: lint-auto-fix
.PHONY: lint-auto-fix
lint-auto-fix: protoc-install
export GOBIN=$(BIN_DIR) && \
export PATH=$$GOBIN:$$PATH && \
protolint lint -fix api/proto