Перейти к содержанию

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)

Разработка фич

  1. Создайте ветку от develop: git checkout -b feature/my-feature
  2. Работайте и коммитьте локально.
  3. Откройте Pull Request (PR) в develop.
  4. После код-ревью и успешного прохождения CI, влейте (merge) в develop.

Исследовательская / ML работа

  1. Создайте ветку от develop или main: git checkout -b research/cool-new-vlm
  2. Используйте эту ветку для Jupyter ноутбуков и экспериментальной логики.
  3. Когда исследование завершено, перенесите результаты в ветку feature/ или влейте через PR, если код готов к продакшену.

Релиз в Production

  1. Когда develop готов к релизу, создайте PR из develop в main.
  2. Создайте тег релиза: git tag -a v1.x.x -m "Описание релиза"
  3. Пушните теги: 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 (по умолчанию выключены)

Зачем это нужно:

  1. Скорость: В CI/CD на develop можно отключать тяжелые/медленные тесты.
  2. Экономия: Тесты, требующие платных API (например, OpenAI/Amnesia), можно включать только вручную перед релизом.

Динамический пропуск (Skipping)

Если группа тестов отключена в конфиге, pytest пометит их как SKIPPED. Это нормально и не ломает пайплайн.