Рефакторинг инфраструктуры и конфигурации проекта
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Successful in 1m52s
CI/CD Pipeline / Run Tests (push) Failing after 2m2s
CI/CD Pipeline / Build & Push Images (push) Has been skipped

- Перенесена структура Django-конфига в src/core и src/settings

- Унифицирована Docker-сборка и docker-compose для dev/prod

- Добавлены startup-checks (DB/Redis) и обновлены env-шаблоны

- Расширена OpenAPI-документация и ответы API

- Удалены устаревшие deploy/requirements/служебные скрипты

- Обновлены CI/CD, README и тесты
This commit is contained in:
2026-02-18 13:25:01 +01:00
parent 0f4af561de
commit d5d184537f
71 changed files with 1253 additions and 2318 deletions

196
Makefile
View File

@@ -1,149 +1,103 @@
# Makefile для удобной работы с проектом
.PHONY: help install setup-dev dev-up dev-down prod-up prod-down logs test test-cov test-fast test-parallel test-failfast lint format type-check security-check pre-commit pre-push migrate createsuperuser shell clean
.PHONY: help install dev-up dev-down test lint format migrate createsuperuser shell
COMPOSE_DEV = docker compose -f docker-compose.dev.yml
COMPOSE_PROD = docker compose -f docker-compose.prod.yml --env-file .env.prod
help:
@echo "Доступные команды:"
@echo ""
@echo "🔧 Установка и настройка:"
@echo " make install - Установка зависимостей"
@echo ""
@echo "🐳 Docker управление:"
@echo " make dev-up - Запуск разработческого окружения (Docker)"
@echo " make dev-down - Остановка разработческого окружения"
@echo " make logs - Просмотр логов (Docker)"
@echo ""
@echo "🧪 Тестирование:"
@echo " make test - Запуск тестов (по умолчанию все)"
@echo " Примеры:"
@echo " make test # Все тесты"
@echo " make test TARGET=user # Только user app"
@echo " make test TARGET=test_models # Только модели"
@echo ""
@echo "🔍 Качество кода:"
@echo " make lint - Проверка кода линтерами"
@echo " make format - Форматирование кода"
@echo " make type-check - Проверка типов"
@echo " make security-check - Проверка безопасности"
@echo " make pre-commit - Запуск pre-commit hooks"
@echo ""
@echo "🗄️ База данных:"
@echo " make migrate - Выполнение миграций Django"
@echo " make createsuperuser - Создание суперпользователя"
@echo ""
@echo "🛠️ Утилиты:"
@echo " make shell - Запуск Django shell"
@echo " make setup-dev - Настройка окружения разработки"
@echo " make clean - Очистка временных файлов"
@echo "Available commands:"
@echo " make install - Install dependencies (uv sync --dev)"
@echo " make setup-dev - Install git hooks (pre-commit + pre-push)"
@echo " make dev-up - Start local stack (dev compose)"
@echo " make dev-down - Stop local stack"
@echo " make prod-up - Start prod compose (without db/redis)"
@echo " make prod-down - Stop prod compose"
@echo " make logs - Follow logs from dev compose"
@echo " make test - Run tests (use TARGET=... to filter)"
@echo " make pre-commit - Run all pre-commit checks"
@echo " make pre-push - Run pre-push checks (tests)"
@echo " make migrate - Run Django migrations"
@echo " make createsuperuser - Create Django superuser"
@echo " make shell - Open Django shell"
@echo " make clean - Cleanup caches and artifacts"
install:
uv pip install -r requirements.txt
uv pip install -r requirements-dev.txt
uv sync --dev
setup-dev: install
./scripts/setup-precommit.sh
dev-up:
docker-compose up -d
@echo "Сервисы запущены. Приложение доступно по адресу: http://localhost:8000"
$(COMPOSE_DEV) up -d
dev-down:
docker-compose down
$(COMPOSE_DEV) down
# Универсальная команда для тестирования с поддержкой аргументов
# Использование:
# make test # Все тесты
# make test TARGET=user # Тесты user app
# make test TARGET=models # Тесты моделей
# make test TARGET=views # Тесты представлений
# make test TARGET=serializers # Тесты сериализаторов
# make test TARGET=services # Тесты сервисов
test:
@if [ "$(TARGET)" ]; then \
echo "🧪 Запуск тестов: $(TARGET)"; \
python run_tests_simple.py $(TARGET); \
else \
echo "🧪 Запуск всех тестов..."; \
python run_tests_simple.py; \
fi
prod-up:
$(COMPOSE_PROD) up -d
lint:
@echo "🔍 Проверка кода линтерами..."
ruff check src/
black --check src/
isort --check-only src/
@echo "✅ Линтинг завершен"
format:
@echo "🎨 Форматирование кода..."
black src/
isort src/
ruff check --fix src/
@echo "✅ Форматирование завершено"
migrate:
@echo "🗄️ Выполнение миграций..."
cd src && python manage.py makemigrations
cd src && python manage.py migrate
createsuperuser:
@echo "👤 Создание суперпользователя..."
cd src && python manage.py createsuperuser
shell:
@echo "🐚 Запуск Django shell..."
cd src && python manage.py shell
prod-down:
$(COMPOSE_PROD) down
logs:
@echo "📋 Просмотр логов..."
docker-compose logs -f
$(COMPOSE_DEV) logs -f
test:
@if [ "$(TARGET)" ]; then \
echo "Running tests: $(TARGET)"; \
if [ "$(TARGET)" = "user" ]; then \
./scripts/run-tests.sh ../tests/apps/user; \
elif [ "$(TARGET)" = "models" ] || [ "$(TARGET)" = "views" ] || [ "$(TARGET)" = "serializers" ] || [ "$(TARGET)" = "services" ]; then \
./scripts/run-tests.sh ../tests -k "test_$(TARGET)"; \
elif echo "$(TARGET)" | grep -q '^test_'; then \
./scripts/run-tests.sh ../tests -k "$(TARGET)"; \
else \
./scripts/run-tests.sh "$(TARGET)"; \
fi; \
else \
echo "Running full test suite"; \
./scripts/run-tests.sh; \
fi
# Дополнительные команды для тестирования
test-cov:
@echo "🧪 Запуск тестов с покрытием..."
python run_tests_simple.py --coverage
./scripts/run-tests.sh ../tests --cov=src --cov-report=term-missing --cov-report=xml --cov-report=html
test-fast:
@echo "🚀 Быстрые тесты (без медленных)..."
python run_tests_simple.py --fast
./scripts/run-tests.sh ../tests -m "not slow"
test-parallel:
@echo "⚡ Параллельный запуск тестов..."
python run_tests_simple.py --parallel=auto
./scripts/run-tests.sh ../tests -n auto || ./scripts/run-tests.sh ../tests
test-failfast:
@echo "❌ Тесты с остановкой при первой ошибке..."
python run_tests_simple.py --failfast
# Дополнительные команды для качества кода
type-check:
@echo "🔍 Проверка типов с mypy..."
mypy src/
security-check:
@echo "🔒 Проверка безопасности..."
bandit -r src/ -f json -o bandit-report.json || bandit -r src/
./scripts/run-tests.sh ../tests -x
pre-commit:
@echo "🔧 Запуск pre-commit hooks..."
pre-commit run --all-files
uv run pre-commit run --all-files
# Установка и настройка
setup-dev:
@echo "⚙️ Настройка окружения разработки..."
pre-commit install
@echo "✅ Окружение настроено"
pre-push:
uv run pre-commit run --hook-stage pre-push --all-files
lint: pre-commit
format:
uv run pre-commit run --all-files ruff-format
uv run pre-commit run --all-files ruff
type-check: pre-commit
security-check: pre-commit
migrate:
cd src && uv run python manage.py makemigrations
cd src && uv run python manage.py migrate
createsuperuser:
cd src && uv run python manage.py createsuperuser
shell:
cd src && uv run python manage.py shell
clean:
@echo "🧹 Очистка временных файлов..."
find . -type f -name "*.pyc" -delete
find . -type d -name "__pycache__" -delete
rm -rf *.log
rm -rf htmlcov/
rm -rf .coverage
rm -rf coverage.xml
rm -rf bandit-report.json
rm -rf .pytest_cache/
rm -rf .mypy_cache/
rm -rf tests/__pycache__/
rm -rf tests/apps/__pycache__/
rm -rf tests/apps/user/__pycache__/
@echo "✅ Очистка завершена"
rm -rf *.log htmlcov .coverage coverage.xml bandit-report.json
rm -rf .pytest_cache .mypy_cache .ruff_cache