feat: add comprehensive Makefile and update CLAUDE.md
- Add Makefile with common development commands: * Build targets (dev/optimized/cross-platform) * Code quality checks (lint, vet, fmt, test) * Release management (tag, push, version) * Development helpers (watch, demo, clean) - Update CLAUDE.md with Makefile-based workflow - Add development workflow guidance - Include comprehensive help system with colored output
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
# Shush - Comment Removal CLI Tool
|
||||
.PHONY: help build install clean test lint fmt vet run dev release tag push check deps update-deps
|
||||
|
||||
# Default target
|
||||
help: ## Show this help message
|
||||
@echo "Shush - Comment Removal CLI Tool"
|
||||
@echo ""
|
||||
@echo "Available commands:"
|
||||
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||
|
||||
# Build commands
|
||||
build: ## Build the binary
|
||||
go build -ldflags="-w -s" -o shush ./cmd/shush
|
||||
|
||||
build-dev: ## Build without optimizations (faster, for development)
|
||||
go build -o shush ./cmd/shush
|
||||
|
||||
install: build ## Build and install to GOPATH/bin
|
||||
go install ./cmd/shush
|
||||
|
||||
# Cross-platform builds
|
||||
build-all: ## Build for all platforms
|
||||
GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o dist/shush-linux-amd64 ./cmd/shush
|
||||
GOOS=linux GOARCH=arm64 go build -ldflags="-w -s" -o dist/shush-linux-arm64 ./cmd/shush
|
||||
GOOS=darwin GOARCH=amd64 go build -ldflags="-w -s" -o dist/shush-darwin-amd64 ./cmd/shush
|
||||
GOOS=darwin GOARCH=arm64 go build -ldflags="-w -s" -o dist/shush-darwin-arm64 ./cmd/shush
|
||||
|
||||
# Development commands
|
||||
run: build-dev ## Build and run with example file
|
||||
./shush --help
|
||||
|
||||
dev: build-dev ## Quick development cycle (build + show help)
|
||||
./shush --llm | head -20
|
||||
|
||||
test: ## Run tests
|
||||
go test -v ./...
|
||||
|
||||
test-race: ## Run tests with race detection
|
||||
go test -race -v ./...
|
||||
|
||||
test-cover: ## Run tests with coverage
|
||||
go test -coverprofile=coverage.out ./...
|
||||
go tool cover -html=coverage.out -o coverage.html
|
||||
@echo "Coverage report: coverage.html"
|
||||
|
||||
# Code quality
|
||||
lint: ## Run golangci-lint
|
||||
@if command -v golangci-lint >/dev/null 2>&1; then \
|
||||
golangci-lint run; \
|
||||
else \
|
||||
echo "golangci-lint not installed. Install with: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"; \
|
||||
fi
|
||||
|
||||
fmt: ## Format code
|
||||
go fmt ./...
|
||||
|
||||
vet: ## Run go vet
|
||||
go vet ./...
|
||||
|
||||
check: fmt vet lint test ## Run all checks (format, vet, lint, test)
|
||||
|
||||
# Dependency management
|
||||
deps: ## Download dependencies
|
||||
go mod download
|
||||
|
||||
tidy: ## Tidy dependencies
|
||||
go mod tidy
|
||||
|
||||
update-deps: ## Update dependencies
|
||||
go get -u ./...
|
||||
go mod tidy
|
||||
|
||||
# Release commands
|
||||
version: ## Show current version
|
||||
@grep 'var version' cmd/shush/main.go | cut -d'"' -f2
|
||||
|
||||
release: clean check build ## Prepare for release (clean, check, build)
|
||||
@echo "Ready for release. Current version: $$(make version)"
|
||||
@echo "To create release:"
|
||||
@echo " 1. Update version in cmd/shush/main.go"
|
||||
@echo " 2. Run: make tag"
|
||||
@echo " 3. Run: make push"
|
||||
|
||||
tag: ## Create and push git tag for current version
|
||||
$(eval VERSION := $(shell make version))
|
||||
git tag -a v$(VERSION) -m "Release v$(VERSION)"
|
||||
@echo "Created tag v$(VERSION)"
|
||||
@echo "Run 'make push' to push tag and trigger release"
|
||||
|
||||
push: ## Push current branch and tags
|
||||
git push upstream
|
||||
git push upstream --tags
|
||||
|
||||
# Utility commands
|
||||
clean: ## Clean build artifacts
|
||||
rm -f shush
|
||||
rm -rf dist/
|
||||
rm -f coverage.out coverage.html
|
||||
|
||||
demo: build-dev ## Run demo commands
|
||||
@echo "=== Shush Demo ==="
|
||||
@echo "1. Version info:"
|
||||
./shush --version
|
||||
@echo ""
|
||||
@echo "2. Help output:"
|
||||
./shush --help
|
||||
@echo ""
|
||||
@echo "3. LLM guide preview:"
|
||||
./shush --llm | head -10
|
||||
|
||||
# Development helpers
|
||||
watch: ## Watch for changes and rebuild (requires entr)
|
||||
@if command -v entr >/dev/null 2>&1; then \
|
||||
find . -name "*.go" | entr -r make dev; \
|
||||
else \
|
||||
echo "entr not installed. Install with your package manager"; \
|
||||
echo " macOS: brew install entr"; \
|
||||
echo " Ubuntu: apt install entr"; \
|
||||
fi
|
||||
|
||||
size: build ## Show binary size
|
||||
@ls -lh shush | awk '{print "Binary size: " $$5}'
|
||||
|
||||
# Create dist directory
|
||||
dist:
|
||||
mkdir -p dist
|
||||
Reference in New Issue
Block a user