
SERVICE_NAME = $(shell grep \"name\" package.json | sed 's/"name"//' | sed 's/[^a-zA-Z0-9-]//g')
VERSION = $(shell grep \"version\" package.json | sed s/[^0-9\.]//g)

.PHONY: .git-env all gen_clients swaggerhub
gen: format_proto gen_clients gen_proto

all: gen swaggerhub

setup_protoc:
	brew install protobuf && \
	brew install bufbuild/buf/buf && \
	go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 && \
	go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2.0 && \
	go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.12.0 && \
	go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.5.1

# utility to set all versions to the same
# package.json | package-lock.json
# nodejs-client/package.json = version | nodejs-client/package-lock.json = version
# chart.yaml = appVersion
set_version:
	@ ./scripts/set_version.sh


gen_clients:
	@ ./generate-clients.sh

# creates descriptor for grpc server reflection
gen_proto_reflect:
	npx grpc_tools_node_protoc --descriptor_set_out=services/descriptor_set.bin \
		--include_imports \
		services/**/*.proto

gen_proto: gen_proto_reflect
	@ ./scripts/create_grpc_config.sh
	@echo "Generating GoLang pb files from protobuf files and swagger..." && \
	[ -d swagger ] || mkdir swagger && \
	protoc --proto_path=services \
		--go_out=golang_client --go_opt=paths=source_relative \
		--go-grpc_out=golang_client --go-grpc_opt=paths=source_relative \
		--doc_out=swagger --doc_opt=html,index.html \
		--openapiv2_out=swagger  \
		--openapiv2_opt=allow_merge=true --openapiv2_opt=merge_file_name=main \
		--openapiv2_opt grpc_api_configuration=services/grpc_config.yaml  \
		--openapiv2_opt openapi_configuration=services/openapi_config.yaml \
		services/**/*.proto && \
	echo "Generated Golang pb files and swagger successfully"

format_proto:
	@echo "Formatting .proto files..." && \
	buf format -w && \
	echo "Formatted .proto files successfully"

.git-env:
	@echo Generating .git-env ...; \
	url=$$(git config remote.origin.url); \
	repo=$$(echo $${url} | sed 's/^git@//' | sed 's/\:/\//' | sed 's/\.git$$//'); \
	branch=$$(git rev-parse --abbrev-ref HEAD); \
	hash=$$(git rev-parse HEAD); \
	echo "GIT_URL=$${url} \
	\nGIT_REPO=$${repo} \
	\nGIT_BRANCH=$${branch} \
	\nGIT_HASH=$${hash}" > .git-env; \

swaggerhub: .git-env
	@echo Publish main.swagger.json to SwaggerHub
	ref=$$(grep GIT_BRANCH .git-env | awk -F '=' '{print $$2}'); \
	hash=$$(grep GIT_HASH .git-env | awk -F '=' '{print $$2}'); \
	GIT_BRANCH=$${ref} \
	GIT_COMMIT=$${hash} \
	SERVICE_NAME=$(SERVICE_NAME) \
	VERSION=$(VERSION) \
	SWAGGERHUB_API_KEY=$(SWAGGERHUB_API_KEY) \
	SWAGGER_FILE=./swagger/main.swagger.json ./scripts/swaggerhub.sh
