-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcliff.toml
More file actions
107 lines (93 loc) · 5.48 KB
/
Copy pathcliff.toml
File metadata and controls
107 lines (93 loc) · 5.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# cliff.toml — git-cliff changelog configuration for ktestify
# Docs: https://git-cliff.org/docs/configuration
# ── GitHub integration ─────────────────────────────────────────────────────────
# Enriches commits with PR numbers, usernames, and first-time contributor info.
# Token is supplied at runtime via the GITHUB_TOKEN env variable.
[remote.github]
owner = "ktestify"
repo = "ktestify-core"
# ── Changelog layout ──────────────────────────────────────────────────────────
[changelog]
header = """
# Changelog
All notable changes to this project will be documented in this file.\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 %}
- {% if commit.breaking %}⚠️ **BREAKING** {% endif %}\
{{ commit.message | split(pat="\n") | first | upper_first | trim }}\
{% if commit.scope %} *({{ commit.scope }})*{% endif %}\
{% if commit.remote.username %} — [@{{ commit.remote.username }}](https://github.com/{{ commit.remote.username }}){% endif %}\
{% if commit.remote.pr_number %} ([#{{ commit.remote.pr_number }}](https://github.com/ktestify/ktestify-core/pull/{{ commit.remote.pr_number }})){% endif %}
{% endfor %}
{% endfor %}\
{% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %}
### 🎉 New Contributors
{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}
{% if contributor.pr_number %}- @{{ contributor.username }} made their first contribution \
in [#{{ contributor.pr_number }}](https://github.com/ktestify/ktestify-core/pull/{{ contributor.pr_number }})
{% endif %}
{%- endfor %}
{% endif %}\n
"""
footer = """
---
*Generated by [git-cliff](https://github.com/orhun/git-cliff)*
"""
trim = true
# ── Git commit parsing ────────────────────────────────────────────────────────
[git]
conventional_commits = true
# Keep filter_unconventional = false so that any commits that don't strictly
# follow Conventional Commits still reach the commit_parsers below.
filter_unconventional = false
split_commits = false
commit_parsers = [
# ── skip noise ──────────────────────────────────────────────────────────
{ message = "^Merge", skip = true }, # merge commits
{ message = "^chore\\(release\\)", skip = true }, # release bot commits
{ message = "^deps\\(ci\\)", skip = true }, # CI-only changes
{ message = "^style", skip = true }, # formatting-only
{ message = "^docs\\(changelog\\)", skip = true }, # legacy changelog bot commits
# ── Dependabot / deps ────────────────────────────────────────────────────
# Dependabot uses "deps(scope):" with include: "scope", producing commits
# like "deps(kafka): bump org.apache.kafka …". Match on "^deps" so all
# package-ecosystem updates are captured in one section.
{ message = "^deps", group = "⬆️ Dependency Updates" },
# ── conventional types → sections ───────────────────────────────────────
{ message = "^feat", group = "✨ Features" },
{ message = "^fix", group = "🐛 Bug Fixes" },
{ message = "^perf", group = "⚡ Performance" },
{ message = "^refactor", group = "♻️ Refactoring" },
{ message = "^test", group = "🧪 Tests" },
{ message = "^doc", group = "📖 Documentation" },
{ message = "^revert", group = "⏪ Reverts" },
{ message = "^chore", group = "🔧 Miscellaneous" }, # catch-all chore
# ── drop everything else (unrecognised / pure noise) ────────────────────
# This catches merge commits that slipped through, "First commit",
# "Spotless apply", etc. — anything not matched by a rule above.
{ message = ".*", skip = true },
]
protect_breaking_commits = true # never skip a commit flagged as breaking
filter_commits = false
tag_pattern = "v[0-9].*"
skip_tags = "alpha|beta"
ignore_tags = "rc"
topo_order = false
sort_commits = "oldest"
link_parsers = [
# Auto-link #123 → GitHub issue
{ pattern = "#(\\d+)", href = "https://github.com/ktestify/ktestify-core/issues/$1" },
]
# ── Automatic version bumping ─────────────────────────────────────────────────
[bump]
features_always_bump_minor = true # feat → minor bump
breaking_always_bump_major = true # BREAKING CHANGE → major bump
initial_tag = "0.1.0"