# Configuration for git-cliff, following Alloy's conventional-commit changelog.
# See https://git-cliff.org/docs/configuration

[remote.github]
owner = "gakonst"
repo = "nanocodex"

[changelog]
header = """
# Changelog

All notable changes to Nanocodex are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n
"""
body = """\
{% set repository = "https://github.com/" ~ remote.github.owner ~ "/" ~ remote.github.repo %}\
{% if version %}\
    ## [{{ version | trim_start_matches(pat="v") }}]({{ repository }}/releases/tag/v{{ version | trim_start_matches(pat="v") }}) - {{ timestamp | date(format="%Y-%m-%d") }}
{% else %}\
    ## [Unreleased]({{ repository }}/compare/{{ previous.version }}...HEAD)
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
    ### {{ group | title }}
    {% for commit in commits %}
        - {% if commit.scope %}[{{ commit.scope }}] {% endif %}{{ commit.message | upper_first | split(pat="\n") | first }}\
    {% endfor %}
{% endfor %}\n
"""
trim = true
footer = """
<!-- generated by git-cliff -->
"""

[git]
conventional_commits = true
filter_unconventional = false
commit_preprocessors = [
    { pattern = '#(\d+)', replace = "[#$1](https://github.com/gakonst/nanocodex/issues/$1)" },
]
commit_parsers = [
    { message = "^Add ChatGPT subscription authentication", group = "Features" },
    { message = "^Emit completed assistant items", group = "Bug Fixes" },
    { message = "^Preserve assistant message phases", group = "Bug Fixes" },
    { message = "^[Ff]eat", group = "Features" },
    { message = "^[Ff]ix", group = "Bug Fixes" },
    { message = "^[Dd]oc", group = "Documentation" },
    { message = ".*\\b([Dd]eps|[Dd]ependencies|[Bb]ump)\\b", group = "Dependencies" },
    { message = "^[Pp]erf", group = "Performance" },
    { message = "^[Rr]efactor", group = "Refactor" },
    { message = ".*\\b([Ss]tyle|[Ff]mt|[Ff]ormat)\\b", group = "Styling" },
    { message = "^[Tt]est", group = "Testing" },
    { message = "^[Cc]hore|^[Cc]i|^[Bb]uild", group = "Miscellaneous Tasks" },
    { message = ".*", group = "Other" },
]
protect_breaking_commits = false
filter_commits = false
tag_pattern = "v[0-9]*"
skip_tags = "beta|alpha"
ignore_tags = "rc"
sort_commits = "newest"
