keptBuilds

tcmts.cli.builds.keptBuilds · #njmru6ik · term · runs on the server

uses node:fs

The builds kept in root: the known-good one (known-good), the one it replaced (previous, in known-good-previous), then older ones (builds/<id>), newest first.

import { buildBin, buildRecord } from "#codebase/tcmts/cli/builds";
import type { TcmBuild } from "#codebase/tcmts/cli/builds";
import fs from "node:fs";
import path from "node:path";

export function keptBuilds(root: string): TcmBuild[] {
  const one = (name: string, dir: string): TcmBuild[] => {
    const bin = buildBin(dir);
    if (!bin) return [];
    const record = buildRecord(dir) ?? {
      head: undefined,
      when: undefined,
      how: "verified" as const,
      at: fs.statSync(dir).mtimeMs,
    };
    return [{ name, dir, bin, ...record }];
  };
  const older = path.join(root, "builds");
  return [
    ...one("known-good", path.join(root, "known-good")),
    ...one("previous", path.join(root, "known-good-previous")),
    ...(fs.existsSync(older)
      ? fs
          .readdirSync(older)
          .flatMap((id) => one(id, path.join(older, id)))
          .sort((a, b) => b.at - a.at)
      : []),
  ];
}

uses

used by