forked from cardosofelipe/fast-next-template
- Introduced `format-check` for verification without modification in `llm-gateway` and `knowledge-base` Makefiles. - Updated `validate` to include `format-check`. - Added `format-all` to root Makefile for consistent formatting across all components. - Unexported `VIRTUAL_ENV` to prevent virtual environment warnings.
208 lines
7.2 KiB
Makefile
Executable File
208 lines
7.2 KiB
Makefile
Executable File
.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!"
|