Filter pruned upgrade jobs from responses

This commit is contained in:
FengLee
2026-05-10 12:37:39 +08:00
parent ffde03bbbc
commit 14b7b3afe6

View File

@@ -259,9 +259,10 @@ async function readStates(): Promise<UpgradeJobState[]> {
const entries = loadedStates
.filter((entry): entry is { jobName: string; state: UpgradeJobState } => Boolean(entry))
.sort((a, b) => new Date(b.state.updatedAt).getTime() - new Date(a.state.updatedAt).getTime());
await pruneFinishedJobs(jobsRoot, entries);
const prunedJobNames = await pruneFinishedJobs(jobsRoot, entries);
return entries
.filter(entry => !prunedJobNames.has(entry.jobName))
.map(entry => entry.state)
.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
}
@@ -269,11 +270,12 @@ async function readStates(): Promise<UpgradeJobState[]> {
async function pruneFinishedJobs(
jobsRoot: string,
entries: Array<{ jobName: string; state: UpgradeJobState }>,
): Promise<void> {
if (!Number.isFinite(HISTORY_LIMIT) || HISTORY_LIMIT < 1) return;
): Promise<Set<string>> {
const prunedJobNames = new Set<string>();
if (!Number.isFinite(HISTORY_LIMIT) || HISTORY_LIMIT < 1) return prunedJobNames;
const finished = entries.filter(entry => !RUNNING_STATUSES.has(entry.state.status));
const staleFinished = finished.slice(HISTORY_LIMIT);
if (staleFinished.length === 0) return;
if (staleFinished.length === 0) return prunedJobNames;
await Promise.all(staleFinished.map(async entry => {
const targetDir = path.join(jobsRoot, entry.jobName);
@@ -281,7 +283,9 @@ async function pruneFinishedJobs(
const resolvedTarget = path.resolve(targetDir);
if (!resolvedTarget.startsWith(`${resolvedRoot}${path.sep}`)) return;
await fs.rm(resolvedTarget, { recursive: true, force: true });
prunedJobNames.add(entry.jobName);
}));
return prunedJobNames;
}
async function normalizeStaleState(state: UpgradeJobState, statePath: string): Promise<UpgradeJobState> {