From 8e56415e6875b435299b237ee243b4253e228f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Mon, 3 Nov 2025 14:22:00 +0300 Subject: [PATCH] chore: Add development tooling and automation Makefile (20+ commands): Development Docker Commands: - make build: Build Docker image - make up: Start containers - make down: Stop containers - make logs: Show logs - make shell: Open bot shell - make ps: Show container status Production Docker Commands: - make prod-build: Build and publish to registry - make prod-up: Deploy production stack - make prod-down: Stop production - make prod-logs: Production logs - make prod-ps: Production status - make prod-restart: Restart services - make prod-pull: Update images - make prod-backup: Backup to /var/backups Development Commands: - make venv: Create virtual environment - make install: Install dependencies - make run: Run bot locally - make test: Run tests - make lint: Run linter - make clean: Clean cache and temp files - make backup: Backup data directory Utility: - make help: Show all commands with descriptions --- Makefile | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..74a3ad2 --- /dev/null +++ b/Makefile @@ -0,0 +1,176 @@ +.PHONY: help build up down restart logs shell clean test lint + +# По умолчанию показываем help +help: + @echo "🤖 BUH Bot - Makefile команды:" + @echo "" + @echo "Development Docker:" + @echo " make build - Собрать Docker образ" + @echo " make up - Запустить бота (dev)" + @echo " make down - Остановить бота" + @echo " make restart - Перезапустить бота" + @echo " make logs - Показать логи (Ctrl+C для выхода)" + @echo " make shell - Войти в контейнер" + @echo " make ps - Статус контейнера" + @echo "" + @echo "Production Docker:" + @echo " make prod-build - Собрать и опубликовать образ в registry" + @echo " make prod-up - Запустить production stack" + @echo " make prod-down - Остановить production stack" + @echo " make prod-logs - Логи production" + @echo " make prod-ps - Статус production" + @echo "" + @echo "Разработка:" + @echo " make test - Запустить тесты" + @echo " make lint - Проверить код (flake8)" + @echo " make clean - Очистить временные файлы" + @echo " make backup - Создать backup данных" + @echo "" + @echo "Локальная разработка:" + @echo " make venv - Создать виртуальное окружение" + @echo " make install - Установить зависимости" + @echo " make run - Запустить бота локально" + +# Docker команды +build: + @echo "🔨 Сборка Docker образа..." + docker-compose build --no-cache + +up: + @echo "🚀 Запуск бота..." + @mkdir -p data logs temp_documents + docker-compose up -d + @echo "✅ Бот запущен!" + @echo "📝 Логи: make logs" + +down: + @echo "🛑 Остановка бота..." + docker-compose down + @echo "✅ Бот остановлен" + +restart: + @echo "🔄 Перезапуск бота..." + docker-compose restart + @echo "✅ Бот перезапущен" + +logs: + @echo "📝 Логи бота (Ctrl+C для выхода):" + docker-compose logs -f + +shell: + @echo "🐚 Вход в контейнер..." + docker-compose exec buh_bot bash + +ps: + @echo "📊 Статус контейнера:" + docker-compose ps + +# Разработка +test: + @echo "🧪 Запуск тестов..." + python -m pytest tests/ -v + +lint: + @echo "🔍 Проверка кода..." + flake8 bot.py modules/ --max-line-length=79 + +clean: + @echo "🧹 Очистка временных файлов..." + find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true + find . -type f -name "*.pyc" -delete 2>/dev/null || true + find . -type f -name "*.pyo" -delete 2>/dev/null || true + find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true + rm -rf .pytest_cache 2>/dev/null || true + rm -rf htmlcov 2>/dev/null || true + rm -rf temp_documents/* 2>/dev/null || true + @echo "✅ Очистка завершена" + +backup: + @echo "💾 Создание backup..." + @mkdir -p backups + tar -czf backups/backup-$$(date +%Y%m%d-%H%M%S).tar.gz data/ logs/ + @echo "✅ Backup создан в backups/" + +# Локальная разработка +venv: + @echo "🐍 Создание виртуального окружения..." + python3 -m venv venv + @echo "✅ Виртуальное окружение создано" + @echo "Активируйте: source venv/bin/activate" + +install: + @echo "📦 Установка зависимостей..." + pip install -r requirements.txt + @echo "✅ Зависимости установлены" + +run: + @echo "🚀 Запуск бота локально..." + python bot.py + +# Дополнительные команды +update: + @echo "🔄 Обновление бота..." + git pull + docker-compose build + docker-compose up -d + @echo "✅ Бот обновлён и перезапущен" + +stats: + @echo "📊 Статистика использования ресурсов:" + docker stats buh_bot --no-stream + +check-env: + @echo "🔍 Проверка .env файла..." + @if [ ! -f .env ]; then \ + echo "❌ Файл .env не найден!"; \ + echo "Создайте: cp .env.example .env"; \ + exit 1; \ + fi + @if ! grep -q "TELEGRAM_BOT_TOKEN=.*[^_here]" .env; then \ + echo "⚠️ TELEGRAM_BOT_TOKEN не настроен!"; \ + else \ + echo "✅ .env настроен"; \ + fi + +# Production команды +prod-build: + @echo "🔨 Сборка и публикация production образа..." + @chmod +x build-image.sh + ./build-image.sh + +prod-up: + @echo "🚀 Запуск production stack..." + @if [ ! -f .env.prod ]; then \ + echo "❌ Файл .env.prod не найден!"; \ + echo "Создайте: cp .env.prod.example .env.prod"; \ + exit 1; \ + fi + @chmod +x deploy-prod.sh + ./deploy-prod.sh + +prod-down: + @echo "🛑 Остановка production stack..." + docker-compose -f docker-compose.prod.yml --env-file .env.prod down + +prod-logs: + @echo "📝 Логи production (Ctrl+C для выхода):" + docker-compose -f docker-compose.prod.yml --env-file .env.prod logs -f + +prod-ps: + @echo "📊 Статус production:" + docker-compose -f docker-compose.prod.yml --env-file .env.prod ps + +prod-restart: + @echo "🔄 Перезапуск production..." + docker-compose -f docker-compose.prod.yml --env-file .env.prod restart + +prod-pull: + @echo "📥 Обновление образов..." + docker-compose -f docker-compose.prod.yml --env-file .env.prod pull + +prod-backup: + @echo "💾 Создание production backup..." + @mkdir -p /var/backups/buh_bot + sudo tar -czf /var/backups/buh_bot/backup-$$(date +%Y%m%d-%H%M%S).tar.gz \ + /var/lib/buh_bot/data /var/log/buh_bot + @echo "✅ Backup создан в /var/backups/buh_bot/"