.PHONY: dev build migrate logs shell-api shell-gpu lint test down ps restart clean # ─── Переменные ──────────────────────────────────────────────────────────────── COMPOSE = docker compose COMPOSE_DEV = docker compose -f docker-compose.yml -f docker-compose.dev.yml PROJECT = anti-plagiarism # ─── Разработка ──────────────────────────────────────────────────────────────── dev: @cp -n .env.example .env 2>/dev/null || true $(COMPOSE_DEV) up --build dev-d: @cp -n .env.example .env 2>/dev/null || true $(COMPOSE_DEV) up --build -d # ─── Продакшн ───────────────────────────────────────────────────────────────── build: $(COMPOSE) build up: $(COMPOSE) up -d down: $(COMPOSE) down restart: $(COMPOSE) restart ps: $(COMPOSE) ps # ─── Миграции ───────────────────────────────────────────────────────────────── migrate: $(COMPOSE) exec api alembic upgrade head migrate-dev: $(COMPOSE_DEV) exec api alembic upgrade head makemigration: @read -p "Migration name: " name; \ $(COMPOSE) exec api alembic revision --autogenerate -m "$$name" downgrade: $(COMPOSE) exec api alembic downgrade -1 # ─── Логи ───────────────────────────────────────────────────────────────────── logs: $(COMPOSE) logs -f logs-api: $(COMPOSE) logs -f api logs-gpu: $(COMPOSE) logs -f worker-gpu logs-indexer: $(COMPOSE) logs -f worker-indexer logs-notifier: $(COMPOSE) logs -f worker-notifier logs-gost: $(COMPOSE) logs -f worker-gost # ─── Шеллы ──────────────────────────────────────────────────────────────────── shell-api: $(COMPOSE) exec api bash shell-gpu: $(COMPOSE) exec worker-gpu bash shell-indexer: $(COMPOSE) exec worker-indexer bash shell-db: $(COMPOSE) exec postgres psql -U antiplagiator antiplagiator shell-redis: $(COMPOSE) exec redis redis-cli # ─── Линтинг и тесты ────────────────────────────────────────────────────────── lint: $(COMPOSE) exec api ruff check . --fix $(COMPOSE) exec api mypy app/ lint-frontend: cd services/frontend && npm run lint test: $(COMPOSE) exec api pytest tests/ -v test-cov: $(COMPOSE) exec api pytest tests/ -v --cov=app --cov-report=html # ─── Утилиты ────────────────────────────────────────────────────────────────── clean: $(COMPOSE) down -v --remove-orphans docker system prune -f # Запустить парсер (пример: make parse PARSER=openalex ARGS="--limit 1000") parse: $(COMPOSE) exec api python /scripts/run_parser.py $(PARSER) $(ARGS) # Создать MinIO бакеты minio-init: $(COMPOSE) exec minio mc alias set local http://localhost:9000 minioadmin changeme $(COMPOSE) exec minio mc mb local/documents || true $(COMPOSE) exec minio mc mb local/backups || true # Создать ES индекс es-init: bash infra/elasticsearch/setup.sh # Статистика Celery flower: @echo "Flower доступен по адресу http://localhost:5555" @$(COMPOSE) ps flower help: @echo "Академический помощник — команды make:" @echo "" @echo " make dev — запустить в режиме разработки (hot reload)" @echo " make build — собрать Docker образы" @echo " make up — запустить в продакшн режиме" @echo " make down — остановить все сервисы" @echo " make migrate — применить миграции Alembic" @echo " make logs — показать логи всех сервисов" @echo " make shell-api — открыть shell в контейнере api" @echo " make lint — запустить линтер" @echo " make test — запустить тесты" @echo " make clean — удалить все контейнеры и volumes"