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

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

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

Интеграции

Подключайте SourceCraft, когда координаты репозитория известны, а CodeGraph должен обрабатывать push и merge request через вебхуки. В отличие от остальных провайдеров, текущий адаптер SourceCraft намеренно использует fallback-нормализацию и не выполняет обнаружение через API провайдера.

Поддерживаемый контракт

Поддерживаемый контракт
Возможность Текущая поддержка
Метаданные репозитория через API провайдера Нет; явная fallback-нормализация
Получение HEAD ветки при подключении Нет
Список репозиториев пространства имён Нет
Входящий вебхук push и merge request Да
Публикация комментария ревью Да, через общее задание снимка ревью

Контракт задан в src/project_import/repository_suite/repository_provider_adapters.py. Если значений по умолчанию недостаточно, явно передайте имя репозитория, clone URL, ветку или внешний идентификатор.

Подключение и импорт

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
python -m src.cli repos status

Не запускайте массовый импорт пространства имён: адаптер не получает такой список из SourceCraft. Для нестандартного адреса добавьте --clone-url, для стабильного идентификатора провайдера — --external-id. Приватный доступ и публикация ревью требуют токена из защищённого канала секретов заказчика.

Настройка вебхука

Отправляйте push и merge request на адрес:

POST /api/v1/webhooks/sourcecraft

Задайте SOURCECRAFT_WEBHOOK_SECRET в CodeGraph и настройте у провайдера X-SourceCraft-Signature. Если передан X-SourceCraft-Timestamp, CodeGraph проверяет его возраст по настроенному окну защиты от повтора. Закройте endpoint TLS и правилами ingress пилота.

Ответ 202 Accepted сообщает о фоновой постановке в очередь. Принятое, дедуплицированное и пропущенное события — разные результаты. Завершение ревью и обновление CPG подтверждаются статусом по job ID и статусом репозитория.

Публикация ревью и статус

Общие привязки и снимки ревью доступны по путям:

/api/v1/integrations/repositories
POST /api/v1/integrations/repositories/review-snapshots/{snapshot_id}/rerun

Устанавливайте publish_review, только когда комментарий нужно отправить в целевой merge request. Публикация использует токен привязки и записывает собственные status, reason, category и error. Проверьте их после задания: публикация подтверждается статусом published.

Авторизованному оператору runtime доступен маршрут:

GET /api/v1/admin/runtime/webhooks/status/{project_id}

Восстановление и безопасность

  • При неверных fallback-координатах архивируйте привязку и создайте корректный явный импорт; не считайте обнаружение провайдера успешным.
  • Повторяйте только найденное неуспешное задание синхронизации или ревью.
  • Не записывайте токены, секреты, подписи и timestamp вебхука в логи.
  • Не отключайте TLS; для частного CA используйте --ca-bundle-path.
  • Считайте содержимое merge request недоверенным до анализа и LLM-обработки.

Источник истины

  • Адаптер провайдера: src/project_import/repository_suite/repository_provider_adapters.py
  • Клиент SourceCraft: src/api/services/repo_sync_services/sourcecraft_api.py
  • Публикация ревью: src/api/services/review_services/review_snapshot_publication.py
  • Текущие маршруты: REST API