Files
orion/Makefile
Samir Boulahtit 96bdb07fb2 docs(arch): integrate architecture validation into QA workflow
- Add arch-check, arch-check-file, arch-check-object Makefile targets
- Include arch-check in QA target for CI integration
- Update architecture-rules.md with CLI usage examples
- Update code-quality.md with validation commands

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 21:31:41 +01:00

500 lines
18 KiB
Makefile

# Wizamart Multi-Tenant E-Commerce Platform Makefile
# Cross-platform compatible (Windows & Linux)
.PHONY: install install-dev install-docs install-all dev test test-coverage lint format check docker-build docker-up docker-down clean help npm-install tailwind-dev tailwind-build arch-check arch-check-file arch-check-object
# Detect OS
ifeq ($(OS),Windows_NT)
DETECTED_OS := Windows
else
DETECTED_OS := $(shell uname -s)
endif
# Set Python based on OS
PYTHON := python
PIP := pip
# =============================================================================
# INSTALLATION & SETUP
# =============================================================================
install:
$(PIP) install -r requirements.txt
install-dev: install
$(PIP) install -r requirements-dev.txt
install-test:
$(PIP) install -r requirements-test.txt
install-docs:
$(PIP) install -r requirements-docs.txt
install-all: install install-dev install-test install-docs
setup: install-all migrate-up init-prod
@echo "✅ Development environment setup complete!"
@echo "Run 'make dev' to start development server"
# =============================================================================
# DEVELOPMENT SERVERS
# =============================================================================
dev:
$(PYTHON) -m uvicorn main:app --reload --host 0.0.0.0 --port 8000
# =============================================================================
# DATABASE MIGRATIONS
# =============================================================================
migrate-create:
ifeq ($(DETECTED_OS),Windows)
@if "$(message)"=="" (echo Error: Please provide a message. Usage: make migrate-create message="your_description") else ($(PYTHON) -m alembic revision --autogenerate -m "$(message)")
else
@if [ -z "$(message)" ]; then \
echo "Error: Please provide a message. Usage: make migrate-create message=\"your_description\""; \
else \
$(PYTHON) -m alembic revision --autogenerate -m "$(message)"; \
fi
endif
migrate-create-manual:
ifeq ($(DETECTED_OS),Windows)
@if "$(message)"=="" (echo Error: Please provide a message. Usage: make migrate-create-manual message="your_description") else ($(PYTHON) -m alembic revision -m "$(message)")
else
@if [ -z "$(message)" ]; then \
echo "Error: Please provide a message. Usage: make migrate-create-manual message=\"your_description\""; \
else \
$(PYTHON) -m alembic revision -m "$(message)"; \
fi
endif
migrate-up:
@echo "Running database migrations..."
$(PYTHON) -m alembic upgrade head
@echo "✅ Migrations completed successfully"
migrate-down:
@echo "Rolling back last migration..."
$(PYTHON) -m alembic downgrade -1
@echo "✅ Rollback completed"
migrate-status:
@echo "Current migration status:"
$(PYTHON) -m alembic current
@echo ""
@echo "Migration history:"
$(PYTHON) -m alembic history --verbose
# =============================================================================
# DATABASE INITIALIZATION & SEEDING
# =============================================================================
# Production initialization - Run on first setup (production OR development)
init-prod:
@echo "🔧 Initializing production database..."
@echo ""
@echo "Step 1/4: Creating admin user and platform alerts..."
$(PYTHON) scripts/init_production.py
@echo ""
@echo "Step 2/4: Initializing log settings..."
$(PYTHON) scripts/init_log_settings.py
@echo ""
@echo "Step 3/4: Creating default CMS content pages..."
$(PYTHON) scripts/create_default_content_pages.py
@echo ""
@echo "Step 4/4: Creating platform pages and landing..."
$(PYTHON) scripts/create_platform_pages.py
@echo ""
@echo "✅ Production initialization completed"
@echo "✨ Platform is ready for production OR development"
# Demo data seeding - Cross-platform using Python to set environment
seed-demo:
@echo "🎪 Seeding demo data (normal mode)..."
ifeq ($(DETECTED_OS),Windows)
@set SEED_MODE=normal&& $(PYTHON) scripts/seed_demo.py
else
SEED_MODE=normal $(PYTHON) scripts/seed_demo.py
endif
@echo "✅ Demo seeding completed"
seed-demo-minimal:
@echo "🎪 Seeding demo data (minimal mode - 1 vendor only)..."
ifeq ($(DETECTED_OS),Windows)
@set SEED_MODE=minimal&& $(PYTHON) scripts/seed_demo.py
else
SEED_MODE=minimal $(PYTHON) scripts/seed_demo.py
endif
@echo "✅ Minimal demo seeding completed"
seed-demo-reset:
@echo "⚠️ WARNING: This will DELETE ALL existing data!"
ifeq ($(DETECTED_OS),Windows)
@set SEED_MODE=reset&& $(PYTHON) scripts/seed_demo.py
else
SEED_MODE=reset $(PYTHON) scripts/seed_demo.py
endif
db-setup: migrate-up init-prod seed-demo
@echo ""
@echo "✅ Database setup complete!"
@echo "✨ Run 'make dev' to start development server"
db-reset: migrate-down migrate-up init-prod seed-demo-reset
@echo ""
@echo "✅ Database completely reset!"
backup-db:
@echo "Creating database backup..."
@$(PYTHON) scripts/backup_database.py
# Utility commands (usually not needed - init-prod handles these)
create-cms-defaults:
@echo "📄 Creating default CMS content pages..."
$(PYTHON) scripts/create_default_content_pages.py
@echo "✅ CMS defaults created"
create-platform-pages:
@echo "🏠 Creating platform pages and landing..."
$(PYTHON) scripts/create_platform_pages.py
@echo "✅ Platform pages created"
init-logging:
@echo "📝 Initializing log settings..."
$(PYTHON) scripts/init_log_settings.py
@echo "✅ Log settings initialized"
# =============================================================================
# TESTING
# =============================================================================
test:
$(PYTHON) -m pytest tests/ -v
test-unit:
$(PYTHON) -m pytest tests/ -v -m unit
test-integration:
$(PYTHON) -m pytest tests/ -v -m integration
test-coverage:
$(PYTHON) -m pytest tests/ --cov=app --cov=models --cov=utils --cov=middleware --cov-report=html --cov-report=term-missing
test-fast:
$(PYTHON) -m pytest tests/ -v -m "not slow"
test-slow:
$(PYTHON) -m pytest tests/ -v -m slow
test-auth:
$(PYTHON) -m pytest tests/test_auth.py -v
test-products:
$(PYTHON) -m pytest tests/test_products.py -v
test-inventory:
$(PYTHON) -m pytest tests/test_inventory.py -v
# =============================================================================
# CODE QUALITY
# =============================================================================
format:
@echo "Formatting code with ruff..."
$(PYTHON) -m ruff format .
lint:
@echo "Linting code with ruff..."
$(PYTHON) -m ruff check . --fix
@echo "Type checking with mypy..."
$(PYTHON) -m mypy .
lint-strict:
@echo "Linting (no auto-fix)..."
$(PYTHON) -m ruff check .
@echo "Type checking with mypy..."
$(PYTHON) -m mypy .
check: format lint verify-imports
ci: lint-strict verify-imports test-coverage
verify-imports:
@echo "Verifying critical imports..."
$(PYTHON) scripts/verify_critical_imports.py
arch-check:
@echo "Running architecture validation..."
$(PYTHON) scripts/validate_architecture.py
arch-check-file:
ifeq ($(DETECTED_OS),Windows)
@if "$(file)"=="" (echo Error: Please provide a file. Usage: make arch-check-file file="path/to/file.py") else ($(PYTHON) scripts/validate_architecture.py -f "$(file)")
else
@if [ -z "$(file)" ]; then \
echo "Error: Please provide a file. Usage: make arch-check-file file=\"path/to/file.py\""; \
else \
$(PYTHON) scripts/validate_architecture.py -f "$(file)"; \
fi
endif
arch-check-object:
ifeq ($(DETECTED_OS),Windows)
@if "$(name)"=="" (echo Error: Please provide an object name. Usage: make arch-check-object name="company") else ($(PYTHON) scripts/validate_architecture.py -o "$(name)")
else
@if [ -z "$(name)" ]; then \
echo "Error: Please provide an object name. Usage: make arch-check-object name=\"company\""; \
else \
$(PYTHON) scripts/validate_architecture.py -o "$(name)"; \
fi
endif
qa: format lint arch-check test-coverage docs-check
@echo "Quality assurance checks completed!"
# =============================================================================
# DOCUMENTATION
# =============================================================================
docs-serve:
@echo "Starting documentation server..."
$(PYTHON) -m mkdocs serve --dev-addr=0.0.0.0:8001
docs-build:
@echo "Building documentation..."
$(PYTHON) -m mkdocs build --clean --strict
docs-deploy:
@echo "Deploying documentation..."
$(PYTHON) -m mkdocs gh-deploy --clean
docs-clean:
ifeq ($(DETECTED_OS),Windows)
@if exist site rmdir /s /q site
else
@rm -rf site
endif
@echo "Documentation build files cleaned!"
docs-check:
@echo "Checking documentation for issues..."
$(PYTHON) -m mkdocs build --strict --verbose
# =============================================================================
# FRONTEND / TAILWIND CSS
# =============================================================================
npm-install:
@echo "Installing npm dependencies..."
npm install
@echo "npm dependencies installed"
tailwind-dev:
@echo "Building Tailwind CSS (development - all classes)..."
npm run tailwind:admin
npm run tailwind:vendor
@echo "Tailwind CSS built (admin + vendor)"
tailwind-build:
@echo "Building Tailwind CSS (production - purged)..."
npm run build
@echo "Tailwind CSS built for production"
tailwind-watch:
@echo "Watching Tailwind CSS for changes..."
@echo "Note: This watches admin CSS only. Run in separate terminal."
npx tailwindcss build static/admin/css/tailwind.css -o static/admin/css/tailwind.output.css --watch
# =============================================================================
# DOCKER
# =============================================================================
docker-build:
docker-compose build
docker-up:
docker-compose up -d
docker-down:
docker-compose down
docker-restart: docker-down docker-up
# =============================================================================
# DEPLOYMENT
# =============================================================================
deploy-staging: migrate-up
docker-compose -f docker-compose.staging.yml up -d
deploy-prod: migrate-up
docker-compose -f docker-compose.prod.yml up -d
# =============================================================================
# UTILITIES
# =============================================================================
clean:
ifeq ($(DETECTED_OS),Windows)
@if exist htmlcov rmdir /s /q htmlcov
@if exist .pytest_cache rmdir /s /q .pytest_cache
@if exist .coverage del .coverage
@if exist .mypy_cache rmdir /s /q .mypy_cache
@for /d /r . %%d in (__pycache__) do @if exist "%%d" rmdir /s /q "%%d"
@del /s /q *.pyc 2>nul || echo No .pyc files found
else
@find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
@find . -type f -name "*.pyc" -delete 2>/dev/null || true
@rm -rf htmlcov .pytest_cache .coverage .mypy_cache 2>/dev/null || true
endif
@echo "Cleaned up build artifacts"
verify-setup:
@echo "Running setup verification..."
@$(PYTHON) scripts/verify_setup.py
check-env:
@echo "Checking Python environment..."
@echo "Detected OS: $(DETECTED_OS)"
@echo ""
@echo "Python version:"
@$(PYTHON) --version
@echo ""
ifeq ($(DETECTED_OS),Windows)
@echo "Python location:"
@where $(PYTHON)
else
@echo "Python location:"
@which $(PYTHON)
endif
@echo ""
@echo "Virtual environment active:"
@$(PYTHON) -c "import sys; print('YES' if hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix) else 'NO')"
@echo ""
@echo "Python executable:"
@$(PYTHON) -c "import sys; print(sys.executable)"
# =============================================================================
# HELP
# =============================================================================
help:
@echo "Wizamart Platform Development Commands"
@echo ""
@echo "=== SETUP ==="
@echo " install - Install production dependencies"
@echo " install-test - Install test dependencies only"
@echo " install-dev - Install development dependencies"
@echo " install-all - Install all dependencies"
@echo " setup - Complete development setup"
@echo ""
@echo "=== DEVELOPMENT ==="
@echo " dev - Start API development server"
@echo ""
@echo "=== DATABASE ==="
@echo " migrate-create message=\"msg\" - Create new migration"
@echo " migrate-up - Apply pending migrations"
@echo " migrate-down - Rollback last migration"
@echo " migrate-status - Show migration status"
@echo " init-prod - Initialize platform (admin, logging, CMS, pages)"
@echo " seed-demo - Seed demo data (3 companies + vendors)"
@echo " seed-demo-minimal - Seed minimal demo (1 company + vendor)"
@echo " seed-demo-reset - DELETE ALL demo data and reseed"
@echo " db-setup - Full dev setup (migrate + init-prod + seed-demo)"
@echo " backup-db - Backup database"
@echo ""
@echo "=== TESTING ==="
@echo " test - Run all tests"
@echo " test-coverage - Run tests with coverage"
@echo " test-fast - Run fast tests only"
@echo ""
@echo "=== CODE QUALITY ==="
@echo " format - Format code with ruff"
@echo " lint - Lint and auto-fix with ruff + mypy"
@echo " lint-strict - Lint without auto-fix + mypy"
@echo " verify-imports - Verify critical imports haven't been removed"
@echo " arch-check - Validate architecture patterns"
@echo " arch-check-file file=\"path\" - Check a single file"
@echo " arch-check-object name=\"company\" - Check all files for an entity"
@echo " check - Format + lint + verify imports"
@echo " ci - Full CI pipeline (strict)"
@echo " qa - Quality assurance (includes arch-check)"
@echo ""
@echo "=== DOCUMENTATION ==="
@echo " docs-serve - Start documentation server"
@echo " docs-build - Build documentation"
@echo ""
@echo "=== FRONTEND / TAILWIND ==="
@echo " npm-install - Install npm dependencies"
@echo " tailwind-dev - Build Tailwind CSS (development)"
@echo " tailwind-build - Build Tailwind CSS (production)"
@echo " tailwind-watch - Watch and rebuild on changes"
@echo ""
@echo "=== DOCKER ==="
@echo " docker-build - Build Docker containers"
@echo " docker-up - Start Docker containers"
@echo " docker-down - Stop Docker containers"
@echo ""
@echo "=== UTILITIES ==="
@echo " clean - Clean build artifacts"
@echo " check-env - Check Python environment and OS"
@echo ""
@echo "=== DAILY WORKFLOW ==="
@echo " make setup # Initial setup"
@echo " make dev # Start development"
@echo " make migrate-create message=\"feature\" # Create migration"
@echo " make migrate-up # Apply migration"
@echo " make test # Run tests"
help-db:
@echo "=== DATABASE COMMANDS ==="
@echo ""
@echo "MIGRATIONS:"
@echo " migrate-create message=\"description\" - Create auto-generated migration"
@echo " migrate-create-manual message=\"desc\" - Create empty migration template"
@echo " migrate-up - Apply all pending migrations"
@echo " migrate-down - Rollback last migration"
@echo " migrate-status - Show current status and history"
@echo ""
@echo "PLATFORM INITIALIZATION (Production + Development):"
@echo "──────────────────────────────────────────────────────────"
@echo " init-prod - Complete platform setup (4 steps):"
@echo " 1. Create admin user + alerts"
@echo " 2. Initialize log settings"
@echo " 3. Create CMS defaults"
@echo " 4. Create platform pages"
@echo ""
@echo "DEMO DATA (Development Only - NEVER in production):"
@echo "──────────────────────────────────────────────────────────"
@echo " seed-demo - Create 3 demo companies + vendors + data"
@echo " seed-demo-minimal - Create 1 demo company + vendor only"
@echo " seed-demo-reset - DELETE ALL demo data and reseed (DANGEROUS!)"
@echo ""
@echo "UTILITY COMMANDS (Advanced - usually not needed):"
@echo "──────────────────────────────────────────────────────────"
@echo " create-cms-defaults - Re-create CMS pages only"
@echo " create-platform-pages - Re-create platform pages only"
@echo " init-logging - Re-initialize logging only"
@echo ""
@echo "QUICK WORKFLOWS:"
@echo "──────────────────────────────────────────────────────────"
@echo " db-setup - Full dev setup (migrate + init-prod + seed-demo)"
@echo " db-reset - Nuclear reset (rollback + init-prod + reseed)"
@echo ""
@echo "TYPICAL FIRST-TIME SETUP (Development):"
@echo "──────────────────────────────────────────────────────────"
@echo " 1. make migrate-up # Apply database schema"
@echo " 2. make init-prod # Initialize platform (admin, CMS, logging, pages)"
@echo " 3. make seed-demo # Add demo data (companies, vendors, products)"
@echo " 4. make dev # Start development server"
@echo ""
@echo " OR simply: make db-setup # Does all the above!"
@echo ""
@echo "PRODUCTION SETUP:"
@echo "──────────────────────────────────────────────────────────"
@echo " 1. Set ENV=production or ENVIRONMENT=production"
@echo " 2. make migrate-up # Apply database schema"
@echo " 3. make init-prod # Initialize platform (with .env credentials)"
@echo " 4. Create companies via admin panel"
@echo " 5. DO NOT run seed-demo in production!"