# 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