diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 000000000000..afba4ee89ccf --- /dev/null +++ b/cliff.toml @@ -0,0 +1,96 @@ +# https://git-cliff.org/docs/configuration + +[remote.github] +owner = "GreptimeTeam" +repo = "greptimedb" + +[changelog] +header = "" +footer = "" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +# {{ version }} + +Release date: {{ timestamp | date(format="%B %d, %Y") }} + +{%- set breakings = commits | filter(attribute="breaking", value=true) -%} +{%- if breakings | length > 0 %} + +## Breaking changes + {% for commit in breakings %} + * {{ commit.github.pr_title }}\ + {% if commit.github.username %} by \ + {% set author = commit.github.username -%} + [@{{ author }}](https://github.com/{{ author }}) + {%- endif -%} + {% if commit.github.pr_number %} in \ + {% set number = commit.github.pr_number -%} + [#{{ number }}]({{ self::remote_url() }}/pull/{{ number }}) + {%- endif %} + {%- endfor %} +{%- endif -%} + +{%- set grouped_commits = commits | filter(attribute="breaking", value=false) | group_by(attribute="group") -%} +{% for group, commits in grouped_commits %} + + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + * {{ commit.github.pr_title }}\ + {% if commit.github.username %} by \ + {% set author = commit.github.username -%} + [@{{ author }}](https://github.com/{{ author }}) + {%- endif -%} + {% if commit.github.pr_number %} in \ + {% set number = commit.github.pr_number -%} + [#{{ number }}]({{ self::remote_url() }}/pull/{{ number }}) + {%- endif %} + {%- endfor -%} +{% endfor %}\n + +{%- macro remote_url() -%} + https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} +{%- endmacro -%} +""" +trim = true + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "๐Ÿš€ Features" }, + { message = "^fix", group = "๐Ÿ› Bug Fixes" }, + { message = "^doc", group = "๐Ÿ“š Documentation" }, + { message = "^perf", group = "โšก Performance" }, + { message = "^refactor", group = "๐Ÿšœ Refactor" }, + { message = "^style", group = "๐ŸŽจ Styling" }, + { message = "^test", group = "๐Ÿงช Testing" }, + { message = "^chore\\(release\\): prepare for", skip = true }, + { message = "^chore\\(deps.*\\)", skip = true }, + { message = "^chore\\(pr\\)", skip = true }, + { message = "^chore\\(pull\\)", skip = true }, + { message = "^chore|^ci", group = "โš™๏ธ Miscellaneous Tasks" }, + { body = ".*security", group = "๐Ÿ›ก๏ธ Security" }, + { message = "^revert", group = "โ—€๏ธ Revert" }, +] +# protect breaking changes from being skipped due to matching a skipping commit_parser +protect_breaking_commits = false +# filter out the commits that are not matched by commit parsers +filter_commits = false +# regex for matching git tags +# tag_pattern = "v[0-9].*" +# regex for skipping tags +# skip_tags = "" +# regex for ignoring tags +ignore_tags = ".*-nightly-.*" +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "oldest" +# limit the number of commits included in the changelog. +# limit_commits = 42