29 lines
1003 B
Markdown
29 lines
1003 B
Markdown
|
|
# Task ID: 151
|
||
|
|
|
||
|
|
**Title:** Git webhook receiver for post-merge failure
|
||
|
|
|
||
|
|
**Status:** pending
|
||
|
|
|
||
|
|
**Dependencies:** 130, 148
|
||
|
|
|
||
|
|
**Priority:** medium
|
||
|
|
|
||
|
|
**Description:** Create webhook endpoint that reopens tasks when post-merge CI fails
|
||
|
|
|
||
|
|
**Details:**
|
||
|
|
|
||
|
|
Create src/mcpd/src/routes/webhook.routes.ts:
|
||
|
|
1. POST /api/v1/webhooks/git/:provider - receive webhook payloads
|
||
|
|
2. Validate webhook signature using provider-specific method (Gitea uses HMAC-SHA256 with secret)
|
||
|
|
3. Parse payload to identify: repo, commit SHA, status (success/failure/pending)
|
||
|
|
4. If status is failure for a merged commit:
|
||
|
|
- Find Task with that headCommit and state=merged
|
||
|
|
- Call taskService.reopenOnPostMergeFailure(taskId)
|
||
|
|
- This transitions merged→reopened and creates TaskEvent
|
||
|
|
5. Register route in main.ts
|
||
|
|
6. Webhook secret stored in CodeRepo's credential secret
|
||
|
|
|
||
|
|
**Test Strategy:**
|
||
|
|
|
||
|
|
Unit tests: test signature validation, test payload parsing, test reopen triggered on failure status. Integration: simulate Gitea webhook payload.
|