GOPRIVATE:="github.com/tidbcloud/*"
MAKEFILE_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))

default: dev

.PHONY: dev
dev: generate mod fmt build test

.PHONY: vet
vet:
	GOPRIVATE=$(GOPRIVATE) go vet ./...

.PHONY: mod
mod:
	GOPRIVATE=$(GOPRIVATE) go mod tidy
	GOPRIVATE=$(GOPRIVATE) go mod download

.PHONY: generate
generate:
	GOPRIVATE=$(GOPRIVATE) go generate ./...

.PHONY: fmt
fmt:
	GOPRIVATE=$(GOPRIVATE) go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.11 run --config $(MAKEFILE_DIR)/../.golangci.yml --fix

.PHONY: lint
lint:
	GOPRIVATE=$(GOPRIVATE) go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.11 run --config $(MAKEFILE_DIR)/../.golangci.yml

.PHONY: test
test:
	GOPRIVATE=$(GOPRIVATE) go run gotest.tools/gotestsum@latest --format=testname -- -v -race -failfast -shuffle=on -coverprofile=$(MAKEFILE_DIR)/../coverage.tempo-proxy.txt ./...

.PHONY: build
build:
	mkdir -p $(MAKEFILE_DIR)/../bin/tempo-proxy
	GOPRIVATE=$(GOPRIVATE) go build -o $(MAKEFILE_DIR)/../bin/tempo-proxy ./cmd/tempo-proxy/...

.PHONY: cli
cli:
	mkdir -p $(MAKEFILE_DIR)/../bin/tempo-proxy
	GOPRIVATE=$(GOPRIVATE) go build -o $(MAKEFILE_DIR)/../bin/tempo-proxy ./cmd/tempo-proxy-cli/...

.PHONY: local-run
local-run: build
	$(MAKEFILE_DIR)/../bin/tempo-proxy/tempo-proxy --config config/tempo_proxy_local.yaml >> local-run.log

.PHONY: local-run-core-svc
local-run-core-svc:
	cd mock-core-svc && make build && cd ..
	$(MAKEFILE_DIR)/../bin/tempo-proxy/mock-core-svc --port 10100 >> local-run-core-svc.log

.PHONY: local-run-serveless-global
local-run-serverless-global:
	cd mock-serverless-global && make build && cd ..
	$(MAKEFILE_DIR)/../bin/tempo-proxy/mock-serverless-global --port 10101 >> local-run-serverless-global.log

.PHONY: local-test
local-test: cli
	local/local_test.sh

.PHONY: local-bench
local-bench: cli
	local/local_bench.sh
