Перейти к основному содержимому

Интеграция с SourceCraft

Подключите SourceCraft с явными метаданными репозитория. Проверьте состояние импорта, обработку вебхуков и публикацию результатов ревью.

Интеграции

Подключите известный репозиторий 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-обработки.

Справка и диагностика