.PHONY: all build test lint coverage clean install help # Binary name BINARY_NAME=relspec # Build directory BUILD_DIR=build # Go parameters GOCMD=go GOBUILD=$(GOCMD) build GOTEST=$(GOCMD) test GOGET=$(GOCMD) get GOMOD=$(GOCMD) mod GOCLEAN=$(GOCMD) clean all: lint test build ## Run linting, tests, and build build: ## Build the binary @echo "Building $(BINARY_NAME)..." @mkdir -p $(BUILD_DIR) $(GOBUILD) -o $(BUILD_DIR)/$(BINARY_NAME) ./cmd/relspec @echo "Build complete: $(BUILD_DIR)/$(BINARY_NAME)" test: ## Run tests @echo "Running tests..." $(GOTEST) -v -race -coverprofile=coverage.out ./... coverage: test ## Run tests with coverage report @echo "Generating coverage report..." $(GOCMD) tool cover -html=coverage.out -o coverage.html @echo "Coverage report generated: coverage.html" lint: ## Run linter @echo "Running linter..." @if command -v golangci-lint > /dev/null; then \ golangci-lint run --config=.golangci.json; \ else \ echo "golangci-lint not installed. Install with: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"; \ exit 1; \ fi clean: ## Clean build artifacts @echo "Cleaning..." $(GOCLEAN) rm -rf $(BUILD_DIR) rm -f coverage.out coverage.html @echo "Clean complete" install: ## Install the binary to $GOPATH/bin @echo "Installing $(BINARY_NAME)..." $(GOCMD) install ./cmd/relspec @echo "Install complete" deps: ## Download dependencies @echo "Downloading dependencies..." $(GOMOD) download $(GOMOD) tidy @echo "Dependencies updated" help: ## Display this help screen @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'