diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..255606d --- /dev/null +++ b/Makefile @@ -0,0 +1,55 @@ +ifeq ($(OS),Windows_NT) +SHELL := cmd.exe +SYS_PYTHON ?= py -3.14 +VENV_PYTHON := .venv/Scripts/python.exe +PY := .venv\Scripts\python.exe +else +SYS_PYTHON ?= python3.14 +VENV_PYTHON := .venv/bin/python +PY := $(VENV_PYTHON) +endif + +STAMP := .venv/.installed + +.DEFAULT_GOAL := help +.PHONY: help up setup install check-env migrate run test check-lk clean + +help: + @$(SYS_PYTHON) -X utf8 -c "import re, sys; [print(' make {:<10} {}'.format(*m.groups())) for m in re.finditer(r'^([a-z-]+):.*?## (.*)', open(sys.argv[1], encoding='utf-8').read(), re.M)]" $(firstword $(MAKEFILE_LIST)) + +up: migrate run ## всё сразу: окружение, .env, миграции, сервер + +setup: install .env ## venv, зависимости и .env + +install: $(STAMP) ## venv и зависимости + +$(VENV_PYTHON): + $(SYS_PYTHON) -m venv .venv + +$(STAMP): $(VENV_PYTHON) pyproject.toml + $(PY) -m pip install -e ".[dev]" + @$(PY) -c "import pathlib; pathlib.Path('$(STAMP)').touch()" + +.env: + @$(SYS_PYTHON) -c "import shutil; shutil.copy('.env.example', '.env')" + @echo .env created from .env.example - fill in DATABASE_URL 1>&2 + +check-env: $(STAMP) .env + @$(PY) -c "import os, sys, pathlib; from mospolytech_mcp._dotenv import load_dotenv; load_dotenv(pathlib.Path('.env')); sys.exit(None if os.environ.get('DATABASE_URL') else 'DATABASE_URL is empty - fill it in .env and run make again')" + +migrate: check-env ## миграции БД + $(PY) -m alembic upgrade head + +# stdout занят протоколом, поэтому echo в stderr +run: check-env ## запустить MCP-сервер (stdio) + @echo mospolytech-mcp is running on stdio, Ctrl+C to stop 1>&2 + @$(PY) -m mospolytech_mcp.server + +test: install ## офлайн-тесты + $(PY) -m pytest -q + +check-lk: install .env ## проверка lk_api на реальном аккаунте + $(PY) scripts/check_lk_api.py + +clean: ## удалить .venv и кэши + $(SYS_PYTHON) -c "import shutil; [shutil.rmtree(p, ignore_errors=True) for p in ('.venv', '.pytest_cache')]" diff --git a/README.md b/README.md index e80ebe6..ed29ab1 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,24 @@ rasp.dmami.ru, записались в БД, второй вызов уже ид - Доступ к PostgreSQL — свой пользователь `mospolytech_mcp` на общем сервере команды (не `postgres`/admin), спросите данные в чате, если не сохранили +## Быстрый старт + +Если стоит GNU Make (на Windows — `choco install make`), всё поднимается +одной командой: + +```powershell +make up +``` + +Она создаёт `.venv`, ставит зависимости, копирует `.env.example` в `.env`, +накатывает миграции и запускает сервер. На свежем клоне первый запуск +остановится с просьбой вписать `DATABASE_URL` в `.env` — впишите и +запустите `make up` ещё раз. Остальные команды (`make test`, `make migrate`, +`make run`, `make check-lk`, `make clean`) — в `make help`. Работает из +PowerShell, cmd и Git Bash, а также на Linux/macOS. + +Ниже — то же самое руками, без make. + ## Установка ```powershell