.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 = -ldflags "-s -w " -v

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

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

generate: generate_buf

regenerate: clean generate

test:
	go test ./...

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 --timeout 15m --verbose

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

check-pulumi:
	./.github/check_pulumi.sh

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


generate_docs: $(BIN)/swag
	swag init -d cmd/api,internal/controller,types

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)/swag: PACKAGE=github.com/swaggo/swag/cmd/swag@latest

$(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.51.2

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