diff --git a/.github/release.yml b/.github/release.yml deleted file mode 100644 index 19187f7e..00000000 --- a/.github/release.yml +++ /dev/null @@ -1,11 +0,0 @@ -changelog: - categories: - - title: 🏕 Features - labels: - - '*' - exclude: - labels: - - renovate - - title: 👒 Updates - labels: - - renovate diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 752a9fc4..c6318dba 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -12,6 +12,11 @@ jobs: name: Release runs-on: ubuntu-24.04 steps: + - name: Checkout + uses: actions/checkout@v4.2.2 + with: + fetch-depth: 0 + - name: Get Previous Release Tag and Determine Next Tag id: release-tag uses: actions/github-script@v7.0.1 @@ -46,8 +51,19 @@ jobs: return `${nextMajorMinor}.${nextPatch}`; + - name: Generate a changelog + uses: orhun/git-cliff-action@v4.4.2 + id: git-cliff + with: + config: cliff.toml + args: --unreleased --tag ${{ steps.release-tag.outputs.result }} + env: + OUTPUT: CHANGELOG.md + - name: Release uses: softprops/action-gh-release@v2.2.0 with: generate_release_notes: true tag_name: ${{ steps.release-tag.outputs.result }} + body: ${{ steps.git-cliff.outputs.changelog }} + draft: true diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 00000000..017668be --- /dev/null +++ b/cliff.toml @@ -0,0 +1,63 @@ +[changelog] +# template for the changelog header +header = """ +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +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 | striptags | trim | upper_first }} + {% for commit in commits | unique(attribute="message") %} + - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**] {% endif %}\ + {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" +# template for the changelog footer +footer = """ +""" +# remove the leading and trailing s +trim = true +# postprocessors +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] +# render body even when there are no releases to process +# render_always = true +# output file path +# output = "test.md" + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + # Replace issue numbers + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, + # Check spelling of the commit with https://github.com/crate-ci/typos + # If the spelling is incorrect, it will be automatically fixed. + #{ pattern = '.*', replace_command = 'typos --write-changes -' }, +] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^chore\\(deps.*\\).*helm\\ release.*", group = " Updates - Helm Charts" }, + { message = "^chore\\(deps.*\\).*docker\\ tag.*", group = " Updates - Container Tags" }, + { message = "^chore\\(deps.*\\).*docker\\ digest.*", group = " Updates - Container Digest" }, + { message = ".*", group = " What's Changed" }, +] +# filter out the commits that are not matched by commit parsers +filter_commits = false +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "oldest"