summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md28
-rw-r--r--cliff.toml44
2 files changed, 72 insertions, 0 deletions
diff --git a/README.md b/README.md
index 67c0312..a1b6d42 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,34 @@ will automatically build the project and proxy all calls to the local build dire
./test/bin/pkgctl --help
```
+### Commit messages
+
+All commits must follow [conventional commits](https://www.conventionalcommits.org).
+
+The following groups are allowed:
+
+- chore
+- feat
+- fix
+- doc
+- perf
+- test
+
+To override the scope for the changelog entry use the `Component:` trailer.
+
+Example:
+
+```
+feat(db): yay mega cool feature
+
+Very long and useful description.
+
+Fixes #1
+Fixes #2
+
+Component: pkgctl db remove
+```
+
## Releasing
1. bump the version in the Makefile
diff --git a/cliff.toml b/cliff.toml
new file mode 100644
index 0000000..597d778
--- /dev/null
+++ b/cliff.toml
@@ -0,0 +1,44 @@
+[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 | upper_first }}
+ {% for commit in commits | sort(attribute="message") %}
+ - {% set component = commit.footers | filter(attribute="token", value="Component") | map(attribute="value") | join %}
+ {%- if component %}{{ component }}: {% elif commit.scope %}{{ commit.scope }}: {% endif %}
+ {{- commit.message | upper_first }}
+ {%- set fixes = commit.footers | filter(attribute="token", value="Fixes") %}
+ {%- for fix in fixes %}{{ fix.separator }}{{ fix.value }}{% endfor %}
+ {%- endfor %}
+{% endfor %}
+
+"""
+footer = ""
+
+# remove the leading and trailing whitespaces from the template
+trim = true
+
+[git]
+# allow only conventional commits
+# https://www.conventionalcommits.org
+conventional_commits = true
+# regex for parsing and grouping commits
+commit_parsers = [
+ { message = "^chore\\(release\\): version", skip = true},
+ { message = "^feat", group = "Features"},
+ { message = "^fix", group = "Bug Fixes"},
+ { message = "^doc", group = "Documentation"},
+ { message = "^perf", group = "Performance"},
+ { message = "^test", group = "Testing"},
+ { message = "^chore", group = "Miscellaneous Tasks"},
+ { body = ".*security", group = "Security"},
+]
+# filter out the commits that are not matched by commit parsers
+filter_commits = false
+# glob pattern for matching git tags
+tag_pattern = "*v[0-9]*"