Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f693d56762 | ||
|
|
a72ea9ad1d | ||
|
|
2cdf68ddff | ||
|
|
81aee2f7fc |
@@ -128,6 +128,10 @@ data "coder_parameter" "task_type" {
|
||||
name = "Rework PR"
|
||||
value = "rework-pr"
|
||||
}
|
||||
option {
|
||||
name = "Rework Spec"
|
||||
value = "rework-spec"
|
||||
}
|
||||
option {
|
||||
name = "Release"
|
||||
value = "release"
|
||||
@@ -470,7 +474,7 @@ resource "coder_agent" "main" {
|
||||
git fetch origin develop 2>/dev/null && git checkout develop 2>/dev/null || true
|
||||
|
||||
# Lightweight stages only need the code, not a full build
|
||||
LIGHT_STAGES="analyse architect release maintenance"
|
||||
LIGHT_STAGES="analyse architect rework-spec release maintenance"
|
||||
if echo "$LIGHT_STAGES" | grep -qw "$TASK_TYPE"; then
|
||||
echo "Lightweight stage ($TASK_TYPE) — skipping build"
|
||||
else
|
||||
|
||||
@@ -17,18 +17,40 @@ export function prRework(config: Config, queue: TaskQueue) {
|
||||
}
|
||||
|
||||
if (!event.review) {
|
||||
console.log(`[pr-rework] ignored: no review object`);
|
||||
return c.text("ignored: no review data", 200);
|
||||
}
|
||||
|
||||
const [org, repo] = event.repository.full_name.split("/");
|
||||
const prNumber = event.pull_request.number;
|
||||
const reviewState = event.review.state.toLowerCase();
|
||||
|
||||
// Gitea webhook payloads use "state" in the API but "type" in webhooks
|
||||
// state: "REQUEST_CHANGES" | "APPROVED" | "COMMENT"
|
||||
// type: "pull_request_review_rejected" | "pull_request_review_approved" | ...
|
||||
let reviewState: string;
|
||||
if (event.review.state) {
|
||||
reviewState = event.review.state.toLowerCase();
|
||||
} else if (event.review.type) {
|
||||
const typeMap: Record<string, string> = {
|
||||
pull_request_review_rejected: "request_changes",
|
||||
pull_request_review_approved: "approved",
|
||||
pull_request_review_comment: "comment",
|
||||
};
|
||||
reviewState = typeMap[event.review.type] || event.review.type;
|
||||
} else {
|
||||
console.log(`[pr-rework] ignored: no review state or type (review: ${JSON.stringify(event.review)})`);
|
||||
return c.text("ignored: no review state", 200);
|
||||
}
|
||||
|
||||
console.log(`[pr-rework] PR #${prNumber} review: ${reviewState}`);
|
||||
|
||||
let taskType: string | null = null;
|
||||
let giteaToken: string;
|
||||
const branch = event.pull_request.head.ref;
|
||||
const isArchitectPR = branch.startsWith("docs/");
|
||||
|
||||
if (reviewState === "request_changes") {
|
||||
taskType = "rework-pr";
|
||||
taskType = isArchitectPR ? "rework-spec" : "rework-pr";
|
||||
giteaToken = config.giteaDevToken;
|
||||
} else if (reviewState === "approved") {
|
||||
taskType = "test";
|
||||
|
||||
@@ -161,6 +161,8 @@ export class TaskQueue {
|
||||
jobId: `create-${key}`,
|
||||
attempts: 3,
|
||||
backoff: { type: "exponential", delay: 5000 },
|
||||
removeOnComplete: true,
|
||||
removeOnFail: true,
|
||||
},
|
||||
);
|
||||
} catch (err: unknown) {
|
||||
@@ -201,6 +203,8 @@ export class TaskQueue {
|
||||
jobId: `cleanup-${workspaceName}`,
|
||||
attempts: 5,
|
||||
backoff: { type: "exponential", delay: 10000 },
|
||||
removeOnComplete: true,
|
||||
removeOnFail: true,
|
||||
},
|
||||
);
|
||||
|
||||
@@ -311,6 +315,8 @@ export class TaskQueue {
|
||||
jobId: `cleanup-stale-${ws.name}-${Date.now()}`,
|
||||
attempts: 5,
|
||||
backoff: { type: "exponential", delay: 10000 },
|
||||
removeOnComplete: true,
|
||||
removeOnFail: true,
|
||||
},
|
||||
);
|
||||
} catch (err) {
|
||||
|
||||
+2
-1
@@ -46,7 +46,8 @@ export interface GiteaPullRequest {
|
||||
export interface GiteaReview {
|
||||
id: number;
|
||||
body: string;
|
||||
state: string; // "approved", "request_changes", "comment"
|
||||
state?: string; // "approved", "request_changes", "comment" (API response)
|
||||
type?: string; // "pull_request_review_rejected" | "pull_request_review_approved" (webhook payload)
|
||||
user: GiteaUser;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user