GO := CGO_ENABLED=0 go
IMAGE_TAG ?= latest

.PHONY: build apiserver apiserver_image clean swag test

clean:
	@rm -rfv bin

build: swag apiserver

apiserver:
	$(GO) build -o bin/rms main.go

apiserver_linux:
	GOOS=linux GOARCH=amd64 $(GO) build -o bin/rms main.go

apiserver_image: apiserver_linux
	docker build --platform linux/amd64 -t hub.pingcap.net/qa/rms:$(IMAGE_TAG) -f Dockerfile/rms-apiserver.Dockerfile ../../

tc_validator_image:
	docker build -t hub.pingcap.net/qa/tc-validator:$(IMAGE_TAG) -f Dockerfile/tc-validator.Dockerfile ../../

tc_setup:
	docker build -t hub.pingcap.net/qa/rms-tc-setup:$(IMAGE_TAG) -f Dockerfile/tc-setup.Dockerfile ../../

swag: install-swag
	swag init -g handler/handler.go --parseDependency --parseInternal --exclude docs,tc-validator

tcctl-test: apiserver install-tcctl
	KUBECONFIG=$(KUBECONFIG) MINIO_ID=$(MINIO_ID) MINIO_SECRET=$(MINIO_SECRET) tests/tcctl_test.sh

unit-test:
	CGO_ENABLED=1 go test -v -race ./...

test: unit-test tcctl-test

mock-gen: install-mockery
	mockery --dir service --all

install-tcctl:
ifeq (, $(shell which tcctl))
	curl http://fileserver.pingcap.net/download/pingcap/qa/test-infra/tcctl-install.sh | bash
endif

install-mockery:
ifeq (, $(shell which mockery))
# TODO: install mockery the other ways since go install are being deprecated
	go install github.com/vektra/mockery/v2@v2.12
endif

install-swag:
ifeq (, $(shell which swag))
	@{ \
	set -e ;\
	SWAG_TMP_DIR=$$(mktemp -d) ;\
	cd $$SWAG_TMP_DIR ;\
	go get -u github.com/swaggo/swag/cmd/swag ;\
	rm -rf $$SWAG_TMP_DIR ;\
	}
endif

install-linter:
ifeq (, $(shell which golangci-lint))
	go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
endif


lint: install-linter
# only show issues that not exist in main
	golangci-lint run --timeout 5m
