.PHONY: \
	docker-build build clean \
	generate generate_mock generate_buf \
	verify test check check-golang check-idl check-pulumi

BIN     = bin
GOBIN   = $(abspath $(BIN))
GOENVS  = GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64
GOFLAGS = -v

export DOCKER_BUILDKIT := 1
export GOBIN           := $(GOBIN)
export PATH            := ${GOBIN}:$(PATH)
export SHELL           := /bin/bash

build: generate
	$(GOENVS) go build $(GOFLAGS) -o bin/central cmd/central/main.go
	$(GOENVS) go build $(GOFLAGS) -o bin/api cmd/api/main.go


generate: generate_buf

regenerate: clean generate


generate_buf: $(BIN)/buf
	cd idl/idl && ${GOBIN}/buf generate

verify: check test

check: check-golang check-buf check-pulumi

check-golang: $(BIN)/golangci-lint generate
	${GOBIN}/golangci-lint run -v

check-buf: generate_buf
	cd idl/idl && buf lint

check-pulumi:
	./hack/check_pulumi.sh

clean:
	go clean
	rm -f $(BIN)/*

coverage-after-test: $(BIN)/gcov2lcov
	cat coverage/coverage.out | grep -v 'mock*.go' > coverage/cover.out
	${GOBIN}/gcov2lcov -infile=coverage/cover.out -outfile=coverage/coverage.out.lcov

$(BIN):
	@mkdir -p $@

$(BIN)/%: $(BIN)
	go install $(PACKAGE)

# bufbuild requires go1.18 since v1.1.1.
$(BIN)/buf: PACKAGE=github.com/bufbuild/buf/cmd/buf@v1.1.0
$(BIN)/buf: ${BIN}/protoc-gen-buf-breaking ${BIN}/protoc-gen-buf-lint ${BIN}/protoc-gen-go ${BIN}/protoc-gen-go-grpc ${BIN}/protoc-gen-grpc-gateway ${BIN}/protoc-gen-openapiv2

$(BIN)/protoc-gen-buf-breaking: PACKAGE=github.com/bufbuild/buf/cmd/protoc-gen-buf-breaking@v1.1.0

$(BIN)/protoc-gen-buf-lint: PACKAGE=github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@v1.1.0

$(BIN)/protoc-gen-go: PACKAGE=google.golang.org/protobuf/cmd/protoc-gen-go@v1.28

$(BIN)/protoc-gen-go-grpc: PACKAGE=google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

$(BIN)/protoc-gen-grpc-gateway: PACKAGE=github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.3

$(BIN)/protoc-gen-openapiv2: PACKAGE=github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.3

$(BIN)/mockgen: PACKAGE=github.com/golang/mock/mockgen@v1.6.0

$(BIN)/goqueryset: PACKAGE=github.com/tidbcloud/go-queryset/cmd/goqueryset@latest

$(BIN)/gotestsum: PACKAGE=gotest.tools/gotestsum@latest

$(BIN)/golangci-lint: PACKAGE=github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46

$(BIN)/gcov2lcov: PACKAGE=github.com/jandelgado/gcov2lcov@v1.0.5
