FREDML / Makefile
Edwin Salguero
Enhanced FRED ML with improved Reports & Insights page, fixed alignment analysis, and comprehensive analytics improvements
2469150
# Enterprise-Grade Makefile for FRED ML
# Comprehensive build, test, and deployment automation
.PHONY: help install test clean build deploy lint format docs setup dev prod
# Default target
help: ## Show this help message
@echo "FRED ML - Enterprise Economic Analytics Platform"
@echo "================================================"
@echo ""
@echo "Available targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
@echo ""
@echo "Environment variables:"
@echo " FRED_API_KEY - Your FRED API key"
@echo " AWS_ACCESS_KEY_ID - AWS access key for cloud features"
@echo " AWS_SECRET_ACCESS_KEY - AWS secret key"
@echo " ENVIRONMENT - Set to 'production' for production mode"
# Development setup
setup: ## Initial project setup
@echo "🚀 Setting up FRED ML development environment..."
python scripts/setup_venv.py
@echo "✅ Development environment setup complete!"
venv-create: ## Create virtual environment
@echo "🏗️ Creating virtual environment..."
python scripts/setup_venv.py
@echo "✅ Virtual environment created!"
venv-activate: ## Activate virtual environment
@echo "🔌 Activating virtual environment..."
@if [ -d ".venv" ]; then \
echo "Virtual environment found at .venv/"; \
echo "To activate, run: source .venv/bin/activate"; \
echo "Or on Windows: .venv\\Scripts\\activate"; \
else \
echo "❌ Virtual environment not found. Run 'make venv-create' first."; \
fi
install: ## Install dependencies
@echo "📦 Installing dependencies..."
pip install -r requirements.txt
pip install -e .
@echo "✅ Dependencies installed!"
# Testing targets
test: ## Run all tests
@echo "🧪 Running comprehensive test suite..."
python tests/run_tests.py
@echo "✅ All tests completed!"
test-unit: ## Run unit tests only
@echo "🧪 Running unit tests..."
python -m pytest tests/unit/ -v --tb=short
@echo "✅ Unit tests completed!"
test-integration: ## Run integration tests only
@echo "🔗 Running integration tests..."
python -m pytest tests/integration/ -v --tb=short
@echo "✅ Integration tests completed!"
test-e2e: ## Run end-to-end tests only
@echo "🚀 Running end-to-end tests..."
python -m pytest tests/e2e/ -v --tb=short
@echo "✅ End-to-end tests completed!"
test-coverage: ## Run tests with coverage report
@echo "📊 Running tests with coverage..."
python -m pytest tests/ --cov=src --cov-report=html --cov-report=term
@echo "✅ Coverage report generated!"
# Code quality targets
lint: ## Run linting checks
@echo "🔍 Running code linting..."
flake8 src/ tests/ scripts/ --max-line-length=88 --extend-ignore=E203,W503
@echo "✅ Linting completed!"
format: ## Format code with black and isort
@echo "🎨 Formatting code..."
black src/ tests/ scripts/ --line-length=88
isort src/ tests/ scripts/ --profile=black
@echo "✅ Code formatting completed!"
type-check: ## Run type checking with mypy
@echo "🔍 Running type checks..."
mypy src/ --ignore-missing-imports --disallow-untyped-defs
@echo "✅ Type checking completed!"
# Cleanup targets
clean: ## Clean up build artifacts and cache
@echo "🧹 Cleaning up build artifacts..."
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name "htmlcov" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete 2>/dev/null || true
find . -type f -name "*.pyo" -delete 2>/dev/null || true
rm -rf build/ dist/ *.egg-info/ .coverage htmlcov/
@echo "✅ Cleanup completed!"
clean-redundant: ## Clean up redundant test files
@echo "🗑️ Cleaning up redundant files..."
python scripts/cleanup_redundant_files.py --live
@echo "✅ Redundant files cleaned up!"
# Build targets
build: clean ## Build the project
@echo "🔨 Building FRED ML..."
python setup.py sdist bdist_wheel
@echo "✅ Build completed!"
build-docker: ## Build Docker image
@echo "🐳 Building Docker image..."
docker build -t fred-ml:latest .
@echo "✅ Docker image built!"
# Development targets
dev: ## Start development environment
@echo "🚀 Starting development environment..."
@echo "Make sure you have set FRED_API_KEY environment variable"
streamlit run streamlit_app.py --server.port=8501 --server.address=0.0.0.0
dev-local: ## Start local development server
@echo "🏠 Starting local development server..."
streamlit run frontend/app.py --server.port=8501
# Production targets
prod: ## Start production environment
@echo "🏭 Starting production environment..."
ENVIRONMENT=production streamlit run streamlit_app.py --server.port=8501 --server.address=0.0.0.0
# Documentation targets
docs: ## Generate documentation
@echo "📚 Generating documentation..."
python scripts/generate_docs.py
@echo "✅ Documentation generated!"
docs-serve: ## Serve documentation locally
@echo "📖 Serving documentation..."
python -m http.server 8000 --directory docs/
@echo "📖 Documentation available at http://localhost:8000"
# Deployment targets
deploy-local: ## Deploy locally
@echo "🚀 Deploying locally..."
python scripts/deploy_local.py
@echo "✅ Local deployment completed!"
deploy-aws: ## Deploy to AWS
@echo "☁️ Deploying to AWS..."
python scripts/deploy_aws.py
@echo "✅ AWS deployment completed!"
deploy-streamlit: ## Deploy to Streamlit Cloud
@echo "☁️ Deploying to Streamlit Cloud..."
@echo "Make sure your repository is connected to Streamlit Cloud"
@echo "Set the main file path to: streamlit_app.py"
@echo "Add environment variables for FRED_API_KEY and AWS credentials"
@echo "✅ Streamlit Cloud deployment instructions provided!"
# Quality assurance targets
qa: lint format type-check test ## Run full quality assurance suite
@echo "✅ Quality assurance completed!"
pre-commit: format lint type-check test ## Run pre-commit checks
@echo "✅ Pre-commit checks completed!"
# Monitoring and logging targets
logs: ## View application logs
@echo "📋 Viewing application logs..."
tail -f logs/fred_ml.log
logs-clear: ## Clear application logs
@echo "🗑️ Clearing application logs..."
rm -f logs/*.log
@echo "✅ Logs cleared!"
# Backup and restore targets
backup: ## Create backup of current state
@echo "💾 Creating backup..."
tar -czf backup/fred_ml_backup_$(shell date +%Y%m%d_%H%M%S).tar.gz \
--exclude='.git' --exclude='.venv' --exclude='__pycache__' \
--exclude='*.pyc' --exclude='.pytest_cache' --exclude='htmlcov' .
@echo "✅ Backup created!"
restore: ## Restore from backup (specify BACKUP_FILE)
@if [ -z "$(BACKUP_FILE)" ]; then \
echo "❌ Please specify BACKUP_FILE=path/to/backup.tar.gz"; \
exit 1; \
fi
@echo "🔄 Restoring from backup: $(BACKUP_FILE)"
tar -xzf $(BACKUP_FILE)
@echo "✅ Restore completed!"
# Health check targets
health: ## Check system health
@echo "🏥 Checking system health..."
python scripts/health_check.py
@echo "✅ Health check completed!"
# Configuration targets
config-validate: ## Validate configuration
@echo "🔍 Validating configuration..."
python -c "from config.settings import get_config; config = get_config(); print('✅ Configuration valid!')"
@echo "✅ Configuration validation completed!"
config-show: ## Show current configuration
@echo "📋 Current configuration:"
python -c "from config.settings import get_config; import json; config = get_config(); print(json.dumps(config.to_dict(), indent=2))"
# Database targets
db-migrate: ## Run database migrations
@echo "🗄️ Running database migrations..."
python scripts/db_migrate.py
@echo "✅ Database migrations completed!"
db-seed: ## Seed database with initial data
@echo "🌱 Seeding database..."
python scripts/db_seed.py
@echo "✅ Database seeding completed!"
# Analytics targets
analytics-run: ## Run analytics pipeline
@echo "📊 Running analytics pipeline..."
python scripts/run_analytics.py
@echo "✅ Analytics pipeline completed!"
analytics-cache-clear: ## Clear analytics cache
@echo "🗑️ Clearing analytics cache..."
rm -rf data/cache/*
@echo "✅ Analytics cache cleared!"
# Security targets
security-scan: ## Run security scan
@echo "🔒 Running security scan..."
bandit -r src/ -f json -o security_report.json || true
@echo "✅ Security scan completed!"
security-audit: ## Run security audit
@echo "🔍 Running security audit..."
safety check
@echo "✅ Security audit completed!"
# Performance targets
performance-test: ## Run performance tests
@echo "⚡ Running performance tests..."
python scripts/performance_test.py
@echo "✅ Performance tests completed!"
performance-profile: ## Profile application performance
@echo "📊 Profiling application performance..."
python -m cProfile -o profile_output.prof scripts/profile_app.py
@echo "✅ Performance profiling completed!"
# All-in-one targets
all: setup install qa test build ## Complete setup and testing
@echo "🎉 Complete setup and testing completed!"
production-ready: clean qa test-coverage security-scan performance-test ## Prepare for production
@echo "🏭 Production readiness check completed!"
# Helpers
version: ## Show version information
@echo "FRED ML Version: $(shell python -c "import src; print(src.__version__)" 2>/dev/null || echo "Unknown")"
@echo "Python Version: $(shell python --version)"
@echo "Pip Version: $(shell pip --version)"
status: ## Show project status
@echo "📊 Project Status:"
@echo " - Python files: $(shell find src/ -name '*.py' | wc -l)"
@echo " - Test files: $(shell find tests/ -name '*.py' | wc -l)"
@echo " - Lines of code: $(shell find src/ -name '*.py' -exec wc -l {} + | tail -1 | awk '{print $$1}')"
@echo " - Test coverage: $(shell python -m pytest tests/ --cov=src --cov-report=term-missing | tail -1 || echo "Not available")"
# Default target
.DEFAULT_GOAL := help