diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c974c4d --- /dev/null +++ b/Makefile @@ -0,0 +1,48 @@ +PYTHON ?= $(shell command -v python3.13 || command -v python3.12 || command -v python3.11 || command -v python3.10 || command -v python3) +VENV ?= .venv +PIP := $(VENV)/bin/pip +PY := $(VENV)/bin/python + +.PHONY: help venv install run test lint typecheck format build clean install-ubuntu install-macos + +help: ## Показать доступные цели + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-12s\033[0m %s\n", $$1, $$2}' + +venv: ## Создать виртуальное окружение + $(PYTHON) -m venv $(VENV) + +install: venv ## Установить проект в режиме разработки + $(PIP) install --upgrade pip + $(PIP) install -e ".[dev]" + +run: ## Запустить TUI-приложение + $(PY) -m selectel_ml_tui run + +test: ## Запустить тесты + $(PY) -m pytest -v --cov=selectel_ml_tui --cov-report=term-missing + +lint: ## Проверить стиль кода (ruff) + $(VENV)/bin/ruff check . + +typecheck: ## Проверить типы (mypy) + $(VENV)/bin/mypy src + +format: ## Форматировать код (ruff format) + $(VENV)/bin/ruff format . + +build: ## Собрать однофайловый исполняемый файл (PyInstaller) + $(PIP) install pyinstaller + $(PY) -m PyInstaller --noconfirm --clean --onefile --console \ + --name selectel-ml-tui \ + --collect-all textual \ + --paths src \ + src/selectel_ml_tui/__main__.py + +install-ubuntu: ## Установить на Ubuntu (apt) + ./scripts/install_ubuntu.sh + +install-macos: ## Установить на macOS (Homebrew) + ./scripts/install_macos.sh + +clean: ## Удалить артефакты и виртуальное окружение + rm -rf $(VENV) .pytest_cache .mypy_cache .ruff_cache .coverage htmlcov build dist *.egg-info