diff --git a/src/gitea/review-api.ts b/src/gitea/review-api.ts index 50f5980..81319fa 100644 --- a/src/gitea/review-api.ts +++ b/src/gitea/review-api.ts @@ -1,20 +1,39 @@ +import { log } from "../logging/logger.js"; import { GiteaClient, PullFile } from "./client.js"; import { ReviewResult } from "../cursor/review-schema.js"; +/** Best-effort cleanup; never throws (Gitea may return 500 for some review states). */ export async function deletePriorBotReviews(input: { gitea: GiteaClient; owner: string; repo: string; prNumber: number; botLogin: string; + correlationId?: string; }): Promise { - const reviews = await input.gitea.getReviews(input.owner, input.repo, input.prNumber); - const botReviews = reviews.filter((review) => review.user?.login === input.botLogin); - await Promise.all( - botReviews.map((review) => - input.gitea.deleteReview(input.owner, input.repo, input.prNumber, review.id) - ) - ); + try { + const reviews = await input.gitea.getReviews(input.owner, input.repo, input.prNumber); + const botReviews = reviews.filter((review) => review.user?.login === input.botLogin); + + for (const review of botReviews) { + try { + await input.gitea.deleteReview(input.owner, input.repo, input.prNumber, review.id); + } catch (error) { + log("warn", "Failed to delete prior bot review (continuing)", { + correlation_id: input.correlationId, + review_id: review.id, + pr_number: input.prNumber, + error: error instanceof Error ? error.message : String(error) + }); + } + } + } catch (error) { + log("warn", "Failed to list prior bot reviews for cleanup (continuing)", { + correlation_id: input.correlationId, + pr_number: input.prNumber, + error: error instanceof Error ? error.message : String(error) + }); + } } export async function postReview(input: { diff --git a/src/run/review-runner.ts b/src/run/review-runner.ts index b65880d..bc8ac72 100644 --- a/src/run/review-runner.ts +++ b/src/run/review-runner.ts @@ -167,18 +167,12 @@ async function executeReview(params: { shouldRetry: (error) => !isTimeoutError(error) }); - await retry({ - fn: () => - deletePriorBotReviews({ - gitea, - owner, - repo, - prNumber, - botLogin: input.env.GITEA_BOT_LOGIN - }), - retries: 2, - initialDelayMs: 300, - operationName: "deletePriorBotReviews", + await deletePriorBotReviews({ + gitea, + owner, + repo, + prNumber, + botLogin: input.env.GITEA_BOT_LOGIN, correlationId: input.correlationId });