Git Flow и правила деплоя
Этот документ описывает стратегию ветвления и процесс деплоя для бэкенда Gifty.
1. Структура веток
| Ветка | Цель | Окружение | Стабильность |
|---|---|---|---|
main |
Production код. Содержит только выпущенные версии. | Production | Наивысшая (Locked) |
develop |
Ветка интеграции фич. | Staging / Test | Стабильная |
feature/* |
Новые фичи или задачи (например, feature/auth-yandex). |
Local / Dev | Экспериментальная |
research/* |
ML эксперименты и исследования данных (например, research/scoring-v2). |
Kaggle / Local | Экспериментальная |
hotfix/* |
Критические исправления для production. | Production | Стабильная |
2. Правила рабочего процесса (Workflow)
Разработка фич
- Создайте ветку от
develop:git checkout -b feature/my-feature - Работайте и коммитьте локально.
- Откройте Pull Request (PR) в
develop. - После код-ревью и успешного прохождения CI, влейте (merge) в
develop.
Исследовательская / ML работа
- Создайте ветку от
developилиmain:git checkout -b research/cool-new-vlm - Используйте эту ветку для Jupyter ноутбуков и экспериментальной логики.
- Когда исследование завершено, перенесите результаты в ветку
feature/или влейте через PR, если код готов к продакшену.
Релиз в Production
- Когда
developготов к релизу, создайте PR изdevelopвmain. - Создайте тег релиза:
git tag -a v1.x.x -m "Описание релиза" - Пушните теги:
git push origin --tags
3. Миграции базы данных (Alembic)
- НИКОГДА не редактируйте существующие файлы миграций в
alembic/versions. - Всегда генерируйте новые миграции:
alembic revision --autogenerate -m "описание" - Миграции автоматически применяются в production во время запуска Docker через
scripts/start.sh. - Тестируйте миграции на локальной БД перед слиянием в
develop.
4. Переменные окружения
Секретные данные НИКОГДА не должны попадать в репозиторий. Используйте переменные окружения на сервере:
- DATABASE_URL: Строка подключения к базе данных Production.
- REDIS_URL: URL Redis для Production.
- INTERNAL_API_TOKEN: Токен для межсервисного взаимодействия.
- SECRET_KEY: Длинная случайная строка для JWT/безопасности.
- ENV: Установите в prod для серверов production.
- DEBUG: Установите в false в production.
- CORS_ORIGINS: Список разрешенных источников для фронтенда (через запятую).
5. Тестирование
Качество кода в Gifty обеспечивается через pytest. Тесты запускаются автоматически перед каждым деплоем.
Запуск тестов локально
# Установка зависимостей для тестов
pip install pytest pytest-asyncio pytest-mock pyyaml
# Запуск всех доступных тестов
pytest
Управление составом тестов (tests_config.yaml)
В корне проекта находится файл tests_config.yaml, который позволяет гибко включать и отключать группы тестов без изменения кода:
test_groups:
recommendations: true # Тесты алгоритмов подбора
routes: true # Тесты API эндпоинтов
ai_intelligence: false # Тяжелые тесты AI (по умолчанию выключены)
Зачем это нужно:
- Скорость: В CI/CD на
developможно отключать тяжелые/медленные тесты. - Экономия: Тесты, требующие платных API (например, OpenAI/Amnesia), можно включать только вручную перед релизом.
Динамический пропуск (Skipping)
Если группа тестов отключена в конфиге, pytest пометит их как SKIPPED. Это нормально и не ломает пайплайн.