42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import type { Context } from "hono";
|
|
import type { IssueEvent, TaskRequest } from "../types.js";
|
|
import type { TaskQueue } from "../queue.js";
|
|
import type { Config } from "../config.js";
|
|
|
|
/**
|
|
* Issue opened → route to analyst or fix-bug.
|
|
*
|
|
* Replaces: gitea-issue-triage.json
|
|
*/
|
|
export function issueTriage(config: Config, queue: TaskQueue) {
|
|
return async (c: Context) => {
|
|
const event = await c.req.json<IssueEvent>();
|
|
|
|
if (event.action !== "opened") {
|
|
return c.text("ignored: not an open event", 200);
|
|
}
|
|
|
|
const labels = event.issue.labels.map((l) => l.name);
|
|
const [org, repo] = event.repository.full_name.split("/");
|
|
|
|
const isBug = labels.includes("bug");
|
|
const taskType = isBug ? "fix-bug" : "analyse";
|
|
|
|
const task: TaskRequest = {
|
|
taskType,
|
|
issueNumber: event.issue.number,
|
|
giteaOrg: org,
|
|
giteaRepo: repo,
|
|
repoCloneUrl: event.repository.clone_url,
|
|
giteaToken: config.giteaDevToken,
|
|
};
|
|
|
|
const queued = queue.enqueue(task, {
|
|
useReviewAccount: false,
|
|
body: `🤖 Issue received. Starting **${taskType}** stage.`,
|
|
});
|
|
|
|
return c.json({ ok: true, queued });
|
|
};
|
|
}
|