runReleases

tcmts.cli.run.runReleases · #wj5dw2ne · term · runs on the server

uses tcmts.cli.main.execute, which uses tcmts.cli.help.usageError, which uses tcmts.cli.help.usageOf, which uses tcmts.cli.style.bold, which uses node:util

Runs tcm releases.

import { routeReleases } from "#codebase/tcmts/cli/commands";
import { execute, when } from "#codebase/tcmts/cli/main";
import { packagesIn } from "#codebase/tcmts/cli/manifests";
import { writtenPart } from "#codebase/tcmts/cli/releases";
import type { Context } from "#codebase/tcmts/cli/run";
import { bold, dim } from "#codebase/tcmts/cli/style";
import { shortHash } from "#codebase/tcmts/core/hash";
import { parse } from "@bomb.sh/router";

export function runReleases({ cb, cmd, rest }: Context): number {
  const { model } = execute(cmd, parse(routeReleases(), { argv: rest }));
  const pkgs = packagesIn(cb, cb.store.names());
  const names = model.package
    ? [model.package]
    : [
        ...new Set([...pkgs.map((p) => p.name), ...cb.store.releases().map((x) => x.package)]),
      ].sort();
  if (!names.length)
    console.log(dim("no packages yet (a definition named `manifest` makes its namespace one)"));
  for (const n of names) {
    const pkg = pkgs.find((p) => p.name === n);
    const all = cb.store.releases(n);
    console.log(
      `${bold(n)}${pkg ? dim(`  ${pkg.namespace || "(the codebase)"}`) : dim("  (no longer in this branch)")}`,
    );
    if (!all.length) console.log(dim("  no releases yet"));
    for (const x of all) {
      const summary =
        writtenPart(x.notes)
          .split("\n")
          .find((l) => l.trim() && !l.startsWith("<!--")) ?? "";
      console.log(
        `  ${x.version.padEnd(10)} ${dim(`${when(x.ts)}  ${shortHash(x.causal)}  ${x.author}`)}  ${summary}`,
      );
    }
  }
  return 0;
}

uses

used by