feat: re-trigger tester when human comments on a PR
Publish Image / publish (push) Successful in 22s
Publish Image / publish (push) Successful in 22s
PR comments fire as issue_comment webhooks in Gitea. Previously the handler only re-triggered the analyst for regular issues. Now it detects PR comments via the pull_request field and queues a test workspace using the review bot account. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
f693d56762
commit
546d2615c7
@@ -4,7 +4,9 @@ import type { TaskQueue } from "../queue.js";
|
|||||||
import type { Config } from "../config.js";
|
import type { Config } from "../config.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Issue comment created or edited → re-trigger analyst if still in analysis.
|
* Issue comment created or edited:
|
||||||
|
* - On a PR → re-trigger tester
|
||||||
|
* - On an issue still in analysis → re-trigger analyst
|
||||||
*
|
*
|
||||||
* Replaces: issue-comment-reply.json
|
* Replaces: issue-comment-reply.json
|
||||||
*/
|
*/
|
||||||
@@ -23,6 +25,29 @@ export function issueComment(config: Config, queue: TaskQueue) {
|
|||||||
return c.text("ignored: bot comment", 200);
|
return c.text("ignored: bot comment", 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const [org, repo] = event.repository.full_name.split("/");
|
||||||
|
const isPullRequest = !!event.issue.pull_request;
|
||||||
|
|
||||||
|
if (isPullRequest) {
|
||||||
|
// Comment on a PR → re-trigger tester
|
||||||
|
const task: TaskRequest = {
|
||||||
|
taskType: "test",
|
||||||
|
issueNumber: event.issue.number,
|
||||||
|
giteaOrg: org,
|
||||||
|
giteaRepo: repo,
|
||||||
|
repoCloneUrl: event.repository.clone_url,
|
||||||
|
giteaToken: config.giteaReviewToken,
|
||||||
|
};
|
||||||
|
|
||||||
|
const queued = await queue.enqueue(task, {
|
||||||
|
useReviewAccount: true,
|
||||||
|
body: "🤖 Re-triggering **test** — workspace queued.",
|
||||||
|
});
|
||||||
|
|
||||||
|
return c.json({ ok: true, queued });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regular issue comment → re-trigger analyst if still in analysis
|
||||||
const labels = event.issue.labels.map((l) => l.name);
|
const labels = event.issue.labels.map((l) => l.name);
|
||||||
const pastAnalysis =
|
const pastAnalysis =
|
||||||
labels.includes("ready-for-architecture") ||
|
labels.includes("ready-for-architecture") ||
|
||||||
@@ -32,8 +57,6 @@ export function issueComment(config: Config, queue: TaskQueue) {
|
|||||||
return c.text("ignored: issue past analysis stage", 200);
|
return c.text("ignored: issue past analysis stage", 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
const [org, repo] = event.repository.full_name.split("/");
|
|
||||||
|
|
||||||
const task: TaskRequest = {
|
const task: TaskRequest = {
|
||||||
taskType: "analyse",
|
taskType: "analyse",
|
||||||
issueNumber: event.issue.number,
|
issueNumber: event.issue.number,
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ export interface GiteaIssue {
|
|||||||
state: string;
|
state: string;
|
||||||
user: GiteaUser;
|
user: GiteaUser;
|
||||||
labels: GiteaLabel[];
|
labels: GiteaLabel[];
|
||||||
|
pull_request?: { merged: boolean } | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GiteaPullRequest {
|
export interface GiteaPullRequest {
|
||||||
|
|||||||
Reference in New Issue
Block a user