runReleases
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
- tcmts.cli.commands.routeReleases
- tcmts.cli.main.execute
- tcmts.cli.main.when
- tcmts.cli.manifests.packagesIn
- tcmts.cli.releases.writtenPart
- tcmts.cli.run.Context
- tcmts.cli.style.bold
- tcmts.cli.style.dim
- tcmts.core.hash.shortHash