.PHONY: help dev dev-full prod down logs logs-dev clean clean-slate drop-db reset-db push-images deploy .PHONY: test test-backend test-mcp test-frontend test-all test-cov test-integration validate validate-all format-all VERSION ?= latest REGISTRY ?= ghcr.io/cardosofelipe/pragma-stack # Default target help: @echo "Syndarix - AI-Powered Software Consulting Agency" @echo "" @echo "Development:" @echo " make dev - Start backend + db + MCP servers (frontend runs separately)" @echo " make dev-full - Start all services including frontend" @echo " make down - Stop all services" @echo " make logs-dev - Follow dev container logs" @echo "" @echo "Testing:" @echo " make test - Run all tests (backend + MCP servers)" @echo " make test-backend - Run backend tests only" @echo " make test-mcp - Run MCP server tests only" @echo " make test-frontend - Run frontend tests only" @echo " make test-cov - Run all tests with coverage reports" @echo " make test-integration - Run MCP integration tests (requires running stack)" @echo "" @echo "Formatting:" @echo " make format-all - Format code in backend + MCP servers + frontend" @echo "" @echo "Validation:" @echo " make validate - Validate backend + MCP servers (lint, type-check, test)" @echo " make validate-all - Validate everything including frontend" @echo "" @echo "Database:" @echo " make drop-db - Drop and recreate empty database" @echo " make reset-db - Drop database and apply all migrations" @echo "" @echo "Production:" @echo " make prod - Start production stack" @echo " make deploy - Pull and deploy latest images" @echo " make push-images - Build and push images to registry" @echo " make logs - Follow production container logs" @echo "" @echo "Cleanup:" @echo " make clean - Stop containers" @echo " make clean-slate - Stop containers AND delete volumes (DATA LOSS!)" @echo "" @echo "Subdirectory commands:" @echo " cd backend && make help - Backend-specific commands" @echo " cd mcp-servers/llm-gateway && make - LLM Gateway commands" @echo " cd mcp-servers/knowledge-base && make - Knowledge Base commands" @echo " cd frontend && npm run - Frontend-specific commands" # ============================================================================ # Development # ============================================================================ dev: # Bring up all dev services except the frontend docker compose -f docker-compose.dev.yml up --build -d --scale frontend=0 @echo "" @echo "Frontend is not started by 'make dev'." @echo "To run the frontend locally, open a new terminal and run:" @echo " cd frontend && npm run dev" dev-full: # Bring up all dev services including the frontend (full stack) docker compose -f docker-compose.dev.yml up --build -d down: docker compose down logs: docker compose logs -f logs-dev: docker compose -f docker-compose.dev.yml logs -f # ============================================================================ # Database Management # ============================================================================ drop-db: @echo "Dropping local database..." @docker compose -f docker-compose.dev.yml exec -T db psql -U postgres -c "DROP DATABASE IF EXISTS app WITH (FORCE);" 2>/dev/null || \ docker compose -f docker-compose.dev.yml exec -T db psql -U postgres -c "DROP DATABASE IF EXISTS app;" @docker compose -f docker-compose.dev.yml exec -T db psql -U postgres -c "CREATE DATABASE app;" @echo "Database dropped and recreated (empty)" reset-db: drop-db @echo "Applying migrations..." @cd backend && uv run python migrate.py --local apply @echo "Database reset complete!" # ============================================================================ # Production / Deployment # ============================================================================ prod: docker compose up --build -d deploy: docker compose -f docker-compose.deploy.yml pull docker compose -f docker-compose.deploy.yml up -d push-images: docker build -t $(REGISTRY)/backend:$(VERSION) ./backend docker build -t $(REGISTRY)/frontend:$(VERSION) ./frontend docker push $(REGISTRY)/backend:$(VERSION) docker push $(REGISTRY)/frontend:$(VERSION) # ============================================================================ # Cleanup # ============================================================================ clean: docker compose down # WARNING! THIS REMOVES CONTAINERS AND VOLUMES AS WELL - DO NOT USE THIS UNLESS YOU WANT TO START OVER WITH DATA AND ALL clean-slate: docker compose -f docker-compose.dev.yml down -v --remove-orphans # ============================================================================ # Testing # ============================================================================ test: test-backend test-mcp @echo "" @echo "All tests passed!" test-backend: @echo "Running backend tests..." @cd backend && IS_TEST=True uv run pytest tests/ -v test-mcp: @echo "Running MCP server tests..." @echo "" @echo "=== LLM Gateway ===" @cd mcp-servers/llm-gateway && uv run pytest tests/ -v @echo "" @echo "=== Knowledge Base ===" @cd mcp-servers/knowledge-base && uv run pytest tests/ -v test-frontend: @echo "Running frontend tests..." @cd frontend && npm test test-all: test test-frontend @echo "" @echo "All tests (backend + MCP + frontend) passed!" test-cov: @echo "Running all tests with coverage..." @echo "" @echo "=== Backend Coverage ===" @cd backend && IS_TEST=True uv run pytest tests/ -v --cov=app --cov-report=term-missing @echo "" @echo "=== LLM Gateway Coverage ===" @cd mcp-servers/llm-gateway && uv run pytest tests/ -v --cov=. --cov-report=term-missing @echo "" @echo "=== Knowledge Base Coverage ===" @cd mcp-servers/knowledge-base && uv run pytest tests/ -v --cov=. --cov-report=term-missing test-integration: @echo "Running MCP integration tests..." @echo "Note: Requires running stack (make dev first)" @cd backend && RUN_INTEGRATION_TESTS=true IS_TEST=True uv run pytest tests/integration/ -v # ============================================================================ # Formatting # ============================================================================ format-all: @echo "Formatting backend..." @cd backend && make format @echo "" @echo "Formatting LLM Gateway..." @cd mcp-servers/llm-gateway && make format @echo "" @echo "Formatting Knowledge Base..." @cd mcp-servers/knowledge-base && make format @echo "" @echo "Formatting frontend..." @cd frontend && npm run format @echo "" @echo "All code formatted!" # ============================================================================ # Validation (lint + type-check + test) # ============================================================================ validate: @echo "Validating backend..." @cd backend && make validate @echo "" @echo "Validating LLM Gateway..." @cd mcp-servers/llm-gateway && make validate @echo "" @echo "Validating Knowledge Base..." @cd mcp-servers/knowledge-base && make validate @echo "" @echo "All validations passed!" validate-all: validate @echo "" @echo "Validating frontend..." @cd frontend && npm run validate @echo "" @echo "Full validation passed!"