Подключайте 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