PROJECT=internal-portal

.PHONY:  build tools

GOOS    := $(if $(GOOS),$(GOOS),$(shell go env GOOS))
GOARCH  := $(if $(GOARCH),$(GOARCH),$(shell go env GOARCH))
GOENV   := GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH)
GO      := $(GOENV) go
GOBUILD := $(GO) build $(BUILD_FLAGS)

PACKAGE_LIST        := go list ./...| grep -vE "cmd" | grep -vE "test"
PACKAGES            := $$($(PACKAGE_LIST))
PACKAGE_DIRECTORIES := $(PACKAGE_LIST) | sed 's|github.com/tidbcloud/$(PROJECT)/||'
FILES               := $$(find $$($(PACKAGE_DIRECTORIES)) -name "*.go")

FAIL_ON_STDOUT := awk '{ print } END { if (NR > 0) { exit 1 } }'

LDFLAGS += -s -w
LDFLAGS += -X "github.com/tidbcloud/internal-portal/version.GitHash=$(shell git rev-parse HEAD)"
LDFLAGS += -X "github.com/tidbcloud/internal-portal/version.GitBranch=$(shell git rev-parse --abbrev-ref HEAD)"

export PATH := $(PATH):$(PWD)/tools/bin
export GOPRIVATE=github.com/tidbcloud

# Go build
build: generate server

generate: tools/bin/swagger
	cd db/entity && go generate entity.go \
		&& sed -i 's/github.com\/jinzhu\/gorm/gorm.io\/gorm/g' autogenerated_entity.go \
		&& sed -i 's/(int, error)/(int64, error)/g' autogenerated_entity.go \
		&& sed -i 's/var count int/var count int64/g' autogenerated_entity.go
	./api/generate-codes.sh

check:
	@./scripts/check

# Binary build
server:
	$(GOBUILD) -ldflags '$(LDFLAGS)' -o build/bin/server cmd/server/*.go

clean:
	@rm -rf build/bin tools/bin

image: build
	docker build --network host build -t internal-portal-server:local

cover:
	$(GO) test -cover -coverprofile=coverage.out -race ./...
	$(GO) tool cover -html=coverage.out
	rm -f coverage.out

tools: build-tools tidy

build-tools:
	@(make -C tools all)

tidy:
	GOPRIVATE="github.com/pingcap,github.com/tidbcloud" $(GO) mod tidy -compat=1.17

test:
	$(GO) test -cover ./...

check: fmt vet lint check-static

fmt:
	@echo "gofmt (simplify)"
	@gofmt -s -l -w $(FILES) 2>&1 | $(FAIL_ON_STDOUT)

vet:
	$(GO) vet ./...

lint: tools/bin/revive
	@echo "linting"
	@tools/bin/revive -formatter friendly $(FILES)

check-static: tools/bin/golangci-lint
	GO111MODULE=on CGO_ENABLED=0 tools/bin/golangci-lint run -v 

tools/bin/golangci-lint:
	curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b ./tools/bin v1.45.0
