releasePackage
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
- tcmts.cli.codebase.Codebase
- tcmts.cli.releases.Plan
- tcmts.cli.releases.ReleaseError
- tcmts.cli.releases.contributionsOn
- tcmts.cli.releases.draftFile
- tcmts.cli.releases.generatedNotes
- tcmts.cli.releases.planRelease
- tcmts.cli.releases.publish
- tcmts.cli.releases.writtenPart
- tcmts.store.Release