Руководство по интеграции с GitVerse¶
Руководство по подключению CodeGraph к платформе GitVerse (СберТех) для автоматического анализа кода, поиска уязвимостей и отслеживания технического долга.
Содержание¶
- Обзор
- Предварительные требования
- Docker-образ
- Настройка вебхуков
- CI-конвейер
- OAuth-аутентификация
- REST API
- Развёртывание через Helm
- Устранение неполадок
- Следующие шаги
Обзор¶
GitVerse – платформа размещения git-репозиториев от СберТех (экосистема Сбера). CodeGraph интегрируется с GitVerse по трём направлениям:
- Вебхуки – автоматическое обновление графа свойств кода (CPG) при каждом коммите и анализ запросов на слияние.
- CI-конвейер – шаг в pipeline GitVerse для сканирования безопасности, рецензирования кода и генерации отчётов.
- REST API – программный доступ к рецензированию PR и генерации описаний изменений.
Обе платформы поддерживают GigaChat как поставщика LLM, что обеспечивает полностью российский стек без зависимости от зарубежных сервисов.
Предварительные требования¶
| Компонент | Требование |
|---|---|
| CodeGraph | Работающий экземпляр (Docker или локальная установка) |
| GitVerse | Учётная запись с доступом к API репозитория |
| Docker | Docker 20.10+ для запуска контейнера CodeGraph |
| Сеть | Сетевая доступность между GitVerse и экземпляром CodeGraph |
Docker-образ¶
Официальный Docker-образ CodeGraph публикуется в GitHub Container Registry:
ghcr.io/mkhlsavin/codegraph:latest
Сборка образа автоматизирована через GitHub Actions (.github/workflows/publish-ghcr.yml). Образ включает все компоненты: API-сервер, GoCPG-парсер, CLI-инструменты.
Проверка работоспособности:
docker pull ghcr.io/mkhlsavin/codegraph:latest
docker run --rm ghcr.io/mkhlsavin/codegraph:latest python -m src.cli health
Настройка вебхуков¶
Регистрация вебхука¶
Вебхук принимает события от GitVerse на конечной точке:
POST /api/v1/webhooks/gitverse
Для регистрации откройте параметры репозитория в GitVerse: Настройки репозитория –> Вебхуки –> Добавить вебхук. Укажите:
- URL:
https://<codegraph-host>/api/v1/webhooks/gitverse - Тип содержимого:
application/json - Секретный ключ: произвольная строка для подписи HMAC-SHA256
Поддерживаемые события¶
| Событие | Описание | Действие CodeGraph |
|---|---|---|
push |
Отправка коммитов | Инкрементальное обновление CPG |
pull_request |
Создание или обновление PR | Запуск анализа кода |
Тип события определяется по заголовку X-GitVerse-Event (или совместимому X-GitHub-Event), а при его отсутствии – по структуре тела запроса (pull_request или head_commit/commits).
Проверка подписи¶
GitVerse подписывает тело запроса с помощью HMAC-SHA256. Подпись передаётся в заголовке:
X-GitVerse-Signature: sha256=<hex-digest>
CodeGraph верифицирует подпись, сравнивая её с вычисленным HMAC от тела запроса и настроенного секретного ключа. При несовпадении запрос отклоняется с кодом 401.
Конфигурация вебхуков¶
Секция gitverse в файле config.yaml:
gitverse:
webhook_secret: '' # Секретный ключ HMAC-SHA256
auto_update_on_push: true # Обновлять CPG при событии push
api_url: https://gitverse.ru/api/v1
CI-конвейер¶
Шаблон конвейера¶
Готовый шаблон находится в ci/gitverse/codegraph-review.yaml. Скопируйте его в репозиторий:
mkdir -p .gitverse/workflows
cp ci/gitverse/codegraph-review.yaml .gitverse/workflows/codegraph-review.yaml
Переменные и секреты¶
| Переменная | Тип | Описание |
|---|---|---|
CODEGRAPH_URL |
Переменная | Адрес API CodeGraph, например https://codegraph.example.com |
CODEGRAPH_API_TOKEN |
Секрет | Токен аутентификации API |
GITVERSE_TOKEN |
Секрет | Токен доступа GitVerse для публикации комментариев |
PROJECT_LANGUAGE |
Переменная | Язык исходного кода (по умолчанию python) |
Этапы анализа¶
Конвейер состоит из четырёх этапов, выполняемых при каждом запросе на слияние:
- Сборка CPG (
cpg-update) – GoCPG анализирует исходный код и строит граф свойств кода в DuckDB. - Сканирование безопасности (
security-scan) – межпроцедурный анализ потоков данных по изменённому коду (diff). - Рецензирование PR (
pr-review) – оценка качества, зона поражения, рекомендации. - Отчёт (
report) – сводка результатов в артефактах задания.
Ключевой фрагмент конвейера (полная версия в ci/gitverse/codegraph-review.yaml):
jobs:
cpg-update:
name: Build CPG
runs-on: ubuntu-latest
container:
image: ghcr.io/mkhlsavin/codegraph:latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build CPG
run: |
gocpg parse --input=. --output=/tmp/cpg.duckdb \
--lang=${{ vars.PROJECT_LANGUAGE || 'python' }}
pr-review:
name: PR Review
needs: cpg-update
runs-on: ubuntu-latest
container:
image: ghcr.io/mkhlsavin/codegraph:latest
steps:
- name: Review PR
run: |
curl -sf -X POST "${CODEGRAPH_URL}/api/v1/review/gitverse" \
-H "Authorization: Bearer ${CODEGRAPH_TOKEN}" \
-H "X-GitVerse-Token: ${{ secrets.GITVERSE_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"project_id": "${{ github.repository }}", "pr_number": ${{ github.event.pull_request.number }}}' \
-o review-results.json
OAuth-аутентификация¶
CodeGraph поддерживает OAuth-авторизацию через GitVerse для единого входа (SSO).
Переменные окружения¶
| Переменная | Описание | Значение по умолчанию |
|---|---|---|
OAUTH_GITVERSE_CLIENT_ID |
Идентификатор OAuth-приложения | – |
OAUTH_GITVERSE_CLIENT_SECRET |
Секрет OAuth-приложения | – |
OAUTH_GITVERSE_SERVER_URL |
Базовый URL сервера GitVerse | https://gitverse.ru |
Процесс авторизации¶
- Пользователь переходит на конечную точку авторизации CodeGraph:
GET /api/v1/auth/oauth/gitverse/authorize
- CodeGraph перенаправляет на страницу авторизации GitVerse:
https://gitverse.ru/oauth/authorize?client_id=...&scope=read:user,user:email
- После подтверждения GitVerse возвращает код авторизации.
- CodeGraph обменивает код на токен доступа через
https://gitverse.ru/oauth/token. - Данные пользователя запрашиваются через
https://gitverse.ru/api/v1/user.
Поддержка Sber ID¶
Для организаций, использующих Sber ID в качестве поставщика удостоверений, достаточно изменить OAUTH_GITVERSE_SERVER_URL на адрес корпоративного экземпляра GitVerse, который проксирует авторизацию через Sber ID:
export OAUTH_GITVERSE_SERVER_URL="https://gitverse.company.ru"
REST API¶
Рецензирование PR¶
Конечная точка для рецензирования запроса на слияние в GitVerse:
POST /api/v1/review/gitverse
Заголовки:
| Заголовок | Описание |
|---|---|
Authorization |
Bearer <codegraph_token> |
X-GitVerse-Token |
Токен доступа GitVerse для получения diff |
Тело запроса:
{
"project_id": "owner/repo",
"pr_number": 42,
"gitverse_url": "https://gitverse.ru/api/v1",
"task_description": "Описание задачи (необязательно)",
"dod_items": ["Критерий готовности 1", "Критерий готовности 2"]
}
Пример ответа:
{
"recommendation": "REQUEST_CHANGES",
"score": 72.5,
"findings": [
{
"category": "security",
"severity": "high",
"location": {"file": "src/auth.py", "line_start": 45},
"message": "Непроверенный пользовательский ввод передаётся в SQL-запрос",
"suggested_fix": "Используйте параметризованный запрос"
}
],
"summary": "Обнаружены проблемы безопасности и архитектуры",
"processing_time_ms": 3200.0,
"request_id": "req_abc123"
}
Приём вебхуков¶
POST /api/v1/webhooks/gitverse
Принимает события push и pull_request в формате, совместимом с GitHub. Возвращает 202 Accepted – обработка выполняется асинхронно. Подробнее см. раздел Настройка вебхуков.
Генерация описания MR¶
POST /api/v1/review/summary
Принимает diff_content (обязательно), title и description (необязательно). Возвращает структурированное описание: краткое содержание изменений, список изменённых файлов и методов, зоны риска.
Развёртывание через Helm¶
Для развёртывания CodeGraph рядом с экземпляром GitVerse в инфраструктуре предприятия используется Helm-чарт с наложением параметров для GitVerse:
helm install codegraph ./deploy/helm/codegraph \
-f deploy/helm/codegraph/values-gitverse.yaml \
--set secrets.gigachatAuthKey="<ключ_GigaChat>" \
--set secrets.gitverseWebhookSecret="<секрет_вебхука>"
Файл values-gitverse.yaml настраивает:
image:
registry: ghcr.io
repository: mkhlsavin/codegraph
tag: latest
config:
llmProvider: gigachat
language: ru
gitverse:
apiUrl: https://gitverse.ru/api/v1
secrets:
gigachatAuthKey: ""
gitverseWebhookSecret: ""
При развёртывании на закрытом контуре (без доступа в интернет) замените image.registry на адрес внутреннего реестра контейнеров и настройте config.llmProvider на локальную модель.
Устранение неполадок¶
Ошибка проверки подписи вебхука¶
401 Unauthorized: Webhook signature verification failed
Причина: секретный ключ в настройках вебхука GitVerse не совпадает со значением gitverse.webhook_secret в config.yaml.
Решение: 1. Убедитесь, что секретный ключ одинаков в обоих местах. 2. Проверьте, что тело запроса передаётся без модификации (прокси-серверы не должны изменять содержимое).
Ошибка перенаправления OAuth¶
400 Bad Request: redirect_uri mismatch
Причина: URL обратного вызова, зарегистрированный в OAuth-приложении GitVerse, не совпадает с адресом экземпляра CodeGraph.
Решение:
1. В настройках OAuth-приложения GitVerse укажите URL: https://<codegraph-host>/api/v1/auth/oauth/gitverse/callback.
2. Убедитесь, что OAUTH_GITVERSE_SERVER_URL указывает на корректный адрес GitVerse.
Недостаточные права API-токена¶
403 Forbidden: insufficient scope
Причина: токен GitVerse не имеет прав на чтение содержимого репозитория или запросов на слияние.
Решение:
1. Создайте токен с правами read:repository и read:pull_request (или аналогичными).
2. Передайте токен в заголовке X-GitVerse-Token при вызове /api/v1/review/gitverse.
Конвейер не запускается¶
Причина: файл конвейера расположен не в корректном каталоге или имеет синтаксические ошибки.
Решение:
1. Убедитесь, что файл находится по пути .gitverse/workflows/codegraph-review.yaml.
2. Проверьте, что переменные CODEGRAPH_URL и CODEGRAPH_API_TOKEN заданы в настройках репозитория.
Следующие шаги¶
- Установка – Полная настройка CodeGraph
- Руководство пользователя TUI – Работа через терминальный интерфейс
- Интеграция с GigaChat – Настройка поставщика LLM
- Интеграция с Yandex AI Studio – Альтернативный поставщик LLM
- Внешний контекст – Связывание CPG с внешними системами