-module(version_bump@plugins@release_notes). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/version_bump/plugins/release_notes.gleam"). -export([notes_for/1, plugin/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC( " The `release-notes-generator` plugin.\n" "\n" " A port of semantic-release's `@semantic-release/release-notes-generator`.\n" " It implements only the `generate_notes` hook: given the parsed conventional\n" " commits in the context and the version of the pending release, it renders\n" " the Markdown release notes via the shared `notes` module.\n" "\n" " When there is no `next_release` (nothing to release) the hook returns an\n" " empty string, matching semantic-release where notes are only generated for a\n" " release that is actually happening.\n" ). -file("src/version_bump/plugins/release_notes.gleam", 52). ?DOC( " The configured repository URL, threaded through to the notes renderer for\n" " future link generation.\n" ). -spec repository_url(version_bump@context:context()) -> gleam@option:option(binary()). repository_url(Context) -> erlang:element(2, erlang:element(4, Context)). -file("src/version_bump/plugins/release_notes.gleam", 42). ?DOC( " Pure core of the hook: render the release notes for a context, or `\"\"` when\n" " there is no pending release. Kept separate from `generate_notes` so it can\n" " be unit-tested without constructing a `Result`.\n" ). -spec notes_for(version_bump@context:context()) -> binary(). notes_for(Context) -> case erlang:element(9, Context) of none -> <<""/utf8>>; {some, Next} -> version_bump@note:generate( erlang:element(7, Context), erlang:element(2, Next), repository_url(Context) ) end. -file("src/version_bump/plugins/release_notes.gleam", 32). ?DOC( " `generate_notes` hook: render Markdown release notes for the pending release.\n" "\n" " `_spec` is unused — this plugin takes no options. The notes are derived\n" " entirely from the context's commits, the next release's version, and the\n" " configured repository URL.\n" ). -spec generate_notes( version_bump@config:plugin_spec(), version_bump@context:context() ) -> {ok, binary()} | {error, version_bump@error:release_error()}. generate_notes(_, Context) -> {ok, notes_for(Context)}. -file("src/version_bump/plugins/release_notes.gleam", 23). ?DOC( " Build the `release-notes-generator` plugin. It implements `generate_notes`\n" " and leaves every other hook unset.\n" ). -spec plugin() -> version_bump@plugin:plugin(). plugin() -> _record = version_bump@plugin:new(<<"release-notes-generator"/utf8>>), {plugin, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), {some, fun generate_notes/2}, erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}.