bootleg 0.1.13

A simple cli tool to copy to the clipboard
Documentation
[workspace]
# git_release_draft = true
git_release_enable = false

[changelog]
header = """# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

"""

body = """
{% macro print_commit(commit) -%}
    - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
      {% if commit.breaking %}[**breaking**] {% endif %}\
      {{ commit.message | upper_first }} - \
      ([{{ commit.id | truncate(length=7, end="") }}]({{ remote.link }}/commit/{{ commit.id }}))\
{% endmacro -%}

{% if version %}\
    {% if previous.version %}\
        ## [{{ version | trim_start_matches(pat="v") }}]({{ release_link }})
    {% else %}\
        ## [{{ version | trim_start_matches(pat="v") }}]
    {% endif %}\
{% endif %}\

{% for group, commits in commits
| filter(attribute="merge_commit", value=false)
| unique(attribute="message")
| group_by(attribute="group") %}
    ### {{ group | striptags | trim | upper_first }}
    {% for commit in commits
    | filter(attribute="scope")
    | sort(attribute="scope") %}
        {{ self::print_commit(commit=commit) }}
    {%- endfor -%}
    {% raw %}\n{% endraw %}\
    {%- for commit in commits %}
        {%- if not commit.scope -%}
            {{ self::print_commit(commit=commit) }}
        {% endif -%}
    {% endfor -%}
{% endfor %}\n
"""

commit_parsers = [
    { message = "(?i)^feat", group = "<!-- 0 -->๐Ÿš€ Features" },
    { message = "(?i)^fix", group = "<!-- 1 -->๐Ÿ› Bug Fixes" },
    { message = "(?i)^refactor", group = "<!-- 2 -->๐Ÿšœ Refactor" },
    { message = "(?i)^doc", group = "<!-- 3 -->๐Ÿ“š Documentation" },
    { message = "(?i)^perf", group = "<!-- 4 -->โšก Performance" },
    { message = "(?i)^style", group = "<!-- 5 -->๐ŸŽจ Styling" },
    { message = "(?i)^test", group = "<!-- 6 -->๐Ÿงช Testing" },
    { message = "^chore\\(release\\):", skip = true },
    { message = "^chore: release", skip = true },
    { message = "^chore\\(deps.*\\)", skip = true },
    { message = "^chore\\(pr\\)", skip = true },
    { message = "^chore\\(pull\\)", skip = true },
    { message = "^chore\\(npm\\).*yarn\\.lock", skip = true },
    { message = "(?i)^chore", group = "<!-- 7 -->โš™๏ธ Miscellaneous Tasks" },
    { body = ".*security", group = "<!-- 8 -->๐Ÿ›ก๏ธ Security" },
    { message = "(?i)^upgrade", group = "<!-- 9 -->โฌ†๏ธ Upgrades" },
    { message = "(?i)^downgrade", group = "<!-- 10 -->โฌ‡๏ธ Downgrades" },
    { message = "(?i)^revert", group = "<!-- 11 -->โช Reverts" },
    # { message = "(?i)^release", group = "<!-- 12 -->๐Ÿ”– Releases" },
    { message = "(?i)^bump", group = "<!-- 13 -->๐Ÿ“ฆ Bumps" },
    { message = "(?i)^initial", group = "<!-- 14 -->๐ŸŽ‰ Initial Commit" },
    { message = "(?i)^init", group = "<!-- 15 -->๐ŸŽ‰ Initial Commit" },
    { message = "(?i)^add", group = "<!-- 16 -->โž• Add" },
    { message = "(?i)^create", group = "<!-- 16 -->โž• Add" },
    { message = "(?i)^remove", group = "<!-- 17 -->โž– Remove" },
    { message = "(?i)^delete", group = "<!-- 17 -->โž– Remove" },
    { message = "(?i)^rename", group = "<!-- 18 -->๐Ÿ“ Rename" },
    { message = "(?i)^move", group = "<!-- 19 -->๐Ÿ“‚ Move" },
    { message = "(?i)^copy", group = "<!-- 20 -->๐Ÿ“‹ Copy" },
    { message = "(?i)^fixup", group = "<!-- 21 -->๐Ÿ”ง Fixup" },
    { message = "(?i)^wip", group = "<!-- 22 -->๐Ÿšง WIP" },
    { message = "(?i)^rework", group = "<!-- 23 -->๐Ÿ”จ Rework" },
    { message = "(?i)^cleanup", group = "<!-- 24 -->๐Ÿงน Cleanup" },
    { message = "(?i)^format", group = "<!-- 25 -->๐ŸŽจ Format" },
    { message = "(?i)^style", group = "<!-- 25 -->๐ŸŽจ Format" },
    { message = "(?i)^lint", group = "<!-- 25 -->๐ŸŽจ Format" },
    { message = "(?i)^update", group = "<!-- 26 -->๐Ÿ”„ Update" },
    { message = "(?i)^pin", group = "<!-- 27 -->๐Ÿ“Œ Pin" },
    { message = "(?i)^unpin", group = "<!-- 28 -->๐Ÿ“ Unpin" },
    { message = "(?i)^build|ci|cd", group = "<!-- 29 -->๐Ÿ‘ท CI/CD" },
    { message = ".*", group = "<!-- 30 -->๐Ÿ“ Other" },
    { message = "(?i)^merge", group = "<!-- 31 -->๐Ÿ”€ Merges" },
]

link_parsers = [
    { pattern = "#(\\d+)", href = "{{ remote.link }}/issues/$1" },
    { pattern = "RFC(\\d+)", text = "ietf-rfc$1", href = "https://datatracker.ietf.org/doc/html/rfc$1" },
]