OS ?= $(shell go env GOOS)
ARCH ?= $(shell go env GOARCH)
GO := CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go

KUBECONFIG ?= ""
IMAGE ?= hub.pingcap.net/qa/sdkserver
IMAGE_TAG ?= latest
DOCKER := DOCKER_BUILDKIT=1 docker

.PHONY: build, run, clean

clean:
	rm -r bin/

build:
	$(GO) build -o bin/$(OS)-$(ARCH)-sdkserver .

build-image: build
	$(DOCKER) build --build-arg arch=$(ARCH) --platform linux/$(ARCH) -t $(IMAGE):$(IMAGE_TAG)-$(ARCH) .

image-arm64:
	OS=linux ARCH=arm64 make build-image

image-amd64:
	OS=linux ARCH=amd64 make build-image

image: image-amd64 image-arm64

image-push-amd64:
	$(DOCKER) push $(IMAGE):$(IMAGE_TAG)-amd64

image-push-arm64:
	$(DOCKER) push $(IMAGE):$(IMAGE_TAG)-arm64

image-push: image-push-arm64 image-push-amd64
	$(DOCKER) manifest create $(IMAGE):$(IMAGE_TAG) \
		--amend $(IMAGE):$(IMAGE_TAG)-amd64 \
		--amend $(IMAGE):$(IMAGE_TAG)-arm64
	$(DOCKER) manifest push --purge $(IMAGE):$(IMAGE_TAG)

run:
	KUBECONFIG=$(KUBECONFIG) $(GO) run . -l :8000 -handle-file output

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

swag-gen: install-swagger
	@echo "swagger generate client -f <diag-swagger-file> --name=diag --client-package=diag/client --model-package=diag/models"
	@echo "I prefer not to maintain a copy of diag's swagger file here."
	@echo "It can be found in https://github.com/pingcap/diag/blob/master/api/swagger.yaml"

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