From 2b853de8b21c90c2b97cb38b769963855bb248e1 Mon Sep 17 00:00:00 2001 From: Emin Date: Mon, 27 Apr 2026 11:02:46 +0800 Subject: [PATCH] ci: migrate release changelog generation to git-cliff --- .github/cliff.toml | 53 +++++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 18 +++++++----- 2 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 .github/cliff.toml diff --git a/.github/cliff.toml b/.github/cliff.toml new file mode 100644 index 000000000..5b42985ec --- /dev/null +++ b/.github/cliff.toml @@ -0,0 +1,53 @@ +[changelog] +header = "" +body = """ +## Changes +{% if commits | length == 0 %} +- No changes recorded. +{% else %} +{% for group, commits in commits | group_by(attribute="group") %} +### {{ group | striptags | trim }} +{% for commit in commits %} +- {{ commit.message | upper_first | replace_regex(from=" \\(#\\d+\\)$", to="") }}{% if commit.author and commit.author.name %} by {{ commit.author.name }}{% endif %}{% if commit.remote and commit.remote.username %} (@{{ commit.remote.username }}){% endif %}{% if commit.remote and commit.remote.pr_number %} in [#{{ commit.remote.pr_number }}](https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}/pull/{{ commit.remote.pr_number }}){% else %}{% set pr_matches = commit.raw_message | find_regex(pat="\\(#\\d+\\)") %}{% if pr_matches | length > 0 %}{% set pr_number = pr_matches | first | replace_regex(from="[^0-9]", to="") %} in [#{{ pr_number }}](https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}/pull/{{ pr_number }}){% else %} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}/commit/{{ commit.id }})){% endif %}{% endif %} +{% endfor %} +{% endfor %} +{% endif %} +""" +footer = "" +trim = true + +[remote.github] +owner = "openecos-projects" +repo = "ecc-tools" + +[git] +conventional_commits = true +filter_unconventional = false +split_commits = false +sort_commits = "oldest" +commit_preprocessors = [ + { pattern = "^fixup! ", replace = "" }, + { pattern = "\"+$", replace = "" }, +] +commit_parsers = [ + { message = "^Merge ", skip = true }, + { message = "^feat", group = "Features" }, + { message = "(?i)^(add|implement|enhance|init)\\b", group = "Features" }, + { message = "^fix", group = "Bug Fixes" }, + { message = "(?i)^fix bugs\\b", group = "Bug Fixes" }, + { message = "(?i)^(correct|regenerate|do not|restore)\\b", group = "Bug Fixes" }, + { message = "^docs", group = "Documentation" }, + { message = "(?i)^update .*\\b(readme|guide|docs?|documentation|comment)\\b", group = "Documentation" }, + { message = "^refactor", group = "Refactors" }, + { message = "(?i)^(rename|move|iSTA:|liberty:)\\b", group = "Refactors" }, + { message = "^perf", group = "Performance" }, + { message = "^test", group = "Tests" }, + { message = "^build", group = "Build" }, + { message = "(?i)^nix:", group = "Build" }, + { message = "^ci", group = "CI" }, + { message = "^style", group = "Style" }, + { message = "^chore", group = "Chores" }, + { message = "(?i)^(update (harden flow|params|interface|ecc-tools|ignore|submodules?)\\b|wip:|cleanup\\b)", group = "Chores" }, + { message = "^revert", group = "Reverts" }, + { message = ".*", group = "Other" }, +] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dfdb9464d..e9bed2669 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -67,17 +67,21 @@ jobs: echo "version=$TAG_VERSION" >> "$GITHUB_OUTPUT" echo "full_tag=$FULL_TAG" >> "$GITHUB_OUTPUT" + - name: Generate changelog with git-cliff + uses: orhun/git-cliff-action@v4 + with: + config: .github/cliff.toml + args: --latest --output release-changelog.md + github_token: ${{ github.token }} + env: + GITHUB_REPO: ${{ github.repository }} + - name: Generate release notes id: notes run: | - PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") { - if [[ -n "$PREV_TAG" ]]; then - echo "## Changes" - echo "" - git log --oneline --no-merges "${PREV_TAG}..HEAD" | sed 's/^/- /' - echo "" - fi + cat release-changelog.md + echo "" echo "## Checksums" echo "" echo '```'