K8S_VERSION = v1.26.3
KUBECONFIG = $(PWD)/.kubeconfig
CLUSTER = $(shell kind get clusters | grep 'bh-local')
GOBIN = $(shell go env GOPATH)/bin


.PHONY: dev
dev: .kubeconfig
	KUBECONFIG=$(KUBECONFIG) tilt up

.PHONY: clobber
clobber:
	KUBECONFIG=$(KUBECONFIG) ctlptl delete registry kind-bh-registry || true
	KUBECONFIG=$(KUBECONFIG) ctlptl delete cluster kind-bh-local || true
	@rm -f $(KUBECONFIG)


.PHONY: build
build:
	docker build --build-arg "service=runner" -t bh/service-runner -f ./src/Dockerfile.service ./src
	docker build --build-arg "service=catalog" -t bh/service-catalog -f ./src/Dockerfile.service ./src
	docker build --build-arg "service=proxy-admin" -t bh/service-proxy-admin -f ./src/Dockerfile.service ./src

.PHONY: acceptance-test
acceptance-test:
	docker run -it --rm \
		-v $(pwd)/src/acceptance-tests.yml:/tests/tests.yml \
		-e "TEST_HOST=bh.localhost" \
		-e "TEST_ENV=local" \
		nytimes/httptest

.PHONY: gen
gen: $(GOBIN)/sqlc buf.lock
	@$(GOBIN)/sqlc generate -f ./src/sqlc.yaml
	@cd ./src && $(GOBIN)/buf generate


.PHONY: setup
setup: $(GOBIN)/sqlc $(GOBIN)/buf
	@asdf install || true

buf.lock: $(GOBIN)/buf
	@$(GOBIN)/buf mod update ./src

$(GOBIN)/buf:
	@go install github.com/bufbuild/buf/cmd/buf@v1.17.0

$(GOBIN)/sqlc:
	@go install github.com/kyleconroy/sqlc/cmd/sqlc@latest

.kubeconfig:
	@KUBECONFIG=$(KUBECONFIG) ctlptl create registry kind-bh-registry --port=5005
	@KUBECONFIG=$(KUBECONFIG) ctlptl create cluster kind --name=kind-bh-local --registry=kind-bh-registry --kubernetes-version $(K8S_VERSION)
	@kind get kubeconfig --name=bh-local > .kubeconfig
