LATEST_TAG := $(shell git describe --tags --abbrev=0)

# 获取版本信息
version := $(LATEST_TAG)
# 获取版本信息
name := "cnbn-did"
# 获取提交哈希
gitCommit := $(shell git rev-parse --short HEAD)
# 获取分支名
gitBranch := $(shell git rev-parse --abbrev-ref HEAD)
# 获取构建时间
buildTime := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")

DOCKER_BUILD_ARGS := --build-arg VERSION=$(version) \
					 --build-arg NAME=$(name) \
					 --build-arg GIT_COMMIT=$(gitCommit) \
					 --build-arg GIT_BRANCH=$(gitBranch) \
					 --build-arg BUILD_TIME=$(buildTime)

ifeq ($(ENV),dev)
	DOCKER_REGISTRY := hub-dev.cnbn.org.cn:17754
else ifeq ($(ENV),hy-dev)
	DOCKER_REGISTRY := hub-dev.cnbn.org.cn:17754
else ifeq ($(ENV),hy-pre)
	DOCKER_REGISTRY := 112.64.115.246:19981
else ifeq ($(ENV),pre)
	DOCKER_REGISTRY := hub-dev.cnbn.org.cn:17754
else
	DOCKER_REGISTRY := hub-dev.cnbn.org.cn:17754
endif

docker-login:
ifeq ($(ENV),pre)
	@docker login https://$(DOCKER_REGISTRY)/ -u admin -p Wxbaas@123.Registry
else ifeq ($(ENV),hy-dev)
	@echo $(DOCKER_REGISTRY)
else ifeq ($(ENV),dev)
	@docker login https://$(DOCKER_REGISTRY)/ -u admin -p Wxbaas@123.Registry
else ifeq ($(ENV),hy-dev)
	@docker login https://$(DOCKER_REGISTRY)/ -u admin -p Wxbaas@123.Registry
else
	$(error "DOCKER_REGISTRY must be dev or pre")
endif

gen:
	@goctl api go --branch dev --remote https://git.code.tencent.com/ChainMaker/opennet/code-template.git --style go_zero -api template/cnbn-did.api  -dir .

tidy:
	go get chainmaker.org/chainmaker/opennet/did/client@develop
	go get chainmaker.org/chainmaker/opennet/did/vo@develop
	go get chainweaver.org.cn/chainweaver/did/core@develop
	go get chainmaker.org/chainmaker/opennet/servicecommon@develop
	go mod tidy

build-vendor:
	@go version
	@rm -rf ./vendor
	@go mod vendor
	@rm -rf ./vendor/chainmaker.org/chainmaker/common && cp -r ./lib/common ./vendor/chainmaker.org/chainmaker/

docker-build:
	@make build-vendor
	@docker build . -t $(DOCKER_REGISTRY)/opennet/cnbn-did:latest  -t $(DOCKER_REGISTRY)/opennet/cnbn-did:$(LATEST_TAG) -f Dockerfile

docker-build-to-hy:
	make build-vendor
	docker build . -t $(DOCKER_REGISTRY)/opennet/cnbn-did-hy:$(LATEST_TAG) -f Dockerfile
	docker push $(DOCKER_REGISTRY)/opennet/cnbn-did-hy:$(LATEST_TAG)

docker-push:
	@make docker-login
	@docker push $(DOCKER_REGISTRY)/opennet/cnbn-did:latest

docker-build-arm:
	@make build-vendor
	@docker build --platform linux/amd64 . -t $(DOCKER_REGISTRY)/opennet/cnbn-did:latest -f Dockerfile

create-cm:
	@rm -rf etc/ &&cp -r "etc-${ENV}/" etc/
	@kubectl create cm cnbn-did-configmap-yml --from-file=./etc/cnbn-did.yaml --dry-run=client -o yaml > cnbn-did-configmap-yml.yaml  --insecure-skip-tls-verify

apply-cm:
	@kubectl apply -f cnbn-did-configmap-yml.yaml --insecure-skip-tls-verify

apply-deployment:
	@sed -iE "s|image: .*|image: ${DOCKER_REGISTRY}/opennet/cnbn-did:latest|g" deployment.yaml
	@rm  deployment.yamlE
	@kubectl apply --force -f deployment.yaml --insecure-skip-tls-verify

pod:
	@kubectl get pod -A -o wide  --insecure-skip-tls-verify

svc:
	@kubectl get service  --insecure-skip-tls-verify

log:
	@kubectl logs -f -n default -l app=cnbn-did  --insecure-skip-tls-verify

delete:
	@kubectl delete -f cnbn-did-configmap-yml.yaml --insecure-skip-tls-verify
	@kubectl delete -f deployment.yaml --insecure-skip-tls-verify

restart:
	@kubectl rollout restart deployment/api-manage  --insecure-skip-tls-verify


build:
	@make build-vendor
	#@go build -ldflags="-X 'main.Version=${version}' -X 'main.Name=${name}' -X 'main.GitCommit=${gitCommit}' -X 'main.GitBranch=${gitBranch}' -X 'main.BuildTime=${buildTime}'" -o ./bin/cnbn-did .
	@docker build $(DOCKER_BUILD_ARGS) -t did-cnbn:latest .

ut:
	go test -coverprofile cover.out ./...
	go tool cover -func=cover.out | tail -1 | grep -P "\\d+\\.\\d+(?=\\%)" -o

lint:
	golangci-lint run ./...

deploy:
	# build docker image
	@make docker-build
	# push docker image
	@make docker-push
	# delete docker pod and configmap
	@-make delete
	# create k8s config
	@make create-cm ENV="${ENV}"
	# apply k8s config
	@make apply-cm
	# deploy k8s
	@make apply-deployment
	# pod lists
	@make pod | grep cnbn-did
	# service lists
	@make svc | grep cnbn-did
	# log
	# @make log

deploy-arm:
	# build docker image
	@make docker-build-arm
	#TODO make delete 判断是否error，若error则跳过
	@make docker-push
	# delete docker pod and configmap
	@-make delete
	# create k8s config
	@make create-cm ENV="${ENV}"
	# build k8s config
	@make apply-cm
	# deploy k8s
	@make apply-deployment
	# pod lists
	@make pod | grep cnbn-did
	# service lists
	@make svc | grep cnbn-did
	# log
	# @make log

hy-docker-build-arm:
	@rm -rf ./vendor
	@go mod vendor
	@rm -rf ./vendor/chainmaker.org/chainmaker/common && cp -r ./lib/common ./vendor/chainmaker.org/chainmaker/
	@docker build --platform linux/amd64 . -t $(DOCKER_REGISTRY)/opennet/cnbn-did-hy:latest -f Dockerfile
	@make docker-login
	@docker push $(DOCKER_REGISTRY)/opennet/cnbn-did-hy:latest

hy-docker-build:
	@make build-vendor
	@docker build . -t $(DOCKER_REGISTRY)/opennet/cnbn-did-hy:latest -f Dockerfile

hy-docker-push:
	@make docker-login
	@docker push $(DOCKER_REGISTRY)/opennet/cnbn-did-hy:latest

hy-create-cm:
	@rm -rf etc && cp -r "etc-${ENV}/" etc/
	@kubectl create cm cnbn-did-hy-configmap-yml --from-file=./etc/cnbn-did.yaml --dry-run=client -o yaml > cnbn-did-hy-configmap-yml.yaml --insecure-skip-tls-verify

hy-delete:
	@kubectl delete -f cnbn-did-hy-configmap-yml.yaml --insecure-skip-tls-verify
	@kubectl delete -f deployment-hy.yaml --insecure-skip-tls-verify

hy-apply-cm:
	@kubectl apply -f cnbn-did-hy-configmap-yml.yaml --insecure-skip-tls-verify

hy-apply-deployment:
	@sed -iE "s|image: .*|image: ${DOCKER_REGISTRY}/opennet/cnbn-did-hy:latest|g" deployment-hy.yaml
	@rm  deployment-hy.yamlE
	@kubectl apply --force --record -f deployment-hy.yaml --insecure-skip-tls-verify

hy-deploy:
	# build docker image
	@make hy-docker-build
	# push docker image
	@make hy-docker-push
	# delete
	@-make hy-delete
	# create k8s config
	@make hy-create-cm ENV="${ENV}"
	# apply k8s config
	@make hy-apply-cm
	# deploy k8s
	@make hy-apply-deployment
	# pod lists
	@make pod | grep did
	# service lists
	@make svc | grep did
	# log
	# @make log

hy-deploy-arm:
	# build docker image
	@make hy-docker-build-arm
	# push docker image
	@make hy-docker-push
	# delete
	@-make hy-delete
	# create k8s config
	@make hy-create-cm ENV="${ENV}"
	# apply k8s config
	@make hy-apply-cm
	# deploy k8s
	@make hy-apply-deployment
	# pod lists
	@make pod | grep did
	# service lists
	@make svc | grep did
	# log
	# @make log
