feat: release 2.5.1
This commit is contained in:
@@ -64,6 +64,7 @@ export interface BuildStore {
|
||||
createBuild(record: BuildRecord): Promise<CreateBuildResult>;
|
||||
getBuild(id: string): Promise<BuildRecord | undefined>;
|
||||
listBuilds(): Promise<BuildRecord[]>;
|
||||
pruneBuilds?(limit?: number): Promise<void>;
|
||||
replaceBuild(
|
||||
record: BuildRecord,
|
||||
expectedResourceVersion: string,
|
||||
@@ -258,6 +259,43 @@ export class MemoryBuildStore implements BuildStore {
|
||||
return [...this.builds.values()].sort(compareBuildRecords).map(clone);
|
||||
}
|
||||
|
||||
async pruneBuilds(limit = 50): Promise<void> {
|
||||
if (!Number.isSafeInteger(limit) || limit < 0) return;
|
||||
const records = await this.listBuilds();
|
||||
let remaining = records.length;
|
||||
for (const record of records) {
|
||||
if (remaining <= limit) break;
|
||||
const current = this.builds.get(record.metadata.name);
|
||||
if (
|
||||
!current ||
|
||||
current.metadata.resourceVersion !== record.metadata.resourceVersion
|
||||
)
|
||||
continue;
|
||||
if (!terminal(current)) continue;
|
||||
if (
|
||||
current.status.reconcileLease &&
|
||||
Date.parse(current.status.reconcileLease.expiresAt) > Date.now()
|
||||
)
|
||||
continue;
|
||||
if (await this.ownsBuild(current.spec.imageKey, current.metadata.name))
|
||||
continue;
|
||||
// ownsBuild yields; revalidate after it so a concurrent lease/status
|
||||
// update cannot slip between the initial check and this synchronous delete.
|
||||
const latest = this.builds.get(record.metadata.name);
|
||||
if (
|
||||
!latest ||
|
||||
latest.metadata.resourceVersion !== record.metadata.resourceVersion ||
|
||||
!terminal(latest) ||
|
||||
(latest.status.reconcileLease &&
|
||||
Date.parse(latest.status.reconcileLease.expiresAt) > Date.now())
|
||||
)
|
||||
continue;
|
||||
this.builds.delete(latest.metadata.name);
|
||||
this.byImage.get(latest.spec.imageKey)?.delete(latest.metadata.name);
|
||||
remaining--;
|
||||
}
|
||||
}
|
||||
|
||||
async replaceBuild(
|
||||
record: BuildRecord,
|
||||
expectedResourceVersion: string,
|
||||
|
||||
Reference in New Issue
Block a user