diff --git a/.github/cliff.toml b/.github/cliff.toml new file mode 100644 index 00000000..779513e9 --- /dev/null +++ b/.github/cliff.toml @@ -0,0 +1,79 @@ +# git-cliff ~ default configuration file +# https://git-cliff.org/docs/configuration +# +# Lines starting with "#" are comments. +# Configuration options are organized into tables and keys. +# See documentation for more information on available options. + +[changelog] +# template for the changelog header +header = """ +# Changelog\n +All notable changes to this project will be documented in this file.\n +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + {% if commit.github.pr_labels is containing("dependencies") %} + {% continue %} + {% endif %} + - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**] {% endif %}\ + {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" +# template for the changelog footer +footer = """ +{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution in #{{ contributor.pr_number }} +{%- endfor -%} +""" +# remove the leading and trailing s +trim = true +# postprocessors +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] + +[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 = "^feat", group = "๐Ÿš€ Features" }, + { message = "^fix", group = "๐Ÿ› Bug Fixes" }, + { message = "^doc", group = "๐Ÿ“š Documentation" }, + { message = "^perf", group = "โšก Performance" }, + { message = "^refactor", group = "๐Ÿšœ Refactor" }, + { message = "^style", group = "๐ŸŽจ Styling" }, + { message = "^test", group = "๐Ÿงช Testing" }, + { message = "^chore\\(release\\): prepare for", skip = true }, + { message = "^chore\\(deps.*\\)", skip = true }, + { message = "^chore\\(pr\\)", skip = true }, + { message = "^chore\\(pull\\)", skip = true }, + { message = "^chore|^ci", group = "โš™๏ธ Miscellaneous Tasks" }, + { body = ".*security", group = "๐Ÿ›ก๏ธ Security" }, + { message = "^revert", group = "โ—€๏ธ Revert" }, +] +# 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" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 446d3cd3..4b9f1626 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ on: branches: [ "dev" ] concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha || github.ref }} cancel-in-progress: true env: @@ -207,7 +207,8 @@ jobs: steps: - uses: actions/checkout@v4 with: - submodules: true + fetch-depth: 0 + fetch-tags: true - name: Merge binaries uses: actions/upload-artifact/merge@v4 @@ -222,23 +223,50 @@ jobs: name: binaries path: ./packages + - name: Delete previous latest tag + run: | + git tag -d latest || true + git push origin :refs/tags/latest || true + gh release list | grep Draft | awk '{print $1 " \t"}' | while read -r line; do gh release delete -y "$line"; done + env: + GH_TOKEN: ${{ github.token }} + + - name: Create new latest tag + if: startsWith(github.ref, 'refs/heads/master') + run: | + git tag latest + git push origin latest + + - name: Generate a changelog + uses: orhun/git-cliff-action@main + id: git-cliff + with: + config: .github/cliff.toml + args: --latest --strip header + env: + GITHUB_REPO: ${{ github.repository }} + - name: Github stable release - uses: "mathieucarbou/marvinpinto-action-automatic-releases@master" + uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/v') with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" + token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false + generate_release_notes: false + body: "${{ steps.git-cliff.outputs.content }}" files: | packages/* LICENSE - name: Github nightly release - uses: "mathieucarbou/marvinpinto-action-automatic-releases@master" + uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/heads/dev') with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" + token: "${{ secrets.GITHUB_TOKEN }}" prerelease: true - automatic_release_tag: "latest" + generate_release_notes: false + body: "${{ steps.git-cliff.outputs.content }}" + tag_name: "latest" files: | packages/* LICENSE @@ -249,8 +277,6 @@ jobs: if: startsWith(github.ref, 'refs/tags/v') steps: - uses: actions/checkout@v4 - with: - submodules: true - name: Set up QEMU uses: docker/setup-qemu-action@v3