mcrentcast/Makefile
Ryan Malloy 723123a6fe Add comprehensive mock Rentcast API for testing
- Complete mock API server with all Rentcast endpoints
- Static test API keys with different tiers and limits
- Rate limiting simulation for testing
- Docker service configuration for mock API
- Integration tests using mock API
- Configuration support for switching between real/mock APIs
- Test script to verify mock API functionality
- Comprehensive documentation for mock API usage

Test API Keys:
- test_key_free_tier: 50 daily limit
- test_key_basic: 100 daily limit
- test_key_pro: 1000 daily limit
- test_key_enterprise: 10000 daily limit
- test_key_rate_limited: 1 daily limit (for testing)
- test_key_invalid: For testing auth errors
2025-09-09 08:56:01 -06:00

151 lines
4.6 KiB
Makefile

# mcrentcast - Makefile for Docker Compose management
.PHONY: help dev prod up down logs shell test clean build lint format check install setup
# Default environment
ENV_FILE := .env
# Load environment variables
ifneq (,$(wildcard $(ENV_FILE)))
include $(ENV_FILE)
export
endif
# Default target
help: ## Show this help message
@echo "mcrentcast - Docker Compose Management"
@echo ""
@echo "Usage: make [target]"
@echo ""
@echo "Targets:"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
setup: ## Initial setup - copy .env.example to .env and create external caddy network
@if [ ! -f .env ]; then \
cp .env.example .env; \
echo "Created .env file from .env.example"; \
echo "Please edit .env and set your RENTCAST_API_KEY"; \
fi
@docker network inspect caddy >/dev/null 2>&1 || docker network create caddy
@echo "Setup complete!"
install: setup ## Install dependencies and sync with uv
uv sync
dev: setup ## Start development environment
@echo "Starting development environment..."
MODE=development docker compose up -d
@echo "Development environment started!"
@echo "Frontend: https://$(DOMAIN)"
@echo "API: https://api.$(DOMAIN)"
@echo "Logs: make logs"
prod: setup ## Start production environment
@echo "Starting production environment..."
MODE=production docker compose up -d
@echo "Production environment started!"
up: ## Start services (uses MODE from .env, defaults to development)
docker compose up -d
down: ## Stop all services
docker compose down
logs: ## Show logs from all services
docker compose logs -f
logs-server: ## Show logs from MCP server only
docker compose logs -f mcrentcast-server
logs-frontend: ## Show logs from frontend only
docker compose logs -f frontend
shell: ## Get a shell in the MCP server container
docker compose exec mcrentcast-server /bin/bash
shell-db: ## Get a shell in the database container
docker compose exec mcrentcast-db psql -U mcrentcast -d mcrentcast
test: ## Run tests in container
docker compose exec mcrentcast-server uv run pytest
test-local: ## Run tests locally with uv
uv run pytest
test-mock: setup ## Run with mock API for testing
@echo "Starting services with mock API..."
USE_MOCK_API=true docker compose --profile mock up -d
@echo "Mock API started at: https://mock-api.$(DOMAIN)"
@echo "Available test API keys:"
@echo " - test_key_free_tier (50 daily limit)"
@echo " - test_key_basic (100 daily limit)"
@echo " - test_key_pro (1000 daily limit)"
@echo " - test_key_rate_limited (1 daily limit for testing)"
mock-api: ## Start only the mock API service
docker compose --profile mock up -d mock-rentcast-api
@echo "Mock API running at http://localhost:8001"
@echo "View test keys at: http://localhost:8001/test-keys"
coverage: ## Run tests with coverage report
docker compose exec mcrentcast-server uv run pytest --cov=src --cov-report=html:reports/coverage_html
@echo "Coverage report: reports/coverage_html/index.html"
lint: ## Run linting with ruff
uv run ruff check src/ tests/
format: ## Format code with black and ruff
uv run black src/ tests/
uv run ruff format src/ tests/
check: ## Run type checking with mypy
uv run mypy src/
clean: ## Clean up containers, volumes, and cache
docker compose down -v
docker system prune -f
rm -rf .pytest_cache/ reports/ htmlcov/
build: ## Build all images
docker compose build
rebuild: ## Rebuild all images from scratch
docker compose build --no-cache
restart: ## Restart all services
docker compose restart
restart-server: ## Restart MCP server only
docker compose restart mcrentcast-server
status: ## Show status of all services
docker compose ps
# Database management
db-migrate: ## Run database migrations
docker compose exec mcrentcast-server uv run python -m mcrentcast.db.migrate
db-reset: ## Reset database (WARNING: destroys all data)
@echo "WARNING: This will destroy all data in the database!"
@read -p "Are you sure? [y/N] " -n 1 -r; \
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
docker compose down -v; \
docker volume rm $(COMPOSE_PROJECT)_postgres_data 2>/dev/null || true; \
docker compose up -d mcrentcast-db; \
echo "Database reset complete"; \
fi
# Development helpers
watch: ## Watch for file changes and restart server
docker compose exec mcrentcast-server watchfiles --clear uv run uvicorn mcrentcast.server:app --reload src/
pip-compile: ## Update dependencies lock file
uv lock
# Production helpers
deploy: prod ## Alias for prod
backup-db: ## Backup database
@mkdir -p backups
docker compose exec mcrentcast-db pg_dump -U mcrentcast mcrentcast | gzip > backups/mcrentcast_$(shell date +%Y%m%d_%H%M%S).sql.gz
@echo "Database backup created in backups/"