build: Add Makefile for test management
Provides easy commands for different test scenarios: - make test → Fast unit tests (CI-safe, no Chrome) - make test-all → ALL tests including PDF/Chrome integration - make test-integration → PDF tests only - make lint → Run golangci-lint - make check → Lint + unit tests - make all → Everything (lint + all tests + build)
This commit is contained in:
@@ -1,175 +1,37 @@
|
||||
.PHONY: run build test test-unit test-integration test-coverage test-coverage-func test-watch test-verbose test-benchmarks test-clean clean dev prod docker-build docker-run ci-test ci-build health-check install-service update-service test-endpoints test-errors
|
||||
.PHONY: test test-all test-unit test-integration lint build
|
||||
|
||||
# Development
|
||||
dev:
|
||||
@echo "🚀 Starting development server..."
|
||||
GO_ENV=development go run main.go
|
||||
# Default: Run unit tests only (fast, no Chrome needed)
|
||||
test: test-unit
|
||||
|
||||
# Production
|
||||
prod:
|
||||
@echo "🚀 Starting production server..."
|
||||
GO_ENV=production go run main.go
|
||||
|
||||
# Build
|
||||
build:
|
||||
@echo "🔨 Building binary..."
|
||||
go build -o cv-server -ldflags="-s -w" .
|
||||
@echo "✓ Binary created: ./cv-server"
|
||||
|
||||
# Run built binary
|
||||
run: build
|
||||
./cv-server
|
||||
|
||||
# ============================================================================
|
||||
# TESTING TARGETS
|
||||
# ============================================================================
|
||||
|
||||
# Run all tests with coverage
|
||||
test:
|
||||
@echo "🧪 Running all tests..."
|
||||
go test -v -race -coverprofile=coverage.out ./...
|
||||
@echo "✓ All tests complete"
|
||||
|
||||
# Run unit tests only (fast)
|
||||
# Run unit tests only (CI-safe, no Chrome)
|
||||
test-unit:
|
||||
@echo "🧪 Running unit tests..."
|
||||
go test -v -race -short ./...
|
||||
@echo "✓ Unit tests complete"
|
||||
go test -v -race -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
|
||||
# Run ALL tests including PDF/Chrome integration tests
|
||||
test-all:
|
||||
@echo "🧪 Running ALL tests (including integration tests)..."
|
||||
go test -v -race -tags=integration -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
|
||||
# Run integration tests only
|
||||
test-integration:
|
||||
@echo "🧪 Running integration tests..."
|
||||
go test -v -race -run Integration ./...
|
||||
@echo "✓ Integration tests complete"
|
||||
@echo "🧪 Running integration tests only..."
|
||||
go test -v -race -tags=integration ./internal/handlers -run PDF
|
||||
|
||||
# Generate HTML coverage report
|
||||
test-coverage: test
|
||||
@echo "📊 Generating coverage report..."
|
||||
go tool cover -html=coverage.out -o coverage.html
|
||||
@echo "✓ Coverage report: coverage.html"
|
||||
@open coverage.html 2>/dev/null || echo "Open coverage.html in your browser"
|
||||
# Run linter
|
||||
lint:
|
||||
@echo "🔍 Running golangci-lint..."
|
||||
golangci-lint run
|
||||
|
||||
# Show coverage by function
|
||||
test-coverage-func: test
|
||||
@echo "📊 Coverage by function:"
|
||||
go tool cover -func=coverage.out
|
||||
# Build binary
|
||||
build:
|
||||
@echo "🔨 Building..."
|
||||
go build -v -o cv-server .
|
||||
|
||||
# Watch for changes and run tests
|
||||
test-watch:
|
||||
@echo "👀 Watching for changes and running tests..."
|
||||
@which watchexec > /dev/null || (echo "Install watchexec: brew install watchexec" && exit 1)
|
||||
watchexec -e go -c clear -- make test
|
||||
# Run all checks (lint + unit tests)
|
||||
check: lint test-unit
|
||||
@echo "✅ All checks passed!"
|
||||
|
||||
# Run tests with verbose output and save to log
|
||||
test-verbose:
|
||||
@echo "🧪 Running verbose tests..."
|
||||
go test -v -race -coverprofile=coverage.out -covermode=atomic ./... | tee test-output.log
|
||||
@echo "✓ Tests complete. Output saved to test-output.log"
|
||||
|
||||
# Run benchmarks
|
||||
test-benchmarks:
|
||||
@echo "⚡ Running benchmarks..."
|
||||
go test -bench=. -benchmem ./...
|
||||
@echo "✓ Benchmarks complete"
|
||||
|
||||
# Clean test artifacts
|
||||
test-clean:
|
||||
@echo "🧹 Cleaning test artifacts..."
|
||||
rm -f coverage.out coverage.html test-output.log
|
||||
go clean -testcache
|
||||
@echo "✓ Test artifacts cleaned"
|
||||
|
||||
# ============================================================================
|
||||
# ENDPOINT TESTING (requires running server)
|
||||
# ============================================================================
|
||||
|
||||
# Test endpoints (requires server running)
|
||||
test-endpoints:
|
||||
@echo "🧪 Testing endpoints..."
|
||||
@echo "\n1. Health check:"
|
||||
@curl -s http://localhost:1999/health | jq .
|
||||
@echo "\n2. English CV (first 50 chars):"
|
||||
@curl -s "http://localhost:1999/?lang=en" | head -c 50
|
||||
@echo "\n\n3. Spanish CV content (first 50 chars):"
|
||||
@curl -s "http://localhost:1999/cv?lang=es" | head -c 50
|
||||
@echo "\n\n4. Security headers:"
|
||||
@curl -I http://localhost:1999/ 2>&1 | grep -E "^(X-|Content-Security)"
|
||||
@echo "\n✓ All tests complete"
|
||||
|
||||
# Test error handling (requires server running)
|
||||
test-errors:
|
||||
@echo "🧪 Testing error handling..."
|
||||
@echo "\n1. Invalid language:"
|
||||
@curl -i "http://localhost:1999/?lang=invalid" 2>&1 | head -15
|
||||
@echo "\n2. Error logging check"
|
||||
@echo "✓ Error tests complete"
|
||||
|
||||
# ============================================================================
|
||||
# CLEAN TARGETS
|
||||
# ============================================================================
|
||||
|
||||
# Clean build artifacts
|
||||
clean:
|
||||
@echo "🧹 Cleaning build artifacts..."
|
||||
rm -f cv-server
|
||||
@echo "✓ Clean complete"
|
||||
|
||||
# Docker
|
||||
docker-build:
|
||||
@echo "🐳 Building Docker image..."
|
||||
docker build -t cv-server:latest .
|
||||
@echo "✓ Docker image built"
|
||||
|
||||
docker-run:
|
||||
@echo "🐳 Running Docker container..."
|
||||
docker run -p 1999:1999 cv-server:latest
|
||||
|
||||
# CI/CD Targets
|
||||
ci-test:
|
||||
@echo "🧪 Running CI tests..."
|
||||
go test -v -race -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
@echo "✓ CI tests complete"
|
||||
|
||||
ci-build:
|
||||
@echo "🔨 Building for CI/CD..."
|
||||
mkdir -p build
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o build/cv-server .
|
||||
@echo "✓ CI build complete: build/cv-server"
|
||||
|
||||
health-check:
|
||||
@echo "🏥 Running health check..."
|
||||
@./scripts/healthcheck.sh
|
||||
|
||||
install-service:
|
||||
@echo "📦 Installing systemd service..."
|
||||
sudo cp config/systemd/cv.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable cv
|
||||
@echo "✓ Service installed and enabled"
|
||||
|
||||
update-service:
|
||||
@echo "🔄 Updating systemd service..."
|
||||
sudo cp config/systemd/cv.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart cv
|
||||
@echo "✓ Service updated and restarted"
|
||||
|
||||
# Help
|
||||
help:
|
||||
@echo "Available commands:"
|
||||
@echo " make dev - Run in development mode (hot-reload enabled)"
|
||||
@echo " make prod - Run in production mode"
|
||||
@echo " make build - Build production binary"
|
||||
@echo " make run - Build and run binary"
|
||||
@echo " make test - Test all endpoints"
|
||||
@echo " make test-errors - Test error handling"
|
||||
@echo " make clean - Remove build artifacts"
|
||||
@echo " make docker-build - Build Docker image"
|
||||
@echo " make docker-run - Run Docker container"
|
||||
@echo ""
|
||||
@echo "CI/CD commands:"
|
||||
@echo " make ci-test - Run tests for CI pipeline"
|
||||
@echo " make ci-build - Build binary for CI/CD"
|
||||
@echo " make health-check - Check service health"
|
||||
@echo " make install-service - Install systemd service"
|
||||
@echo " make update-service - Update and restart service"
|
||||
# Run everything (lint + all tests + build)
|
||||
all: lint test-all build
|
||||
@echo "✅ Everything passed!"
|
||||
|
||||
Reference in New Issue
Block a user