5b478d2831
Version bumps and release tags were entirely manual; the only CI automation was sync-version-on-tag, which corrects pyproject.toml if a hand-pushed tag drifted. This flips that: a new bump-version job (needs the four existing checks, gated to actual merge commits on master via HEAD^@'s parent count so direct/squash/rebase pushes are untouched) uses bump-my-version to auto-bump the patch version when a merged branch didn't already bump it itself, then generates a changelog entry with git-cliff and pushes a matching vX.Y.Z tag. git-cliff's cliff.toml is tuned to this repo's plain imperative commit style (no feat:/fix: prefixes): commits are grouped Added/Fixed/Removed/Changed by leading verb, "(gitea #N)" is linkified, and merge/[skip ci] commits are dropped. Per user decision during planning: the changelog generator folds in @lars's comment on the issue (asking to fold in changelog generation rather than deferring it), and CHANGELOG.md starts fresh with no backfill of v0.2.0-v0.3.3. sync-version-on-tag is left untouched as the safety net for hand-tagging. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
53 lines
1.7 KiB
TOML
53 lines
1.7 KiB
TOML
# git-cliff configuration — see https://git-cliff.org/docs/configuration
|
|
#
|
|
# Commit messages in this repo aren't Conventional Commits; they're plain
|
|
# imperative summaries like "Add class-balanced secondary particle-type loss
|
|
# (gitea #44)". Parsing here is tuned to that convention rather than to
|
|
# feat:/fix:-style prefixes.
|
|
|
|
[changelog]
|
|
header = "# Changelog\n\n"
|
|
body = """
|
|
{% if version %}\
|
|
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
{% else %}\
|
|
## [Unreleased]
|
|
{% endif %}\
|
|
{% for group, commits in commits | group_by(attribute="group") %}
|
|
### {{ group | striptags | trim | upper_first }}
|
|
{% for commit in commits %}
|
|
- {{ commit.message | upper_first }}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
"""
|
|
trim = true
|
|
render_always = true
|
|
postprocessors = []
|
|
|
|
[git]
|
|
conventional_commits = false
|
|
filter_unconventional = false
|
|
require_conventional = false
|
|
split_commits = false
|
|
# Keep only the commit subject (first line), then linkify "(gitea #N)".
|
|
commit_preprocessors = [
|
|
{ pattern = "(?s)\n.*", replace = "" },
|
|
{ pattern = "\\(gitea #(\\d+)\\)", replace = "[gitea #${1}](https://git.larsbogner.de/lars/giant/issues/${1})" },
|
|
]
|
|
protect_breaking_commits = false
|
|
commit_parsers = [
|
|
{ message = "^Merge ", skip = true },
|
|
{ message = "\\[skip ci\\]", skip = true },
|
|
{ message = "^Add", group = "<!-- 0 -->Added" },
|
|
{ message = "^(Fix|Clamp|Clip)", group = "<!-- 1 -->Fixed" },
|
|
{ message = "^(Remove|Drop|Deprecate)", group = "<!-- 2 -->Removed" },
|
|
{ message = ".*", group = "<!-- 3 -->Changed" },
|
|
]
|
|
filter_commits = false
|
|
link_parsers = []
|
|
use_branch_tags = false
|
|
topo_order = false
|
|
topo_order_commits = true
|
|
sort_commits = "oldest"
|
|
recurse_submodules = false
|