@@ -18,7 +18,8 @@ the head of the pull request when there is one, with full history and the
|
|||||||
author's push credentials. Read the code there, run its checks and tests when
|
author's push credentials. Read the code there, run its checks and tests when
|
||||||
they bear on the task, and push from there.
|
they bear on the task, and push from there.
|
||||||
|
|
||||||
For a `pull_request` event, review the PR without changing code, using the
|
For a `pull_request` event, and for a comment on a pull request that asks you to
|
||||||
|
review it, review the PR without changing code, using the
|
||||||
`requesting-code-review` skill from superpowers: run its code reviewer template
|
`requesting-code-review` skill from superpowers: run its code reviewer template
|
||||||
against the PR's base and head. Run the project's checks on the head and treat a
|
against the PR's base and head. Run the project's checks on the head and treat a
|
||||||
failure as at least Important. Check the whole repository against the code rules
|
failure as at least Important. Check the whole repository against the code rules
|
||||||
|
|||||||
@@ -59,10 +59,10 @@ async function postComment(body: string): Promise<void> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// A pull request event is a review request, so the review is posted instead
|
// A review is posted whenever the agent wrote one, whether a review request or
|
||||||
// of the response. It comes through a file, because a final chat message picks
|
// a comment asked for it. It comes through a file, because a final chat message
|
||||||
// up narration while a file's first line is written on purpose. That line is
|
// picks up narration while a file's first line is written on purpose. That line
|
||||||
// the verdict, matched whole; anything unexpected only comments, never
|
// is the verdict, matched whole; anything unexpected only comments, never
|
||||||
// approves. The mark in front is added here, so it is never part of the match.
|
// approves. The mark in front is added here, so it is never part of the match.
|
||||||
const REVIEW_PATH = `${await Deno.makeTempDir()}/review.md`;
|
const REVIEW_PATH = `${await Deno.makeTempDir()}/review.md`;
|
||||||
const VERDICTS: Record<string, [event: string, mark: string]> = {
|
const VERDICTS: Record<string, [event: string, mark: string]> = {
|
||||||
@@ -71,10 +71,13 @@ const VERDICTS: Record<string, [event: string, mark: string]> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
async function postResult(body: string): Promise<void> {
|
async function postResult(body: string): Promise<void> {
|
||||||
if (EVENT !== "pull_request") return postComment(body);
|
const review = await Deno.readTextFile(REVIEW_PATH).catch(() => null);
|
||||||
const review = await Deno.readTextFile(REVIEW_PATH).catch(() => {
|
if (review === null) {
|
||||||
|
if (EVENT === "pull_request") {
|
||||||
throw new Error(`no review was written to ${REVIEW_PATH}`);
|
throw new Error(`no review was written to ${REVIEW_PATH}`);
|
||||||
});
|
}
|
||||||
|
return postComment(body);
|
||||||
|
}
|
||||||
const [verdict, ...rest] = review.split("\n");
|
const [verdict, ...rest] = review.split("\n");
|
||||||
const [event, mark] = VERDICTS[verdict.trim()] ?? ["COMMENT", "💬"];
|
const [event, mark] = VERDICTS[verdict.trim()] ?? ["COMMENT", "💬"];
|
||||||
await gitea(REVIEWER_TOKEN, `repos/${REPO}/pulls/${INDEX}/reviews`, {
|
await gitea(REVIEWER_TOKEN, `repos/${REPO}/pulls/${INDEX}/reviews`, {
|
||||||
|
|||||||
Reference in New Issue
Block a user