mcpmc/Makefile
Ryan Malloy 9786b2967f Initial project setup with Docker Compose, FastAPI/FastMCP backend, Astro frontend
- Set up complete project structure with separate backend/frontend
- Docker Compose with development/production modes
- Python backend with FastAPI, FastMCP, and Procrastinate task queue
- Astro frontend with Tailwind CSS and Alpine.js
- Makefile for easy project management
- Proper hot-reload setup for both services
- Caddy reverse proxy integration ready
2025-09-09 03:52:00 -06:00

118 lines
3.3 KiB
Makefile

.PHONY: help build up down logs shell test clean install dev prod restart status
# Load environment variables
include .env
export
help: ## Show this help message
@echo "MCPMC Expert System - Available Commands:"
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'
# Environment Setup
install: ## Install dependencies and setup environment
@echo "Setting up MCPMC Expert System..."
@if ! docker network ls | grep -q caddy; then \
echo "Creating caddy network..."; \
docker network create caddy; \
else \
echo "Caddy network already exists"; \
fi
@echo "Building containers..."
@docker compose build
@echo "Setup complete!"
# Development
dev: ## Start development environment
@echo "Starting development environment..."
@MODE=development docker compose up -d
@echo "Development environment started!"
@echo "Frontend: https://$(DOMAIN)"
@echo "Backend API: https://api.$(DOMAIN)"
# Production
prod: ## Start production environment
@echo "Starting production environment..."
@MODE=production docker compose up -d
@echo "Production environment started!"
# Container Management
build: ## Build all containers
@docker compose build
up: ## Start all services
@docker compose up -d
down: ## Stop all services
@docker compose down
restart: ## Restart all services
@docker compose restart
stop: ## Stop all services
@docker compose stop
# Development Tools
shell: ## Open shell in backend container
@docker compose exec backend /bin/bash
shell-frontend: ## Open shell in frontend container
@docker compose exec frontend /bin/sh
logs: ## Show logs from all services
@docker compose logs -f
logs-backend: ## Show backend logs
@docker compose logs -f backend
logs-frontend: ## Show frontend logs
@docker compose logs -f frontend
logs-worker: ## Show worker logs
@docker compose logs -f procrastinate-worker
# Database
db-shell: ## Open database shell
@docker compose exec db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB)
db-reset: ## Reset main database
@docker compose stop backend
@docker compose exec db psql -U $(POSTGRES_USER) -c "DROP DATABASE IF EXISTS $(POSTGRES_DB);"
@docker compose exec db psql -U $(POSTGRES_USER) -c "CREATE DATABASE $(POSTGRES_DB);"
@docker compose start backend
# Testing
test: ## Run backend tests
@echo "Running tests..."
@docker compose exec backend uv run pytest
test-coverage: ## Run tests with coverage report
@docker compose exec backend uv run pytest --cov=src --cov-report=html
# Maintenance
clean: ## Clean up containers and volumes
@echo "Cleaning up..."
@docker compose down -v
@docker system prune -f
@echo "Cleanup complete!"
status: ## Show service status
@echo "Service Status:"
@docker compose ps
@echo ""
@echo "Networks:"
@docker network ls | grep caddy || echo "No caddy network found"
# Backup/Restore
backup: ## Backup databases
@echo "Creating backup..."
@mkdir -p backups
@docker compose exec db pg_dump -U $(POSTGRES_USER) $(POSTGRES_DB) > backups/main_$(shell date +%Y%m%d_%H%M%S).sql
@docker compose exec procrastinate-db pg_dump -U $(PROCRASTINATE_USER) $(PROCRASTINATE_DB) > backups/queue_$(shell date +%Y%m%d_%H%M%S).sql
@echo "Backup complete!"
# Quick shortcuts
d: dev ## Shortcut for dev
p: prod ## Shortcut for prod
l: logs ## Shortcut for logs
s: status ## Shortcut for status