feat: improve CI/CD workflows and code quality checks
- ci.yml: fix workflow_dispatch (was missing options), add pull_request trigger - deploy.yml: add dry_run option for safe testing deployments - Makefile: improve code quality targets to include bots subdirectories - docker-compose.yml: clean up telegram-bot env vars (use env_file) Made-with: Cursor
This commit is contained in:
69
Makefile
69
Makefile
@@ -346,58 +346,83 @@ auth-list: ## Показать список пользователей мони
|
||||
# ========================================
|
||||
# Code Quality & Formatting
|
||||
# ========================================
|
||||
# Явный список .py файлов (find не зависит от .gitignore). Black при обходе директорий
|
||||
# учитывает .gitignore, поэтому передаём файлы явно, чтобы проверять и bots/.
|
||||
PY_FIND_PATHS := . bots/telegram-helper-bot bots/AnonBot
|
||||
PY_FIND_EXCLUDE := -not -path '*/.venv/*' -not -path '*/venv/*' -not -path '*/__pycache__/*' -not -path '*/.git/*'
|
||||
|
||||
format-check: ## Проверить форматирование кода (Black)
|
||||
@echo "🔍 Checking code formatting with Black..."
|
||||
@if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m black --check . || (echo "❌ Code formatting issues found. Run 'make format' to fix." && exit 1); \
|
||||
@PY_FILES=$$(find $(PY_FIND_PATHS) -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null | sort -u); \
|
||||
if [ -z "$$PY_FILES" ]; then \
|
||||
PY_FILES=$$(find . -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null); \
|
||||
fi; \
|
||||
echo " Files: $$(echo "$$PY_FILES" | wc -l | tr -d ' ') .py files"; \
|
||||
if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m black --check $$PY_FILES || (echo "❌ Code formatting issues found. Run 'make format' to fix." && exit 1); \
|
||||
else \
|
||||
python3 -m black --check . || (echo "❌ Code formatting issues found. Run 'make format' to fix." && exit 1); \
|
||||
python3 -m black --check $$PY_FILES || (echo "❌ Code formatting issues found. Run 'make format' to fix." && exit 1); \
|
||||
fi
|
||||
@echo "✅ Code formatting is correct!"
|
||||
|
||||
format: ## Автоматически исправить форматирование кода (Black)
|
||||
@echo "🎨 Formatting code with Black..."
|
||||
@if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m black .; \
|
||||
@PY_FILES=$$(find $(PY_FIND_PATHS) -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null | sort -u); \
|
||||
if [ -z "$$PY_FILES" ]; then \
|
||||
PY_FILES=$$(find . -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null); \
|
||||
fi; \
|
||||
echo " Files: $$(echo "$$PY_FILES" | wc -l | tr -d ' ') .py files"; \
|
||||
if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m black $$PY_FILES; \
|
||||
else \
|
||||
python3 -m black .; \
|
||||
python3 -m black $$PY_FILES; \
|
||||
fi
|
||||
@echo "✅ Code formatted!"
|
||||
|
||||
format-diff: ## Показать что будет изменено Black (без применения)
|
||||
@echo "📋 Showing Black diff (no changes applied)..."
|
||||
@if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m black --diff .; \
|
||||
@PY_FILES=$$(find $(PY_FIND_PATHS) -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null | sort -u); \
|
||||
if [ -z "$$PY_FILES" ]; then PY_FILES=$$(find . -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null); fi; \
|
||||
if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m black --diff $$PY_FILES; \
|
||||
else \
|
||||
python3 -m black --diff .; \
|
||||
python3 -m black --diff $$PY_FILES; \
|
||||
fi
|
||||
|
||||
import-check: ## Проверить сортировку импортов (isort)
|
||||
import-check: ## Проверить сортировку импортов (isort, профиль black)
|
||||
@echo "🔍 Checking import sorting with isort..."
|
||||
@if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m isort --check-only . || (echo "❌ Import sorting issues found. Run 'make import-fix' to fix." && exit 1); \
|
||||
@PY_FILES=$$(find $(PY_FIND_PATHS) -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null | sort -u); \
|
||||
if [ -z "$$PY_FILES" ]; then PY_FILES=$$(find . -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null); fi; \
|
||||
echo " Files: $$(echo "$$PY_FILES" | wc -l | tr -d ' ') .py files"; \
|
||||
if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m isort --profile black --check-only $$PY_FILES || (echo "❌ Import sorting issues found. Run 'make import-fix' to fix." && exit 1); \
|
||||
else \
|
||||
python3 -m isort --check-only . || (echo "❌ Import sorting issues found. Run 'make import-fix' to fix." && exit 1); \
|
||||
python3 -m isort --profile black --check-only $$PY_FILES || (echo "❌ Import sorting issues found. Run 'make import-fix' to fix." && exit 1); \
|
||||
fi
|
||||
@echo "✅ Import sorting is correct!"
|
||||
|
||||
import-fix: ## Автоматически исправить сортировку импортов (isort)
|
||||
import-fix: ## Автоматически исправить сортировку импортов (isort, профиль black)
|
||||
@echo "📦 Fixing import sorting with isort..."
|
||||
@if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m isort .; \
|
||||
@PY_FILES=$$(find $(PY_FIND_PATHS) -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null | sort -u); \
|
||||
if [ -z "$$PY_FILES" ]; then PY_FILES=$$(find . -name "*.py" $(PY_FIND_EXCLUDE) 2>/dev/null); fi; \
|
||||
if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m isort --profile black $$PY_FILES; \
|
||||
else \
|
||||
python3 -m isort .; \
|
||||
python3 -m isort --profile black $$PY_FILES; \
|
||||
fi
|
||||
@echo "✅ Imports sorted!"
|
||||
|
||||
lint-check: ## Проверить код линтером (flake8) - только критические ошибки
|
||||
@echo "🔍 Running flake8 linter (critical errors only)..."
|
||||
@if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=".venv,venv,__pycache__,.git,*.pyc" || true; \
|
||||
else \
|
||||
python3 -m flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=".venv,venv,__pycache__,.git,*.pyc" || true; \
|
||||
fi
|
||||
@for dir in . bots/telegram-helper-bot bots/AnonBot; do \
|
||||
if [ -d "$$dir" ]; then \
|
||||
if [ -f .venv/bin/python ]; then \
|
||||
.venv/bin/python -m flake8 $$dir --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=".venv,venv,__pycache__,.git,*.pyc" 2>/dev/null || true; \
|
||||
else \
|
||||
python3 -m flake8 $$dir --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=".venv,venv,__pycache__,.git,*.pyc" 2>/dev/null || true; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@echo "✅ Linting check completed (non-critical warnings in dependencies ignored)!"
|
||||
|
||||
code-quality: format-check import-check lint-check ## Проверить качество кода (все проверки)
|
||||
|
||||
Reference in New Issue
Block a user