code-review-agent/MASTER_TOKEN_FEATURE.md
Primakov Alexandr Alexandrovich 09cdd06307 init
2025-10-12 23:15:09 +03:00

7.8 KiB
Raw Permalink Blame History

🔑 Мастер токены для Git платформ

📋 Описание

Теперь можно настроить мастер токены в .env файле. Эти токены будут использоваться для всех репозиториев, где не указан собственный API токен.


⚙️ Как настроить

1. Добавьте в .env

# Master Git Tokens (optional)
MASTER_GITEA_TOKEN=your_gitea_token_here
MASTER_GITHUB_TOKEN=your_github_token_here
MASTER_BITBUCKET_TOKEN=your_bitbucket_token_here

2. Перезапустите backend

cd backend
./start.bat  # или ./start.sh на Linux/Mac

🎯 Как работает

Логика выбора токена:

  1. Если у репозитория ЕСТЬ свой токен → используется токен репозитория
  2. Если у репозитория НЕТ токена → используется мастер токен из .env
  3. Если и мастер токен не настроен → ошибка

Приоритет:

Токен репозитория > Мастер токен > Ошибка

🔍 Примеры использования

Вариант 1: Один токен для всех

Сценарий: Все ваши проекты находятся в одной Gitea инстанции

.env:

MASTER_GITEA_TOKEN=abc123xyz789

Создание репозитория (без токена):

POST /api/repositories
{
  "name": "my-project",
  "platform": "GITEA",
  "url": "https://git.example.com/user/my-project"
  // api_token НЕ указан
}

Будет использован MASTER_GITEA_TOKEN


Вариант 2: Разные токены для разных проектов

Сценарий: У некоторых проектов особые требования к доступу

.env:

MASTER_GITEA_TOKEN=default_token_123

Репозиторий 1 (использует мастер токен):

{
  "name": "project-a",
  "platform": "GITEA",
  "url": "https://git.example.com/user/project-a"
  // api_token НЕ указан → использует MASTER_GITEA_TOKEN
}

Репозиторий 2 (свой токен):

{
  "name": "project-b",
  "platform": "GITEA",
  "url": "https://git.example.com/user/project-b",
  "api_token": "special_token_456"  // Указан свой токен
}

project-a использует мастер токен project-b использует свой токен


Вариант 3: Несколько платформ

.env:

MASTER_GITEA_TOKEN=gitea_token_123
MASTER_GITHUB_TOKEN=github_token_456
MASTER_BITBUCKET_TOKEN=bitbucket_token_789

Репозитории:

// Gitea - использует MASTER_GITEA_TOKEN
{
  "platform": "GITEA",
  "url": "https://git.example.com/user/repo1"
}

// GitHub - использует MASTER_GITHUB_TOKEN
{
  "platform": "GITHUB",
  "url": "https://github.com/user/repo2"
}

// Bitbucket - использует MASTER_BITBUCKET_TOKEN
{
  "platform": "BITBUCKET",
  "url": "https://bitbucket.org/user/repo3"
}

🔒 Безопасность

⚠️ Важно:

  • Мастер токены НЕ шифруются в .env (они должны быть читаемыми для приложения)
  • Токены репозиториев шифруются перед сохранением в БД
  • НЕ коммитьте .env файл в Git!
  • Используйте .env.example как шаблон

Права токенов:

Убедитесь что токены имеют необходимые права:

Для Gitea/GitHub/Bitbucket:

  • Чтение репозитория
  • Чтение PR
  • Создание комментариев

📊 Логирование

При запуске ревью вы увидите какой токен используется:

📋 ИНФОРМАЦИЯ О PR
...
🔑 Используется мастер gitea токен

или

🔑 Используется проектный токен

🎨 Изменения в UI

Форма создания репозитория:

Было:

API Token: [обязательное поле]

Стало:

API Token: [необязательное поле]
Подсказка: Оставьте пустым чтобы использовать мастер токен

📝 Примеры из логов

С мастер токеном:

📤 Публикация ревью в Gitea PR #5
   Комментариев: 4
   🔑 Используется мастер gitea токен
   ✅ Комментарий опубликован!

С проектным токеном:

📤 Публикация ревью в Gitea PR #5
   Комментариев: 4
   🔑 Используется проектный токен
   ✅ Комментарий опубликован!

Ошибка (токен не настроен):

❌ ERROR: API токен не указан для репозитория my-project
и мастер токен для gitea не настроен в .env (MASTER_GITEA_TOKEN)

🔧 Миграция базы данных

Поле api_token в таблице repositories теперь nullable:

Старая схема:

api_token VARCHAR NOT NULL

Новая схема:

api_token VARCHAR NULL

⚠️ Если у вас уже есть репозитории:

  • Они продолжат работать со своими токенами
  • Новые репозитории можно создавать без токена

🧪 Как протестировать

1. Настройте мастер токен в .env

MASTER_GITEA_TOKEN=your_token_here

2. Создайте репозиторий БЕЗ токена

curl -X POST http://localhost:8000/api/repositories \
  -H "Content-Type: application/json" \
  -d '{
    "name": "test-repo",
    "platform": "GITEA",
    "url": "https://git.example.com/user/test-repo"
  }'

3. Запустите ревью

Кнопка "🔍 Проверить сейчас"

4. Проверьте логи

Должно быть: 🔑 Используется мастер gitea токен


Преимущества

  1. Удобство - не нужно указывать токен для каждого репозитория
  2. Гибкость - можно переопределить токен для конкретного репозитория
  3. Безопасность - проектные токены все еще шифруются
  4. Масштабируемость - легко добавлять много репозиториев

📁 Измененные файлы

  • backend/app/config.py - добавлены настройки мастер токенов
  • backend/app/models/repository.py - api_token теперь nullable
  • backend/app/schemas/repository.py - api_token опциональный
  • backend/app/api/repositories.py - логика выбора токена
  • backend/app/agents/reviewer.py - логика выбора токена
  • backend/.env.example - пример конфигурации

🎉 Готово!

Теперь вы можете:

  • Использовать один токен для всех репозиториев
  • Переопределять токен для конкретных репозиториев
  • Легко масштабировать систему

Попробуйте! 🚀