Accept review_requested on pull_request webhook events.
Gitea sends review requests as pull_request/review_requested, not only pull_request_review_request. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -9,7 +9,7 @@ This bot is designed to run once for many repositories in `Bram/*` instead of du
|
|||||||
- Listens to Gitea webhook events.
|
- Listens to Gitea webhook events.
|
||||||
- Triggers on:
|
- Triggers on:
|
||||||
- `pull_request` with action `opened`
|
- `pull_request` with action `opened`
|
||||||
- `pull_request_review_request` with action `review_requested` when requested reviewer is the bot user
|
- `pull_request` or `pull_request_review_request` with action `review_requested` when requested reviewer is the bot user
|
||||||
- Loads PR metadata and changed files from Gitea.
|
- Loads PR metadata and changed files from Gitea.
|
||||||
- Builds a review prompt (including optional repo-specific rule files).
|
- Builds a review prompt (including optional repo-specific rule files).
|
||||||
- Calls Cursor Cloud Agent (`Agent.prompt`) for structured review output.
|
- Calls Cursor Cloud Agent (`Agent.prompt`) for structured review output.
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
- Processes only:
|
- Processes only:
|
||||||
- `pull_request` with action `opened`
|
- `pull_request` with action `opened`
|
||||||
- `pull_request_review_request` with action `review_requested` and reviewer matching bot login
|
- `pull_request` or `pull_request_review_request` with action `review_requested` and reviewer matching bot login
|
||||||
- Idempotency key: `{owner}/{repo}#{pr_number}#{head_sha}`
|
- Idempotency key: `{owner}/{repo}#{pr_number}#{head_sha}`
|
||||||
- Removes bot from reviewers after a successful review post
|
- Removes bot from reviewers after a successful review post
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { RoutedEvent, PullRequestWebhookPayload } from "../types/events.js";
|
import { RoutedEvent, PullRequestWebhookPayload } from "../types/events.js";
|
||||||
|
|
||||||
|
const REVIEW_REQUEST_EVENTS = new Set(["pull_request", "pull_request_review_request"]);
|
||||||
|
|
||||||
export function routeEvent(input: {
|
export function routeEvent(input: {
|
||||||
eventName: string | undefined;
|
eventName: string | undefined;
|
||||||
payload: PullRequestWebhookPayload;
|
payload: PullRequestWebhookPayload;
|
||||||
@@ -12,12 +14,23 @@ export function routeEvent(input: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
eventName === "pull_request_review_request" &&
|
eventName &&
|
||||||
|
REVIEW_REQUEST_EVENTS.has(eventName) &&
|
||||||
payload.action === "review_requested" &&
|
payload.action === "review_requested" &&
|
||||||
payload.requested_reviewer?.login === botLogin
|
isReviewRequestedForBot(payload, botLogin)
|
||||||
) {
|
) {
|
||||||
return { kind: "review_requested", payload };
|
return { kind: "review_requested", payload };
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isReviewRequestedForBot(payload: PullRequestWebhookPayload, botLogin: string): boolean {
|
||||||
|
if (payload.requested_reviewer?.login === botLogin) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (payload.pull_request.requested_reviewers ?? []).some(
|
||||||
|
(reviewer) => reviewer.login === botLogin
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user