# ───────────────────────────────────────────────────────────────────────────── # ChessEcon — Makefile # ───────────────────────────────────────────────────────────────────────────── .PHONY: help env-file dirs build build-gpu up up-gpu down demo selfplay train \ train-gpu logs shell clean frontend-dev backend-dev test lint # ── Default target ──────────────────────────────────────────────────────────── help: @echo "" @echo " ChessEcon — Multi-Agent Chess RL System" @echo " ════════════════════════════════════════" @echo "" @echo " Setup:" @echo " make env-file Copy .env.example → .env (edit before running)" @echo " make dirs Create host volume directories" @echo "" @echo " Docker (CPU):" @echo " make build Build the CPU Docker image" @echo " make up Start the dashboard + API (http://localhost:8000)" @echo " make demo Run a 3-game demo and exit" @echo " make selfplay Collect self-play data (no training)" @echo " make train Run RL training (CPU)" @echo " make down Stop all containers" @echo "" @echo " Docker (GPU):" @echo " make build-gpu Build the GPU Docker image" @echo " make up-gpu Start with GPU support" @echo " make train-gpu Run RL training (GPU)" @echo "" @echo " Development:" @echo " make frontend-dev Start React dev server (hot-reload)" @echo " make backend-dev Start FastAPI dev server" @echo " make test Run all tests" @echo " make lint Run linters" @echo "" @echo " Utilities:" @echo " make logs Tail container logs" @echo " make shell Open shell in running container" @echo " make clean Remove containers, images, and volumes" @echo "" # ── Setup ───────────────────────────────────────────────────────────────────── env-file: @if [ -f .env ]; then \ echo ".env already exists. Delete it first if you want to reset."; \ else \ cp .env.example .env; \ echo ".env created. Edit it with your API keys before running."; \ fi dirs: @mkdir -p volumes/models volumes/data volumes/logs @echo "Volume directories created." # ── Docker CPU ──────────────────────────────────────────────────────────────── build: dirs docker compose build chessecon up: dirs docker compose up chessecon demo: dirs docker compose run --rm chessecon demo selfplay: dirs docker compose run --rm \ -e RL_METHOD=selfplay \ chessecon selfplay train: dirs docker compose --profile training up trainer down: docker compose down # ── Docker GPU ──────────────────────────────────────────────────────────────── build-gpu: dirs docker compose -f docker-compose.yml -f docker-compose.gpu.yml build up-gpu: dirs docker compose -f docker-compose.yml -f docker-compose.gpu.yml up chessecon train-gpu: dirs docker compose -f docker-compose.yml -f docker-compose.gpu.yml \ --profile training up trainer # ── Development (local, no Docker) ─────────────────────────────────────────── frontend-dev: @echo "Starting React frontend dev server..." cd frontend && pnpm install && pnpm dev backend-dev: @echo "Starting FastAPI backend dev server..." cd backend && pip install -r requirements.txt && \ uvicorn main:app --reload --host 0.0.0.0 --port 8000 # ── Testing ─────────────────────────────────────────────────────────────────── test: @echo "Running backend tests..." cd backend && python -m pytest tests/ -v @echo "Running frontend tests..." cd frontend && pnpm test lint: @echo "Linting backend..." cd backend && python -m ruff check . || true @echo "Linting frontend..." cd frontend && pnpm lint || true # ── Utilities ───────────────────────────────────────────────────────────────── logs: docker compose logs -f chessecon shell: docker compose exec chessecon /bin/bash clean: docker compose down -v --rmi local @echo "Containers, images, and volumes removed."