Files
plainpages/registry-cleanup/select-versions.test.ts
T
lilleman 0644ec8f5a
CI / full-gate (push) Successful in 2m40s
Mirror / github-mirror (push) Successful in 0s
CI: nightly registry cleanup - prune hash images not release-tagged nor a branch head
2026-07-04 09:18:07 +02:00

49 lines
2.0 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "node:test";
import { planHashTagDeletions, selectOrphanedManifests } from "./select-versions.ts";
const headSha = "0582809000000000000000000000000000000001";
const releaseSha = "50006dd000000000000000000000000000000002";
const staleSha = "c8981c1000000000000000000000000000000003";
test("planHashTagDeletions deletes hash tags that are neither a branch head nor release-tagged", () => {
const plan = planHashTagDeletions({
branchHeadShas: [headSha],
releaseTagShas: [releaseSha],
versions: [headSha, releaseSha, staleSha],
});
assert.deepEqual(plan.deletions, [staleSha]);
assert.deepEqual(plan.keptTags, [headSha, releaseSha]);
});
test("planHashTagDeletions keeps named tags and excludes sha256 manifest versions from keptTags", () => {
const plan = planHashTagDeletions({
branchHeadShas: [],
releaseTagShas: [],
versions: ["0.0.1", "0", "latest", "some-manual-tag", `sha256:${"a".repeat(64)}`, staleSha],
});
assert.deepEqual(plan.deletions, [staleSha]);
assert.deepEqual(plan.keptTags, ["0.0.1", "0", "latest", "some-manual-tag"]);
});
test("planHashTagDeletions with no versions plans nothing", () => {
const plan = planHashTagDeletions({ branchHeadShas: [headSha], releaseTagShas: [], versions: [] });
assert.deepEqual(plan.deletions, []);
assert.deepEqual(plan.keptTags, []);
});
test("selectOrphanedManifests picks only sha256 versions unreferenced by kept tags", () => {
const referenced = `sha256:${"b".repeat(64)}`;
const orphaned = `sha256:${"c".repeat(64)}`;
const orphans = selectOrphanedManifests({
referencedDigests: [referenced],
versions: ["0.0.1", "latest", headSha, referenced, orphaned],
});
assert.deepEqual(orphans, [orphaned]);
});
test("selectOrphanedManifests with nothing referenced orphans every sha256 version", () => {
const manifest = `sha256:${"d".repeat(64)}`;
assert.deepEqual(selectOrphanedManifests({ referencedDigests: [], versions: [manifest, "latest"] }), [manifest]);
});