BINARY := nib MODULE := github.com/lerko/nib GOFLAGS := -trimpath .PHONY: build dev watch test lint fmt vet clean run help ## —— Build —————————————————————————————————— build: ## Build production binary go build $(GOFLAGS) -o $(BINARY) . dev: ## Build and run with default serve go run . serve watch: ## Live-reload dev server (requires air) air ## —— Quality ———————————————————————————————— test: ## Run all tests go test ./... test-v: ## Run all tests (verbose) go test -v ./... test-cover: ## Run tests with coverage report go test -coverprofile=coverage.out ./... go tool cover -func=coverage.out @rm -f coverage.out lint: vet fmt-check ## Run all linters vet: ## Run go vet go vet ./... fmt: ## Format all Go files gofmt -w . fmt-check: ## Check formatting (fails if unformatted) @test -z "$$(gofmt -l .)" || (echo "unformatted files:" && gofmt -l . && exit 1) ## —— Utility ———————————————————————————————— clean: ## Remove build artifacts rm -f $(BINARY) coverage.out run: build ## Build then run with args (usage: make run ARGS="serve") ./$(BINARY) $(ARGS) tidy: ## Tidy and verify module dependencies go mod tidy go mod verify ## —— Help ——————————————————————————————————— help: ## Show this help @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-14s\033[0m %s\n", $$1, $$2}' .DEFAULT_GOAL := help