Files
MineGeo/lib/bug-retention.ts

39 lines
1.1 KiB
TypeScript

import type { BugReportRecord } from "../shared/bug-reports";
import type { LinearSupportClient } from "./linear-support-client";
export async function purgeClosedBugReport(
id: string,
closedAt: string,
deps: {
record: () => Promise<BugReportRecord | null>;
linear: Pick<LinearSupportClient, "issue" | "remove">;
begin: () => Promise<boolean>;
reopen: () => Promise<void>;
removeFiles: (paths: string[]) => Promise<void>;
finish: () => Promise<void>;
now?: () => number;
},
) {
const report = await deps.record();
if (
!report ||
report.state !== "done" ||
report.closed_at !== closedAt ||
!report.delete_after ||
Date.parse(report.delete_after) > (deps.now ?? Date.now)()
)
return;
if (!report.purge_started_at) {
const issue = await deps.linear.issue(id);
if (issue && issue.state?.type !== "completed") {
await deps.reopen();
return;
}
}
if (!(await deps.begin())) return;
// Keep the local retry record until BOTH external deletions are confirmed.
await deps.linear.remove(id);
await deps.removeFiles([`${id}/input`, `${id}/screenshot.webp`]);
await deps.finish();
}