auto-sync: 2026-05-21 16:10:01
This commit is contained in:
47
tasks/multi-agent/reports/dev-2026-05-21-webhooks.md
Normal file
47
tasks/multi-agent/reports/dev-2026-05-21-webhooks.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# Dev Report: Настройка Webhooks (Plane + Gitea → Orchestrator)
|
||||
Дата: 2026-05-21
|
||||
Статус: DONE
|
||||
|
||||
## Задача
|
||||
Настроить webhooks из Plane и Gitea в Orchestrator с HMAC-верификацией подписи.
|
||||
|
||||
## Сделано
|
||||
- [x] Task 1: Создан webhook в Gitea через API (id=2, events: push/pull_request/status)
|
||||
- [x] Task 2: Создан webhook в Plane через прямую вставку в PostgreSQL (Plane CE не экспортирует webhook API через /api/v1/)
|
||||
- [x] Task 3: Добавлена HMAC-SHA256 верификация в оба handler'а (gitea.py, plane.py)
|
||||
- [x] Task 4: Пересобран Orchestrator, протестирован end-to-end (push → event в БД)
|
||||
- [x] Task 5: Создана документация docs/SETUP_WEBHOOKS.md
|
||||
|
||||
## Изменённые файлы
|
||||
- `/home/slin/repos/orchestrator/src/webhooks/gitea.py` — добавлена verify_gitea_signature(), HTTPException на 401
|
||||
- `/home/slin/repos/orchestrator/src/webhooks/plane.py` — добавлена verify_plane_signature(), HTTPException на 401
|
||||
- `/home/slin/repos/orchestrator/.env` — заполнены ORCH_GITEA_WEBHOOK_SECRET и ORCH_PLANE_WEBHOOK_SECRET
|
||||
- `/home/slin/repos/orchestrator/docs/SETUP_WEBHOOKS.md` — новый файл, полная документация
|
||||
|
||||
## Результат
|
||||
|
||||
### Gitea webhook
|
||||
- Webhook создан: URL `https://openclaw.mva154.duckdns.org/orchestrator/webhook/gitea`
|
||||
- Secret: `fc122bd5cba8740c90f1d6bd64f07d3c2593d6ca`
|
||||
- Push в enduro-trails → event записывается в БД (проверено: event id=18, source=gitea, type=push)
|
||||
|
||||
### Plane webhook
|
||||
- Webhook создан в БД: id `93f0c342-a614-4248-9d0f-c107276f5620`
|
||||
- URL: `https://openclaw.mva154.duckdns.org/orchestrator/webhook/plane`
|
||||
- Secret: `e7d95ee9114155d5ee55a95e23ffff7c89d38b16`
|
||||
|
||||
### Signature verification
|
||||
- Запрос без подписи → 401 ✓
|
||||
- Запрос с неверной подписью → 401 ✓
|
||||
- Запрос с правильной подписью → 200 ✓
|
||||
- Если secret пустой в .env → верификация пропускается (backward compatible)
|
||||
|
||||
## Проблемы и решения
|
||||
1. **Plane API не поддерживает webhook management через /api/v1/** — решено прямой вставкой в PostgreSQL (пароль: plane)
|
||||
2. **Git push rejected** на тестовой ветке — решено через fetch + reset --hard перед тестом
|
||||
3. **Plane webhook signature header** — использован `X-Plane-Signature` (нужно проверить при реальном событии из Plane, может отличаться)
|
||||
|
||||
## Заметки
|
||||
- Plane CE (stable) хранит webhooks в таблице `webhooks`, workspace_id связан через `workspaces.slug='ag_proj'`
|
||||
- Gitea отправляет подпись в header `X-Gitea-Signature` как hex digest (без префикса sha256=)
|
||||
- Config уже содержал поля `gitea_webhook_secret` и `plane_webhook_secret` с env_prefix `ORCH_`
|
||||
Reference in New Issue
Block a user