.DEFAULT_GOAL := help .PHONY: help dev dev-down dev-logs dev-rebuild migrate db-shell \ fmt lint test check sqlx-prepare build-image push-image deploy clean DEV_COMPOSE := docker-compose.yml PROD_COMPOSE := docker-compose.prod.yml IMAGE ?= ghcr.io/nineap/netrunner-control-plane:latest help: ## Показать список команд @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-16s\033[0m %s\n", $$1, $$2}' # ---------------------------------------------------------------------- # Локальная разработка (fully-dockerized, hot-reload) # ---------------------------------------------------------------------- dev: ## Поднять локальный стек (db+redis+app с автоперекомпиляцией) docker compose -f $(DEV_COMPOSE) up --build dev-down: ## Остановить локальный стек (тома сохраняются) docker compose -f $(DEV_COMPOSE) down dev-logs: ## Логи приложения в дев-стеке docker compose -f $(DEV_COMPOSE) logs -f app dev-rebuild: ## Пересобрать дев-образ приложения с нуля docker compose -f $(DEV_COMPOSE) build --no-cache app migrate: ## Применить миграции в дев-БД docker compose -f $(DEV_COMPOSE) run --rm app cargo run -- --migrate db-shell: ## Зайти в psql дев-БД docker compose -f $(DEV_COMPOSE) exec db psql -U netrunner_admin -d netrunner # ---------------------------------------------------------------------- # Качество кода (то же, что гоняет CI) # ---------------------------------------------------------------------- fmt: ## Форматирование cargo fmt --all lint: ## Clippy как в CI (-D warnings) SQLX_OFFLINE=true cargo clippy --all-targets -- -D warnings test: ## Тесты (нужен запущенный Postgres + DATABASE_URL) cargo test --all-targets check: fmt lint ## fmt + lint одной командой sqlx-prepare: ## Обновить offline-кеш sqlx (если появятся query!-макросы) cargo sqlx prepare # ---------------------------------------------------------------------- # Прод-образ (обычно это делает CI, но можно и локально) # ---------------------------------------------------------------------- build-image: ## Собрать прод-образ локально docker build -t $(IMAGE) . push-image: ## Запушить прод-образ в GHCR docker push $(IMAGE) deploy: ## Подсказка: деплой запускается вручную из GitHub Actions @echo "Деплой выкатывается вручную: GitHub → Actions → 'Deploy to VPS (Manual)' → Run workflow." clean: ## Снести дев-стек вместе с томами (БД и кеши компиляции!) docker compose -f $(DEV_COMPOSE) down -v