BINARY_DIR = bin
BINARIES = $(patsubst cmd/%/,%,$(wildcard cmd/*/))

.PHONY: all build test coverage validate clean purge $(BINARIES)

all: build
	

build: $(BINARIES)
	

$(BINARY_DIR):
	mkdir -p $(BINARY_DIR)

$(BINARIES): %: $(BINARY_DIR)
	go build -o $(BINARY_DIR)/$@ ./cmd/$@/

test:
	go test ./... -cover

coverage:
	mkdir -p reports/
	go test -coverprofile=reports/coverage.out ./... && go tool cover -html=reports/coverage.out

validate:
	@test -z "$(shell gofumpt -l .)" && echo "No files need formatting" || (echo "Incorrect formatting in:"; gofumpt  -l .; exit 1)
	go vet ./...

clean:
	rm -rf $(BINARY_DIR)
	go clean

purge: clean
	rm -rf reports