···11+22+SHELL = /bin/bash
33+.SHELLFLAGS = -o pipefail -c
44+55+.PHONY: help
66+help: ## Print info about all commands
77+ @echo "Commands:"
88+ @echo
99+ @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[01;32m%-20s\033[0m %s\n", $$1, $$2}'
1010+1111+.PHONY: build
1212+build: ## Build all executables
1313+ go build ./cmd/handlr
1414+1515+.PHONY: all
1616+all: build
1717+1818+.PHONY: test
1919+test: ## Run tests
2020+ go test ./...
2121+2222+.PHONY: coverage-html
2323+coverage-html: ## Generate test coverage report and open in browser
2424+ go test ./... -coverpkg=./... -coverprofile=test-coverage.out
2525+ go tool cover -html=test-coverage.out
2626+2727+.PHONY: lint
2828+lint: ## Verify code style and run static checks
2929+ go vet ./...
3030+ test -z $(gofmt -l ./...)
3131+3232+.PHONY: fmt
3333+fmt: ## Run syntax re-formatting (modify in place)
3434+ go fmt ./...
3535+3636+.PHONY: check
3737+check: ## Compile everything, checking syntax (does not output binaries)
3838+ go build ./...
3939+4040+.env:
4141+ if [ ! -f ".env" ]; then cp example.dev.env .env; fi