init
This commit is contained in:
@@ -0,0 +1,299 @@
|
||||
# 🔑 Мастер токены для Git платформ
|
||||
|
||||
## 📋 Описание
|
||||
|
||||
Теперь можно настроить **мастер токены** в `.env` файле. Эти токены будут использоваться для всех репозиториев, где **не указан** собственный API токен.
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Как настроить
|
||||
|
||||
### 1. Добавьте в `.env`
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
./start.bat # или ./start.sh на Linux/Mac
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Как работает
|
||||
|
||||
### Логика выбора токена:
|
||||
|
||||
1. **Если у репозитория ЕСТЬ свой токен** → используется токен репозитория
|
||||
2. **Если у репозитория НЕТ токена** → используется мастер токен из `.env`
|
||||
3. **Если и мастер токен не настроен** → ошибка
|
||||
|
||||
### Приоритет:
|
||||
|
||||
```
|
||||
Токен репозитория > Мастер токен > Ошибка
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Примеры использования
|
||||
|
||||
### Вариант 1: Один токен для всех
|
||||
|
||||
**Сценарий:** Все ваши проекты находятся в одной Gitea инстанции
|
||||
|
||||
**.env:**
|
||||
```bash
|
||||
MASTER_GITEA_TOKEN=abc123xyz789
|
||||
```
|
||||
|
||||
**Создание репозитория (без токена):**
|
||||
```json
|
||||
POST /api/repositories
|
||||
{
|
||||
"name": "my-project",
|
||||
"platform": "GITEA",
|
||||
"url": "https://git.example.com/user/my-project"
|
||||
// api_token НЕ указан
|
||||
}
|
||||
```
|
||||
|
||||
✅ Будет использован `MASTER_GITEA_TOKEN`
|
||||
|
||||
---
|
||||
|
||||
### Вариант 2: Разные токены для разных проектов
|
||||
|
||||
**Сценарий:** У некоторых проектов особые требования к доступу
|
||||
|
||||
**.env:**
|
||||
```bash
|
||||
MASTER_GITEA_TOKEN=default_token_123
|
||||
```
|
||||
|
||||
**Репозиторий 1 (использует мастер токен):**
|
||||
```json
|
||||
{
|
||||
"name": "project-a",
|
||||
"platform": "GITEA",
|
||||
"url": "https://git.example.com/user/project-a"
|
||||
// api_token НЕ указан → использует MASTER_GITEA_TOKEN
|
||||
}
|
||||
```
|
||||
|
||||
**Репозиторий 2 (свой токен):**
|
||||
```json
|
||||
{
|
||||
"name": "project-b",
|
||||
"platform": "GITEA",
|
||||
"url": "https://git.example.com/user/project-b",
|
||||
"api_token": "special_token_456" // Указан свой токен
|
||||
}
|
||||
```
|
||||
|
||||
✅ `project-a` использует мастер токен
|
||||
✅ `project-b` использует свой токен
|
||||
|
||||
---
|
||||
|
||||
### Вариант 3: Несколько платформ
|
||||
|
||||
**.env:**
|
||||
```bash
|
||||
MASTER_GITEA_TOKEN=gitea_token_123
|
||||
MASTER_GITHUB_TOKEN=github_token_456
|
||||
MASTER_BITBUCKET_TOKEN=bitbucket_token_789
|
||||
```
|
||||
|
||||
**Репозитории:**
|
||||
```json
|
||||
// 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**:
|
||||
|
||||
**Старая схема:**
|
||||
```sql
|
||||
api_token VARCHAR NOT NULL
|
||||
```
|
||||
|
||||
**Новая схема:**
|
||||
```sql
|
||||
api_token VARCHAR NULL
|
||||
```
|
||||
|
||||
⚠️ **Если у вас уже есть репозитории:**
|
||||
- Они продолжат работать со своими токенами
|
||||
- Новые репозитории можно создавать без токена
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Как протестировать
|
||||
|
||||
### 1. Настройте мастер токен в `.env`
|
||||
|
||||
```bash
|
||||
MASTER_GITEA_TOKEN=your_token_here
|
||||
```
|
||||
|
||||
### 2. Создайте репозиторий БЕЗ токена
|
||||
|
||||
```bash
|
||||
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` - пример конфигурации
|
||||
|
||||
---
|
||||
|
||||
## 🎉 Готово!
|
||||
|
||||
Теперь вы можете:
|
||||
- ✅ Использовать один токен для всех репозиториев
|
||||
- ✅ Переопределять токен для конкретных репозиториев
|
||||
- ✅ Легко масштабировать систему
|
||||
|
||||
**Попробуйте!** 🚀
|
||||
|
||||
Reference in New Issue
Block a user