export DOCKER_BUILDKIT := 1
GOPATH := $(shell go env GOPATH)
export PATH := $(PATH):$(GOPATH)/bin
PROTOC_GEN_GO := $(GOPATH)/bin/protoc-gen-go

ARCH := $(shell uname -m)
GITREV := $(shell git describe --always --dirty=-dirty)
APPNAME := mfer
export DOCKER_IMAGE_CACHE_DIR := $(HOME)/Library/Caches/Docker/$(APPNAME)-$(ARCH)

GOLDFLAGS += -X main.Version=0.1.0
GOLDFLAGS += -X main.Gitrev=$(GITREV)
GOFLAGS := -ldflags "$(GOLDFLAGS)"

default: test

run: ./mfer.cmd
	./$<
	./$< gen --ignore-dotfiles

test: fmt
	go test -v --timeout 3s ./...

$(PROTOC_GEN_GO):
	test -e $(PROTOC_GEN_GO) || go install -v google.golang.org/protobuf/cmd/protoc-gen-go@latest

fixme:
	@grep -nir fixme . | grep -v Makefile

devprereqs:
	which gofumpt || go install -v mvdan.cc/gofumpt@latest
	which golangci-lint || go install -v github.com/golangci/golangci-lint/cmd/golangci-lint@latest

mfer.cmd: mfer/*.go internal/*/*.go cmd/*/*.go
	protoc --version
	cd mfer && go generate .
	make test
	cd cmd/mfer && go build -tags urfave_cli_no_docs -o ../../mfer.cmd $(GOFLAGS) .

clean:
	rm -rfv mfer/*.pb.go mfer.cmd cmd/mfer/mfer

fmt: devprereqs
	gofumpt -l -w mfer internal cmd
	golangci-lint run --fix
	-prettier -w *.json
	-prettier -w *.md

lint:
	golangci-lint run
	sh -c 'test -z "$$(gofmt -l .)"'

docker:
	bash -x bin/docker-prereqs.sh
	docker build .

godoc:
	open http://127.0.0.1:6060
	godoc -http=:6060