### Makefile for tidb-cloud-manager

GOPATH ?= $(shell go env GOPATH)

# Ensure GOPATH is set before running build process.
ifeq "$(GOPATH)" ""
    $(error Please set the environment variable GOPATH before running
 `make`)
endif

path_to_add := $(addsuffix /bin,$(subst :,/bin:,$(GOPATH)))
export PATH := $(path_to_add):$(PATH)

VERSION := $(if $(VERSION),$(VERSION),latest)
GO      := GO15VENDOREXPERIMENT="1" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go
GINKGO  := GO15VENDOREXPERIMENT="1" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ginkgo
MAC_GO  := GO15VENDOREXPERIMENT="1" CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go

LDFLAGS += -X "github.com/pingcap/tidb-cloud-manager/pkg/version.BuildTS=$(shell date -u '+%Y-%m-%d %I:%M:%S')"
LDFLAGS += -X "github.com/pingcap/tidb-cloud-manager/pkg/version.GitSHA=$(shell git rev-parse HEAD)"

E2E_VERSION     := $(shell git rev-parse --short HEAD)-$(shell date '+%Y-%m-%d_%I-%M-%S')
E2E_VERSION     := $(if $(DOCKER_REGISTRY),$(E2E_VERSION),latest)

DOCKER_REGISTRY := $(if $(DOCKER_REGISTRY),$(DOCKER_REGISTRY),127.0.0.1:5000)

default: build

build:
	$(GO) build -ldflags '$(LDFLAGS)' -o bin/tidb-cloud-manager cmd/manager/main.go
	$(GO) build -ldflags '$(LDFLAGS)' -o bin/managerctl cmd/managerctl/managerctl.go

ctl:
	$(GO) build -ldflags '$(LDFLAGS)' -o bin/managerctl-linux-amd64 cmd/managerctl/managerctl.go
	$(MAC_GO) build -ldflags '$(LDFLAGS)' -o bin/managerctl-darwin-amd64 cmd/managerctl/managerctl.go

docker: build
	mkdir -p docker/bin && cp bin/{tidb-cloud-manager,managerctl} docker/bin/
	cd docker && docker build --tag "$(DOCKER_REGISTRY)/pingcap/tidb-cloud-manager:$(VERSION)" .
	docker push "$(DOCKER_REGISTRY)/pingcap/tidb-cloud-manager:$(VERSION)"

e2e:
	sed 's/image:.*/image: {{ .Image }}/g' manifests/tidb-cloud-manager.yaml > test/e2e/docker/tidb-cloud-manager.yaml.tmpl
	sed 's/image: pingcap\/tidb-operator:latest/image: {{ .Image }}/g' test/e2e/docker/tidb-operator.yaml > test/e2e/docker/tidb-operator.yaml.tmpl
	cp manifests/tidb-cloud-manager-config.yaml test/e2e/docker/tidb-cloud-manager-config.yaml

	$(GINKGO) build test/e2e
	mkdir -p test/e2e/docker/bin && cp test/e2e/e2e.test test/e2e/docker/bin/e2e.test
	cd test/e2e/docker && docker build --tag "$(DOCKER_REGISTRY)/pingcap/tidb-cloud-manager-e2e:$(E2E_VERSION)" .
	docker push "$(DOCKER_REGISTRY)/pingcap/tidb-cloud-manager-e2e:$(E2E_VERSION)"

update:
	which glide >/dev/null || curl https://glide.sh/get | sh
	which glide-vc || go get -v -u github.com/sgotti/glide-vc
ifdef PKG
	glide get --strip-vendor --skip-test ${PKG}
else
	glide update --strip-vendor --skip-test
endif
	@echo "removing test files"
	glide vc --only-code --no-tests --use-lock-file

publish:
	docker push "pingcap/tidb-cloud-manager:$(VERSION)"

clean:
	$(GO) clean -i ./...
	rm -rf bin/tidb-cloud-manager docker/bin/tidb-cloud-manager

.PHONY: docker clean update
