Skip to content

Commit 6ab586f

Browse files
committed
refactor(ci): replace bash changelog with git-cliff
1 parent db4500c commit 6ab586f

File tree

2 files changed

+43
-40
lines changed

2 files changed

+43
-40
lines changed

.github/workflows/ci.yml

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -114,46 +114,20 @@ jobs:
114114
- name: Generate changelog (for stable releases)
115115
if: startsWith(github.ref, 'refs/tags/v')
116116
id: changelog
117+
uses: orhun/git-cliff-action@v4
118+
with:
119+
config: cliff.toml
120+
args: --latest --strip header
121+
env:
122+
OUTPUT: CHANGES.md
123+
GITHUB_REPO: ${{ github.repository }}
124+
125+
- name: Read changelog
126+
if: startsWith(github.ref, 'refs/tags/v')
127+
id: read_changelog
117128
run: |
118-
CURRENT_TAG=${GITHUB_REF#refs/tags/}
119-
PREVIOUS_TAG=$(git describe --tags --abbrev=0 "${CURRENT_TAG}^" 2>/dev/null || echo "")
120-
121-
if [ -z "$PREVIOUS_TAG" ]; then
122-
COMMITS=$(git log --pretty=format:"- %s" --reverse)
123-
else
124-
COMMITS=$(git log ${PREVIOUS_TAG}..${CURRENT_TAG} --pretty=format:"- %s" --reverse)
125-
fi
126-
127-
# Categorize commits (handle scoped commits like fix(ci): or chore(deps):)
128-
FEATURES=$(echo "$COMMITS" | grep "^- feat" | sed 's/^- feat[^:]*: /- /' || true)
129-
FIXES=$(echo "$COMMITS" | grep "^- fix" | sed 's/^- fix[^:]*: /- /' || true)
130-
REFACTOR=$(echo "$COMMITS" | grep "^- refactor" | sed 's/^- refactor[^:]*: /- /' || true)
131-
CHORES=$(echo "$COMMITS" | grep "^- chore" | sed 's/^- chore[^:]*: /- /' || true)
132-
CI=$(echo "$COMMITS" | grep "^- ci" | sed 's/^- ci[^:]*: /- /' || true)
133-
DOCS=$(echo "$COMMITS" | grep "^- docs" | sed 's/^- docs[^:]*: /- /' || true)
134-
135-
CHANGELOG=""
136-
if [ -n "$FEATURES" ]; then
137-
CHANGELOG="${CHANGELOG}### Features\n${FEATURES}\n\n"
138-
fi
139-
if [ -n "$FIXES" ]; then
140-
CHANGELOG="${CHANGELOG}### Bug Fixes\n${FIXES}\n\n"
141-
fi
142-
if [ -n "$REFACTOR" ]; then
143-
CHANGELOG="${CHANGELOG}### Code Refactoring\n${REFACTOR}\n\n"
144-
fi
145-
if [ -n "$DOCS" ]; then
146-
CHANGELOG="${CHANGELOG}### Documentation\n${DOCS}\n\n"
147-
fi
148-
if [ -n "$CI" ]; then
149-
CHANGELOG="${CHANGELOG}### CI/CD\n${CI}\n\n"
150-
fi
151-
if [ -n "$CHORES" ]; then
152-
CHANGELOG="${CHANGELOG}### Maintenance\n${CHORES}\n\n"
153-
fi
154-
155129
echo "changelog<<EOF" >> "$GITHUB_OUTPUT"
156-
echo -e "$CHANGELOG" >> "$GITHUB_OUTPUT"
130+
cat CHANGES.md >> "$GITHUB_OUTPUT"
157131
echo "EOF" >> "$GITHUB_OUTPUT"
158132
159133
- name: Update plist version
@@ -176,8 +150,8 @@ jobs:
176150
A reliable Alfred workflow for timezone lookups and time conversion.
177151
178152
## What's Changed
179-
180-
${{ steps.changelog.outputs.changelog }}
153+
154+
${{ steps.read_changelog.outputs.changelog }}
181155
182156
## Installation
183157

cliff.toml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
[changelog]
2+
header = ""
3+
body = """
4+
{% for group, commits in commits | group_by(attribute="group") %}
5+
### {{ group | upper_first }}
6+
{% for commit in commits %}
7+
- {{ commit.message | split(pat="\n") | first | trim }}\
8+
{% endfor %}
9+
10+
{% endfor %}
11+
"""
12+
trim = true
13+
14+
[git]
15+
conventional_commits = true
16+
filter_unconventional = true
17+
split_commits = false
18+
commit_parsers = [
19+
{ message = "^feat", group = "Features" },
20+
{ message = "^fix", group = "Bug Fixes" },
21+
{ message = "^refactor", group = "Refactoring" },
22+
{ message = "^docs", group = "Documentation" },
23+
{ message = "^ci", group = "CI/CD" },
24+
{ message = "^chore", group = "Maintenance" },
25+
{ message = "^perf", group = "Performance" },
26+
{ message = "^test", group = "Testing" },
27+
]
28+
filter_commits = false
29+
tag_pattern = "v[0-9].*"

0 commit comments

Comments
 (0)