.PHONY: build run test contract-test clean deps lint docker-build docker-up docker-down migrate # Binary names API_BINARY=casera-api WORKER_BINARY=casera-worker # Build flags LDFLAGS=-ldflags "-s -w" # Default target all: build # Install dependencies deps: go mod download go mod tidy # Build the API binary build: go build $(LDFLAGS) -o bin/$(API_BINARY) ./cmd/api # Build the worker binary build-worker: go build $(LDFLAGS) -o bin/$(WORKER_BINARY) ./cmd/worker # Build all binaries build-all: build build-worker # Run the API server run: go run ./cmd/api # Run the worker run-worker: go run ./cmd/worker # Run tests test: go test -v -race -cover ./... # Run contract validation tests (routes + KMP vs OpenAPI spec) contract-test: go test -v -run "TestRouteSpecContract|TestKMPSpecContract" ./internal/integration/ # Run tests with coverage test-coverage: go test -v -race -coverprofile=coverage.out ./... go tool cover -html=coverage.out -o coverage.html # Run linter lint: golangci-lint run ./... # Clean build artifacts clean: rm -rf bin/ rm -f coverage.out coverage.html # Format code fmt: go fmt ./... # Vet code vet: go vet ./... # Docker commands (dev — uses docker-compose.dev.yml) docker-build: docker compose -f docker-compose.dev.yml build docker-up: docker compose -f docker-compose.dev.yml up -d docker-down: docker compose -f docker-compose.dev.yml down docker-logs: docker compose -f docker-compose.dev.yml logs -f docker-dev: docker compose -f docker-compose.dev.yml up --build docker-restart: docker compose -f docker-compose.dev.yml down && docker compose -f docker-compose.dev.yml up -d # Docker commands (prod — builds production images) docker-build-prod: docker build --target api -t $${REGISTRY:-ghcr.io/treytartt}/casera-api:$${TAG:-latest} . docker build --target worker -t $${REGISTRY:-ghcr.io/treytartt}/casera-worker:$${TAG:-latest} . docker build --target admin -t $${REGISTRY:-ghcr.io/treytartt}/casera-admin:$${TAG:-latest} . # Database migrations migrate-up: migrate -path migrations -database "$(DATABASE_URL)" up migrate-down: migrate -path migrations -database "$(DATABASE_URL)" down migrate-create: migrate create -ext sql -dir migrations -seq $(name) # Development helpers dev: deps run # Generate swagger docs (if using swag) swagger: swag init -g cmd/api/main.go -o docs/swagger # Help help: @echo "Casera API Go - Available targets:" @echo "" @echo "Build:" @echo " deps - Install dependencies" @echo " build - Build API binary" @echo " build-all - Build all binaries (API, Worker)" @echo " clean - Clean build artifacts" @echo "" @echo "Run:" @echo " run - Run API server" @echo " run-worker - Run background worker" @echo "" @echo "Test & Lint:" @echo " test - Run tests" @echo " test-coverage - Run tests with coverage" @echo " lint - Run linter" @echo " fmt - Format code" @echo " vet - Vet code" @echo "" @echo "Docker (dev):" @echo " docker-build - Build dev Docker images" @echo " docker-up - Start dev containers (detached)" @echo " docker-down - Stop dev containers" @echo " docker-logs - View dev container logs" @echo " docker-dev - Build and start dev containers (foreground)" @echo " docker-restart - Restart dev containers" @echo "" @echo "Docker (prod):" @echo " docker-build-prod - Build production images (api, worker, admin)" @echo "" @echo "Database:" @echo " migrate-up - Run database migrations" @echo " migrate-down - Rollback database migrations"