# Peikarband Platform - Makefile REGISTRY ?= harbor.peikarband.ir IMAGE_NAME ?= peikarband/landing VERSION ?= $(shell git describe --tags --always --dirty) HELM_RELEASE ?= peikarband NAMESPACE ?= production DOCKER_BUILDKIT ?= 1 .PHONY: help install dev kill-dev test lint format clean docker-up docker-down migrate help: @echo "════════════════════════════════════════" @echo " 📋 Peikarband Landing - Available Commands" @echo "════════════════════════════════════════" @echo "" @echo "🔧 Development:" @echo " make install - Install dependencies" @echo " make dev - Run development server" @echo " make kill-dev - Kill development server (ports 3000 & 8000)" @echo " make test - Run tests" @echo " make lint - Run linters" @echo " make format - Format code" @echo " make clean - Clean temporary files" @echo "" @echo "🐳 Docker - Base Image:" @echo " make docker-build-base - Build base image (Python + Node.js + bun)" @echo " make docker-push-base - Push base image to Harbor" @echo "" @echo "🐳 Docker - Application:" @echo " make docker-build - Build application image" @echo " make docker-push - Push application image to Harbor" @echo " make docker-login - Login to Harbor registry" @echo " make docker-up - Start Docker Compose" @echo " make docker-down - Stop Docker Compose" @echo "" @echo "☸️ Kubernetes/Helm:" @echo " make helm-lint - Lint Helm chart" @echo " make helm-package - Package Helm chart" @echo " make helm-install - Install Helm chart" @echo " make helm-upgrade - Upgrade Helm chart" @echo " make helm-uninstall - Uninstall Helm chart" @echo " make k8s-deploy - Full deployment pipeline" @echo "" @echo "🗄️ Database:" @echo " make migrate - Run database migrations" @echo " make seed - Seed database with initial data" @echo "" @echo "════════════════════════════════════════" @echo " Quick Start:" @echo "════════════════════════════════════════" @echo "" @echo "1️⃣ Build & Push Base (once):" @echo " make docker-login" @echo " make docker-build-base" @echo " make docker-push-base" @echo "" @echo "2️⃣ Build & Push App:" @echo " make docker-build" @echo " make docker-push" @echo "" @echo "3️⃣ Deploy:" @echo " make k8s-deploy" @echo "" install: pip install -r requirements.txt pip install -r requirements-dev.txt pre-commit install dev: cd peikarband && python3 -m reflex run kill-dev: @echo "Killing processes on ports 3000 and 8000..." @lsof -ti:3000 -ti:8000 2>/dev/null | xargs kill -9 2>/dev/null || true @pkill -9 -f reflex 2>/dev/null || true @echo "Done!" test: pytest tests/ -v --cov=src --cov-report=html lint: flake8 src/ mypy src/ black --check src/ isort --check-only src/ format: black src/ isort src/ clean: find . -type d -name "__pycache__" -exec rm -rf {} + find . -type f -name "*.pyc" -delete find . -type f -name "*.pyo" -delete find . -type d -name ".pytest_cache" -exec rm -rf {} + find . -type d -name ".mypy_cache" -exec rm -rf {} + find . -type d -name "*.egg-info" -exec rm -rf {} + rm -rf .coverage htmlcov/ rm -rf dist/ # Docker commands docker-build-base: @echo "════════════════════════════════════════" @echo " 🔨 Building Base Image" @echo "════════════════════════════════════════" DOCKER_BUILDKIT=$(DOCKER_BUILDKIT) docker buildx build \ -f docker/Dockerfile.base \ -t hub.peikarband.ir/peikarband/landing:base \ -t hub.peikarband.ir/peikarband/landing:base-python3.11-node20 \ --build-arg PYTHON_VERSION=3.11 \ --build-arg NODE_VERSION=20 \ --platform linux/amd64 \ --load \ . @echo "" @echo "✅ Base image built: hub.peikarband.ir/peikarband/landing:base" @echo "" docker-push-base: @echo "════════════════════════════════════════" @echo " 📤 Pushing Base Image" @echo "════════════════════════════════════════" docker push hub.peikarband.ir/peikarband/landing:base docker push hub.peikarband.ir/peikarband/landing:base-python3.11-node20 @echo "" @echo "✅ Base image pushed successfully!" @echo "" docker-build: @echo "════════════════════════════════════════" @echo " 🔨 Building Application Image" @echo "════════════════════════════════════════" DOCKER_BUILDKIT=$(DOCKER_BUILDKIT) docker buildx build \ -f docker/Dockerfile \ -t hub.peikarband.ir/peikarband/landing:$(VERSION) \ -t hub.peikarband.ir/peikarband/landing:latest \ --build-arg BASE_IMAGE=hub.peikarband.ir/peikarband/landing:base \ --build-arg VERSION=$(VERSION) \ --build-arg BUILD_DATE=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ') \ --platform linux/amd64 \ --load \ . @echo "" @echo "✅ Application image built: hub.peikarband.ir/peikarband/landing:$(VERSION)" @echo "" docker-push: @echo "════════════════════════════════════════" @echo " 📤 Pushing Application Image" @echo "════════════════════════════════════════" docker push hub.peikarband.ir/peikarband/landing:$(VERSION) docker push hub.peikarband.ir/peikarband/landing:latest @echo "" @echo "✅ Application image pushed successfully!" @echo "" docker-login: @echo "Logging in to Harbor registry..." @docker login hub.peikarband.ir docker-up: docker-compose -f docker/docker-compose.yml up -d docker-down: docker-compose -f docker/docker-compose.yml down # Helm commands helm-lint: helm lint helm/peikarband helm-template: helm template $(HELM_RELEASE) helm/peikarband --debug helm-package: helm package helm/peikarband --destination . helm-install: helm install $(HELM_RELEASE) helm/peikarband \ --namespace $(NAMESPACE) \ --create-namespace \ --set image.repository=$(REGISTRY)/$(IMAGE_NAME) \ --set image.tag=$(VERSION) \ --wait helm-upgrade: helm upgrade --install $(HELM_RELEASE) helm/peikarband \ --namespace $(NAMESPACE) \ --set image.repository=$(REGISTRY)/$(IMAGE_NAME) \ --set image.tag=$(VERSION) \ --wait helm-uninstall: helm uninstall $(HELM_RELEASE) --namespace $(NAMESPACE) # Kubernetes deployment (full pipeline) k8s-deploy: docker-build docker-push helm-upgrade @echo "Deployment complete!" @echo "Check status: kubectl get pods -n $(NAMESPACE)" # Database migrate: cd peikarband && alembic -c config/alembic.ini upgrade head seed: cd peikarband && python3 tools/scripts/seed_database.py