# Directory to place `go install`ed binaries into.
export GOBIN ?= $(shell pwd)/bin

GOLINT = $(GOBIN)/golint

GO_FILES ?= *.go

.PHONY: build
build:
	go build ./...

.PHONY: test
test:
	go test -race ./...

.PHONY: gofmt
gofmt:
	$(eval FMT_LOG := $(shell mktemp -t gofmt.XXXXX))
	gofmt -e -s -l $(GO_FILES) > $(FMT_LOG) || true
	@[ ! -s "$(FMT_LOG)" ] || (echo "gofmt failed:" && cat $(FMT_LOG) && false)

$(GOLINT):
	go install golang.org/x/lint/golint

.PHONY: golint
golint: $(GOLINT)
	$(GOLINT) ./...

.PHONY: lint
lint: gofmt golint

.PHONY: cover
cover:
	go test -coverprofile=cover.out -coverpkg ./... -v ./...
	go tool cover -html=cover.out -o cover.html