# Targets:
#
#   all:          Builds the code locally after testing
#
#   fmt:          Formats the source files
#   fmt-check:    Check if the source files are formated
#   build:        Builds the code locally
#   vet:          Vets the code
#   staticcheck:  Runs staticcheck over the code
#   test:         Runs the tests
#   cover:        Gives you the URL to a nice test coverage report
#
#   install:      Builds, tests and installs the code locally

GOFILES_NOVENDOR = $(shell find . -type f -name '*.go' -not -path "./vendor/*" -not -path "./.git/*")

.PHONY: all fmt build vet lint test cover install

# The first target is always the default action if `make` is called without
# args we build and install into $GOPATH so that it can just be run

all: fmt vet test install

fmt:
	@gofmt -s -w ${GOFILES_NOVENDOR}

fmt-check:
	@([ -z "$(shell gofmt -d $(GOFILES_NOVENDOR) | head)" ]) || (echo "Source is unformatted"; exit 1)

build:
	@go build

vet:
	@go vet

staticcheck:
	@staticcheck ./...

test:
	@go test -v ./...

cover: COVERAGE_FILE := coverage.out
cover:
	@go test -coverprofile=$(COVERAGE_FILE) && \
	go tool cover -html=$(COVERAGE_FILE) && rm $(COVERAGE_FILE)

install:
	@go install ./...