Skip to content

l0.DependencyControl.release-notes

release_notes = require "l0.DependencyControl.release-notes"
local release_notes = require("l0.DependencyControl.release-notes")

Renders feed changelog entries into release notes, grouping them by a conventional-commit-style marker at the head of each entry:

<type>[(<scope>)][!]: <message>

type is feat, fix, or change (case-insensitive); an unrecognized leading token leaves the entry unmarked. (scope) is an optional area tag such as (Updater). A trailing ! flags a breaking change: it stays in its type's section but is tagged and floated to the top of it. A version with nothing marked renders as a flat list, no headings.

renderMarkdown produces a GitHub release body (cross-package, bold scopes); renderLog produces the plain-text in-app changelog block (single package, glyph-headed sections). Framing a record's multi-version changelog around renderLog is the caller's job.

Functions

parseEntry

release_notes.parseEntry entry
release_notes.parseEntry(entry)

Splits a changelog entry into its marker parts.

param type description
entry string A changelog entry, optionally prefixed with a <type>[(<scope>)][!]: marker.

Returns:

  • {type: string?, scope: string?, breaking: boolean, message: string}type is nil and message holds the whole entry when no recognized marker is present.

renderMarkdown

release_notes.renderMarkdown packages, opts
release_notes.renderMarkdown(packages, opts)

Renders a GitHub-flavored markdown release body from one version's changelog across packages.

param type description
packages {name: string, scope: string, primary: boolean?, entries: string[]}[] One item per package with entries for the version; scope is the fallback area tag for that package's entries that carry no marker scope. The primary package's unscoped entries render with no lead-in at all.
opts? {title: string?} title prepends a top-level # heading.

Returns:

  • markdown string — Grouped notes in the fixed category order (a flat list when nothing is marked); empty when no entries.

renderLog

release_notes.renderLog entries
release_notes.renderLog(entries)

Renders one package-version's changelog as the plain-text in-app changelog block. Each entry is reconstructed to its readable form (scope: message), dropping the machine type token so the marker convention never leaks into what users read; sections are headed by their glyph, and a version with nothing marked lists flat with no headings.

param type description
entries string[] The raw changelog entries of a single package version.

Returns:

  • block string — The rendered lines joined by newlines; empty when no entries.