testRetiredBuildsAreKeptAFew

tcmts.cli.builds.test.testRetiredBuildsAreKeptAFew · #vzqtvdva · term

The build a new known-good replaces is kept, named by the entry it was made from, and only the newest few are: one that doesn't say what it was made from goes.

import { keptBuilds, retireBuild } from "#codebase/tcmts/cli/builds";
import { fakeBuild } from "#codebase/tcmts/cli/builds/test";
import assert from "node:assert/strict";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";

export const testRetiredBuildsAreKeptAFew = () => {
  const root = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), "tcm builds ")));
  try {
    fakeBuild(root, "builds/cccccccc", "cccccccc4444", 30);
    fakeBuild(root, "builds/dddddddd", "dddddddd5555", 20);
    const previous = fakeBuild(root, "known-good-previous", "bbbbbbbb3333", 5);
    assert.equal(retireBuild(root, previous, 2), path.join(root, "builds", "bbbbbbbb"));
    assert.ok(!fs.existsSync(previous));
    assert.deepEqual(
      keptBuilds(root).map((b) => b.name),
      ["bbbbbbbb", "dddddddd"],
    );
    // one kept already, or one that doesn't say, goes
    const again = fakeBuild(root, "known-good-previous", "bbbbbbbb3333", 5);
    assert.equal(retireBuild(root, again, 2), path.join(root, "builds", "bbbbbbbb"));
    assert.ok(!fs.existsSync(again));
    const unsaid = fakeBuild(root, "known-good-previous", "ffffffff", 1);
    fs.rmSync(path.join(unsaid, "VERIFIED"));
    fs.rmSync(path.join(unsaid, "verified.json"));
    assert.equal(retireBuild(root, unsaid, 2), undefined);
    assert.ok(!fs.existsSync(unsaid));
    assert.equal(retireBuild(root, path.join(root, "nothing"), 2), undefined);
  } finally {
    fs.rmSync(root, { recursive: true, force: true });
  }
}

uses