-module(version_bump@plugins@git). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/version_bump/plugins/git.gleam"). -export([render_message/2, parse_assets/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 git plugin (plugin name \"git\").\n" "\n" " Mirrors `@semantic-release/git`. In `prepare` it stages the release assets\n" " that earlier plugins changed (e.g. the `gleam.toml` version bumped by `hex`,\n" " or a `CHANGELOG.md`) and commits them. Because the engine creates the release\n" " tag *after* all `prepare` hooks and pushes the branch alongside the tag, the\n" " tag then points at the commit containing the bump — keeping the committed\n" " version, the tag, and the published version consistent.\n" "\n" " List this plugin AFTER the plugins that modify files (e.g. `hex`). Options\n" " (all optional, with sensible defaults):\n" " - `assets` comma-separated paths to stage (default \"gleam.toml\")\n" " - `message` commit message template; `${version}` is substituted\n" " (default \"chore(release): ${version} [skip ci]\")\n" " - `committerName` commit author/committer name (default \"version_bump\")\n" " - `committerEmail` commit author/committer email\n" ). -file("src/version_bump/plugins/git.gleam", 79). ?DOC(" Look up an option, treating a present-but-blank value as absent.\n"). -spec option_or(version_bump@config:plugin_spec(), binary(), binary()) -> binary(). option_or(Spec, Key, Fallback) -> case gleam_stdlib:map_get(erlang:element(3, Spec), Key) of {ok, Value} -> case gleam@string:trim(Value) of <<""/utf8>> -> Fallback; _ -> Value end; {error, _} -> Fallback end. -file("src/version_bump/plugins/git.gleam", 63). ?DOC(" Render the commit message, substituting `${version}`. PURE.\n"). -spec render_message(binary(), binary()) -> binary(). render_message(Template, Version) -> gleam@string:replace(Template, <<"${version}"/utf8>>, Version). -file("src/version_bump/plugins/git.gleam", 69). ?DOC( " Parse a comma-separated `assets` option into a trimmed, non-empty path list.\n" " PURE.\n" ). -spec parse_assets(binary()) -> list(binary()). parse_assets(Raw) -> _pipe = Raw, _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>), _pipe@2 = gleam@list:map(_pipe@1, fun gleam@string:trim/1), gleam@list:filter(_pipe@2, fun(Path) -> Path /= <<""/utf8>> end). -file("src/version_bump/plugins/git.gleam", 90). -spec require_next_release(version_bump@context:context()) -> {ok, version_bump@release:next_release()} | {error, version_bump@error:release_error()}. require_next_release(Context) -> case erlang:element(9, Context) of {some, Next} -> {ok, Next}; none -> {error, {plugin_error, <<"git"/utf8>>, <<"no next release determined"/utf8>>}} end. -file("src/version_bump/plugins/git.gleam", 47). -spec do_prepare( version_bump@config:plugin_spec(), version_bump@context:context() ) -> {ok, nil} | {error, version_bump@error:release_error()}. do_prepare(Spec, Context) -> gleam@result:'try'( require_next_release(Context), fun(Next) -> Assets = parse_assets( option_or(Spec, <<"assets"/utf8>>, <<"gleam.toml"/utf8>>) ), Message = render_message( option_or( Spec, <<"message"/utf8>>, <<"chore(release): ${version} [skip ci]"/utf8>> ), erlang:element(2, Next) ), Committer_name = option_or( Spec, <<"committerName"/utf8>>, <<"version_bump"/utf8>> ), Committer_email = option_or( Spec, <<"committerEmail"/utf8>>, <<"version_bump@users.noreply.github.com"/utf8>> ), gleam@result:'try'( version_bump@git:stage(erlang:element(2, Context), Assets), fun(_) -> version_bump@git:commit( erlang:element(2, Context), Message, Committer_name, Committer_email ) end ) end ). -file("src/version_bump/plugins/git.gleam", 43). ?DOC( " Build the git plugin: implements only `prepare` (the commit). The engine\n" " handles creating and pushing the tag and the branch.\n" ). -spec plugin() -> version_bump@plugin:plugin(). plugin() -> _record = version_bump@plugin:new(<<"git"/utf8>>), {plugin, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), {some, fun do_prepare/2}, erlang:element(9, _record), erlang:element(10, _record), erlang:element(11, _record)}.