Skip to content

Commit b1ed7b7

Browse files
castrojoCopilot
andauthored
feat(ci): add cliff.toml for structured changelog generation (#793)
Adds git-cliff configuration to generate structured changelogs from Conventional Commits. Required by reusable-release.yml which calls generate-release-notes wrapping git-cliff. Note: omits the "chore: promote testing" skip rule — dakota uses OCI digest promotions via "Publish Bluefin dakota", not squash promotion commits. Closes projectbluefin/common#609 Assisted-by: Claude Sonnet 4.5 via pi Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent c7dcd92 commit b1ed7b7

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

cliff.toml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# git-cliff configuration for projectbluefin/dakota
2+
#
3+
# Generates structured changelogs from Conventional Commits.
4+
# Consumed by the release workflow (reusable-release.yml).
5+
#
6+
# Usage in release.yml:
7+
# - name: Install git-cliff
8+
# uses: taiki-e/install-action@<sha>
9+
# with:
10+
# tool: git-cliff
11+
# - name: Generate changelog
12+
# run: git cliff --latest --strip header > CHANGELOG.md
13+
14+
[changelog]
15+
header = ""
16+
body = """
17+
{% for group, commits in commits | group_by(attribute="group") %}
18+
### {{ group | upper_first }}
19+
{% for commit in commits %}
20+
- {{ commit.message | split(pat="\n") | first | trim }}\
21+
{% if commit.scope %} (**{{ commit.scope }}**){% endif %}\
22+
({{ commit.id | truncate(length=7, end="") }})\
23+
{% endfor %}
24+
{% endfor %}
25+
"""
26+
footer = """
27+
---
28+
*Generated by [git-cliff](https://git-cliff.org)*
29+
"""
30+
trim = true
31+
32+
[git]
33+
conventional_commits = true
34+
filter_unconventional = true
35+
split_commits = false
36+
commit_parsers = [
37+
{ message = "^feat", group = "Features" },
38+
{ message = "^fix", group = "Bug Fixes" },
39+
{ message = "^perf", group = "Performance" },
40+
{ message = "^refactor", group = "Refactoring" },
41+
{ message = "^docs", group = "Documentation" },
42+
{ message = "^ci", group = "CI/CD" },
43+
{ message = "^chore\\(deps\\)", group = "Dependencies" },
44+
{ message = "^chore", group = "Miscellaneous" },
45+
{ message = "^build", group = "Build" },
46+
{ message = "^test", group = "Testing" },
47+
{ message = "^revert", group = "Reverts" },
48+
# Skip merge commits
49+
{ message = "^Merge", skip = true },
50+
]
51+
filter_commits = false
52+
tag_pattern = "v[0-9].*"
53+
sort_commits = "newest"

0 commit comments

Comments
 (0)