# Configuration for git-cliff changelog generation # https://git-cliff.org/docs/configuration [changelog] header = "" body = """ {% for group, commits in commits | group_by(attribute="group") -%} {% if group == "๐Ÿš€ Features" -%} ### {{ group }} {% set commits_by_scope = commits | group_by(attribute="scope") -%} {% if commits_by_scope.firmware is defined or commits_by_scope.fw is defined -%} #### ๐ŸŽฎ Firmware {% if commits_by_scope.firmware is defined -%}{% for commit in commits_by_scope.firmware -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.fw is defined -%}{% for commit in commits_by_scope.fw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.bw is defined -%} #### ๐Ÿ–ฅ๏ธ Black & White Radio {% for commit in commits_by_scope.bw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%} {% endif -%} {% if commits_by_scope.color is defined or commits_by_scope.colour is defined -%} #### ๐ŸŽจ Color LCD Radio {% if commits_by_scope.color is defined -%}{% for commit in commits_by_scope.color -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.colour is defined -%}{% for commit in commits_by_scope.colour -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.cpn is defined or commits_by_scope.companion is defined -%} #### ๐Ÿ’ป Companion {% if commits_by_scope.cpn is defined -%}{% for commit in commits_by_scope.cpn -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.companion is defined -%}{% for commit in commits_by_scope.companion -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% set_global has_other = false -%} {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%}{% set_global has_other = true -%}{% endif -%}{% endfor -%} {% if has_other -%} #### ๐Ÿ“ฆ Other {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endif -%}{% endfor -%} {% endif -%} {% endif -%} {% endfor -%} {% for group, commits in commits | group_by(attribute="group") -%} {% if group == "๐Ÿ› Bug Fixes" -%} ### {{ group }} {% set commits_by_scope = commits | group_by(attribute="scope") -%} {% if commits_by_scope.firmware is defined or commits_by_scope.fw is defined -%} #### ๐ŸŽฎ Firmware {% if commits_by_scope.firmware is defined -%}{% for commit in commits_by_scope.firmware -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.fw is defined -%}{% for commit in commits_by_scope.fw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.bw is defined -%} #### ๐Ÿ–ฅ๏ธ Black & White Radio {% for commit in commits_by_scope.bw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%} {% endif -%} {% if commits_by_scope.color is defined or commits_by_scope.colour is defined -%} #### ๐ŸŽจ Color LCD Radio {% if commits_by_scope.color is defined -%}{% for commit in commits_by_scope.color -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.colour is defined -%}{% for commit in commits_by_scope.colour -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.cpn is defined or commits_by_scope.companion is defined -%} #### ๐Ÿ’ป Companion {% if commits_by_scope.cpn is defined -%}{% for commit in commits_by_scope.cpn -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.companion is defined -%}{% for commit in commits_by_scope.companion -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% set_global has_other = false -%} {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%}{% set_global has_other = true -%}{% endif -%}{% endfor -%} {% if has_other -%} #### ๐Ÿ“ฆ Other {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endif -%}{% endfor -%} {% endif -%} {% endif -%} {% endfor -%} {% for group, commits in commits | group_by(attribute="group") -%} {% if group != "๐Ÿš€ Features" and group != "๐Ÿ› Bug Fixes" and group != "๐Ÿ“ฆ Other" -%} ### {{ group }} {% set commits_by_scope = commits | group_by(attribute="scope") -%} {% if commits_by_scope.firmware is defined or commits_by_scope.fw is defined -%} #### ๐ŸŽฎ Firmware {% if commits_by_scope.firmware is defined -%}{% for commit in commits_by_scope.firmware -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.fw is defined -%}{% for commit in commits_by_scope.fw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.bw is defined -%} #### ๐Ÿ–ฅ๏ธ Black & White Radio {% for commit in commits_by_scope.bw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%} {% endif -%} {% if commits_by_scope.color is defined or commits_by_scope.colour is defined -%} #### ๐ŸŽจ Color LCD Radio {% if commits_by_scope.color is defined -%}{% for commit in commits_by_scope.color -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.colour is defined -%}{% for commit in commits_by_scope.colour -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.cpn is defined or commits_by_scope.companion is defined -%} #### ๐Ÿ’ป Companion {% if commits_by_scope.cpn is defined -%}{% for commit in commits_by_scope.cpn -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.companion is defined -%}{% for commit in commits_by_scope.companion -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% set_global has_other = false -%} {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%}{% set_global has_other = true -%}{% endif -%}{% endfor -%} {% if has_other -%} #### ๐Ÿ“ฆ Other {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endif -%}{% endfor -%} {% endif -%} {% endif -%} {% endfor -%} {% for group, commits in commits | group_by(attribute="group") -%} {% if group == "๐Ÿ“ฆ Other" -%} ### {{ group }} {% set commits_by_scope = commits | group_by(attribute="scope") -%} {% if commits_by_scope.firmware is defined or commits_by_scope.fw is defined -%} #### ๐ŸŽฎ Firmware {% if commits_by_scope.firmware is defined -%}{% for commit in commits_by_scope.firmware -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.fw is defined -%}{% for commit in commits_by_scope.fw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.bw is defined -%} #### ๐Ÿ–ฅ๏ธ Black & White Radio {% for commit in commits_by_scope.bw -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%} {% endif -%} {% if commits_by_scope.color is defined or commits_by_scope.colour is defined -%} #### ๐ŸŽจ Color LCD Radio {% if commits_by_scope.color is defined -%}{% for commit in commits_by_scope.color -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.colour is defined -%}{% for commit in commits_by_scope.colour -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% if commits_by_scope.cpn is defined or commits_by_scope.companion is defined -%} #### ๐Ÿ’ป Companion {% if commits_by_scope.cpn is defined -%}{% for commit in commits_by_scope.cpn -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% if commits_by_scope.companion is defined -%}{% for commit in commits_by_scope.companion -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endfor -%}{% endif -%} {% endif -%} {% set_global has_other = false -%} {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%}{% set_global has_other = true -%}{% endif -%}{% endfor -%} {% if has_other -%} #### ๐Ÿ“ฆ Other {% for commit in commits -%}{% if commit.scope != "firmware" and commit.scope != "fw" and commit.scope != "bw" and commit.scope != "color" and commit.scope != "colour" and commit.scope != "cpn" and commit.scope != "companion" -%} - {{ commit.message | split(pat="\\n") | first | trim }} {% endif -%}{% endfor -%} {% endif -%} {% endif -%} {% endfor -%} """ trim = true [git] conventional_commits = true filter_unconventional = false # Only look for nightly, release and rc tags tag_pattern = "^(nightly|v[0-9]+\\.[0-9]+\\.[0-9]+(-rc[0-9]+)?)$" # Ensures it looks at the branch structure topo_order = true # Repect the nearest tag on current branch use_branch_tags = true # Ensure it sorts from the tag forward sort_commits = "oldest" # Commit parsers - order matters! More specific patterns first commit_parsers = [ # Type-based categorization (top-level headings) { message = "^feat", group = "๐Ÿš€ Features" }, { message = "^fix", group = "๐Ÿ› Bug Fixes" }, { message = "^docs?", group = "๐Ÿ“ Documentation" }, { message = "^perf", group = "โšก Performance" }, { message = "^refactor", group = "๐Ÿ”จ Refactoring" }, { message = "^style", group = "๐ŸŽจ Style" }, { message = "^test", group = "๐Ÿงช Tests" }, { message = "^chore", group = "๐Ÿงน Chores" }, { message = "^ci", group = "๐Ÿ”ง CI/CD" }, # Everything else { body = ".*", group = "๐Ÿ“ฆ Other" }, ]