releasePackage

tcmts.cli.releases.releasePackage · #nysv4ezp · term · runs on the server

uses node:fs

Release a package: plan it, write its notes (the words from notesFile, or its draft if there is one; the changes from the codebase), record it. A draft whose words were used is removed: they're in the release now.

import type { Codebase } from "#codebase/tcmts/cli/codebase";
import {
  contributionsOn, draftFile, generatedNotes, planRelease, publish, ReleaseError, writtenPart,
} from "#codebase/tcmts/cli/releases";
import type { Plan } from "#codebase/tcmts/cli/releases";
import type { Release } from "#codebase/tcmts/store";
import fs from "node:fs";

export async function releasePackage(
  cb: Codebase,
  o: { name?: string; version?: string; notesFile?: string; remote?: string; force: boolean; author: string },
): Promise<{ release: Release; plan: Plan }> {
  const plan = planRelease(cb, o.name, o.version, o.force);
  const generated = generatedNotes(cb, plan, [...cb.store.contributions(), ...(await contributionsOn(cb, o.remote))]);
  const draft = draftFile(cb, plan.pkg.name);
  const notesFile = o.notesFile ?? (fs.existsSync(draft) ? draft : undefined);
  if (notesFile && !fs.existsSync(notesFile)) throw new ReleaseError(`no file ${notesFile}`);
  const release = publish(cb, plan, notesFile ? writtenPart(fs.readFileSync(notesFile, "utf8")) : "", generated, o.author);
  if (notesFile === draft) fs.rmSync(draft);
  return { release, plan };
}

uses

used by