Подключите известный репозиторий SourceCraft, чтобы CodeGraph обновлял CPG после push и готовил ревью merge request по событиям вебхука. При подключении CodeGraph формирует метаданные из заданных координат: имя репозитория, адрес клонирования, ветку и внешний идентификатор. API провайдера для обнаружения репозиториев здесь не используется.
Возможности интеграции
| Возможность | Текущая поддержка |
|---|---|
| Метаданные репозитория через API провайдера | Явно заданные координаты |
| Получение HEAD ветки при подключении | Нет |
| Список репозиториев пространства имён | Нет |
| Входящий вебхук push и merge request | Да |
| Публикация комментария ревью | Да, через общее задание снимка ревью |
При подключении укажите имя репозитория и ветку. Для нестандартного адреса клонирования или внешнего идентификатора передайте соответствующие параметры импорта.
Подключение и импорт
Выполняйте команды в PowerShell из корня исходного репозитория CodeGraph. Нужны установленное
Python-окружение проекта и настроенный сервер. Выберите существующую группу доступа:
подключение и импорт будут сохранены в ней. Замените PROJECT/REPOSITORY своим значением.
Импорт создаёт или находит проект для репозитория и выводит его имя.
Примеры используют группу default. Для другой группы добавьте --group "<имя-группы>"
во все команды. Параметр --sync-mode webhook выбирает синхронизацию по событиям
репозитория; без него импорт использует режим manual.
python -m src.cli repos connect-provider --name sourcecraft-main --provider sourcecraft --base-url https://sourcecraft.yandex.cloud --host sourcecraft.yandex.cloud
python -m src.cli repos provider-health --connection sourcecraft-main
python -m src.cli repos import --connection sourcecraft-main --repo 'PROJECT/REPOSITORY' --default-branch main --sync-mode webhook
python -m src.cli repos status
После создания подключения CLI выводит Created provider connection: sourcecraft-main.
При успешном импорте найдите строки Imported repository … into project …, Binding id:,
Mirror: и Heads: repo=… cpg=…. Сохраните идентификатор привязки для проверки заданий вебхука.
Для приватного репозитория передайте токен через параметр --token команды
connect-provider, используя значение из защищённого канала секретов вашей организации.
Не запускайте массовый импорт пространства имён: адаптер не получает такой список из SourceCraft.
Для нестандартного адреса добавьте --clone-url, для стабильного идентификатора провайдера —
--external-id. Приватный доступ и публикация ревью требуют токена из защищённого канала секретов
заказчика.
Настройка вебхука
Укажите полный HTTPS-адрес API вашего экземпляра CodeGraph с путём ниже, например https://codegraph.customer.example/api/v1/webhooks/sourcecraft. Замените домен адресом, доступным отправителю событий. Подключите события push и merge request.
POST /api/v1/webhooks/sourcecraft
Задайте SOURCECRAFT_WEBHOOK_SECRET в CodeGraph и настройте у провайдера
X-SourceCraft-Signature. CodeGraph проверяет подпись запроса.
X-SourceCraft-Timestamp — необязательный заголовок: если провайдер его передаёт,
CodeGraph проверяет возраст события по настроенному допустимому интервалу.
Защитите маршрут TLS и правилами входящего доступа.
Прочитайте тело ответа 202 Accepted, затем проверьте задание и состояние репозитория.
accepted означает, что событие принято для обработки. При skipped прочитайте причину
в detail.reason: например, репозиторий ещё не привязан (repository_not_bound),
привязка неактивна (binding_inactive) или ветка не входит в настроенную область.
Для push значение detail.ingest_status=deduplicated обозначает повторную доставку;
следите за заданием из job_id. Завершение импорта и готовность графа
проверяйте по состоянию репозитория после обработки задания.
Где проверить результат
Отправляйте запросы с авторизацией по справочнику REST API. Получите binding_id из списка доступных привязок репозиториев: GET /api/v1/integrations/repositories/bindings. Подставьте этот идентификатор в маршруты ниже. Для ревью используйте detail.snapshot_id из ответа вебхука.
| Что проверить | Запрос и результат |
|---|---|
| Синхронизация после push | GET /api/v1/integrations/repositories/bindings/{binding_id}/sync-jobs: найдите в items запись с id, равным job_id из ответа вебхука; проверьте status, commit_sha, result и error. |
| Текущая ревизия графа | GET /api/v1/integrations/repositories/bindings/{binding_id}: сравните repository_head_sha и cpg_head_sha после завершения задания. |
| Обработка PR/MR | GET /api/v1/integrations/repositories/review-snapshots/{snapshot_id}/jobs: проверьте задания сохранённого снимка ревью. |
В списках заданий проверяйте has_next. Чтобы перейти к следующей странице, увеличьте offset на возвращённый limit и повторите запрос. Сопоставляйте идентификатор задания, а не только первую запись списка.
Публикация ревью и статус
Общие привязки и снимки ревью доступны по путям:
/api/v1/integrations/repositories
POST /api/v1/integrations/repositories/review-snapshots/{snapshot_id}/rerun
Устанавливайте publish_review, только когда комментарий нужно отправить в целевой merge request.
Публикация использует токен привязки и записывает поля status, reason, category и error.
После задания проверьте статус published и сам комментарий в merge request.
Авторизованному оператору runtime доступен маршрут:
GET /api/v1/admin/runtime/webhooks/status/{project_id}
Восстановление и безопасность
- При неверных координатах архивируйте привязку и импортируйте репозиторий заново с исправленными значениями.
- Повторяйте только найденное неуспешное задание синхронизации или ревью.
- Не записывайте токены, секреты, подписи и метки времени вебхука в логи.
- Не отключайте TLS; для частного центра сертификации используйте
--ca-bundle-path. - Считайте содержимое merge request недоверенным до анализа и LLM-обработки.
Справка и диагностика
- Параметры подключения и импорта: руководство CLI.
- Авторизация, привязки и задания ревью: REST API.
- Подготовка проекта и проверка результата импорта: импорт проекта.