Skip to content

Commit

Permalink
ci: Generate changelog and release notes automatically (#15)
Browse files Browse the repository at this point in the history
* Use git-cliff to generate changelog

* Generate changelog and release notes automatically
  • Loading branch information
janbuchar committed May 16, 2024
1 parent 45256da commit a878b2c
Show file tree
Hide file tree
Showing 5 changed files with 244 additions and 415 deletions.
37 changes: 32 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,32 +26,47 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up git
run: |
git config --global user.email "ci@bucharjan.cz"
git config --global user.name "Jan Buchar"
- name: Create branch
run: |
git switch -c ${{ env.PR_BRANCH }}
- name: Bump version in package.json
id: bump_version
run: |
npm version ${{ github.event.inputs.release_type }}
npm version --no-git-tag-version ${{ github.event.inputs.release_type }}
echo version=$( node -p "require('./package.json').version" ) >> "$GITHUB_OUTPUT"
git push --set-upstream origin ${{ env.PR_BRANCH }}
- name: Create PR
- name: Update changelog
uses: orhun/git-cliff-action@v3
with:
config: cliff.toml
args: --tag "release-${{ steps.bump_version.outputs.version }}"
env:
OUTPUT: CHANGELOG.md

- name: Push branch and create PR
run: |
git commit -am "Release ${{ steps.bump_version.outputs.version }}"
git push --set-upstream origin ${{ env.PR_BRANCH }}
gh pr create \
--base master \
--head ${{ env.PR_BRANCH }} \
--title "chore: Release ${{ steps.bump_version.outputs.version }} [skip-ci]" \
--body "Automated pull request - update to ${{ steps.bump_version.outputs.version }}"
env:
GH_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
- name: Approve and merge PR

- name: Merge PR
id: merge_pr
run: |
# gh pr review --approve ${{ env.PR_BRANCH }}
gh pr merge --squash --auto --delete-branch ${{ env.PR_BRANCH }}
echo sha=$( gh pr view --json mergeCommit ${{ env.PR_BRANCH }} | jq --raw-output .mergeCommit.oid ) >> "$GITHUB_OUTPUT"
env:
Expand All @@ -63,12 +78,24 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Generate release notes
uses: orhun/git-cliff-action@v3
with:
config: cliff.toml
args: --tag "release-${{ needs.prepare_metadata.outputs.version }}" --unreleased --strip all
env:
OUTPUT: release_notes.md

- name: Create release
uses: softprops/action-gh-release@v2
with:
tag_name: release-${{ needs.prepare_metadata.outputs.version }}
name: Release ${{ needs.prepare_metadata.outputs.version }}
target_commitish: ${{ needs.prepare_metadata.outputs.release_sha }}
body_path: release_notes.md

npm_publish:
runs-on: ubuntu-latest
Expand Down
13 changes: 10 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
# 0.1.0 (2024-04-30)
# Changelog

All notable changes to this project will be documented in this file.

### Features
## [0.1.0] - 2024-04-28

* Migrate to payload 2.0 ([7f84137](https://github.com/janbuchar/payload-oapi/commit/7f841378b364e94f2ec01b7b6b72912c97fd973b))
### 🚀 Features

- Migrate to payload 2.0

### ⚙️ Miscellaneous Tasks

- Set up release pipeline
- Set up NPM publishing

<!-- generated by git-cliff -->
89 changes: 89 additions & 0 deletions cliff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# 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]
# 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 = """
{% if version %}\
## [{{ version | trim_start_matches(pat="release-") }}] - {{ 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 %}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
{% if commit.breaking %}[**breaking**] {% endif %}\
{{ commit.message | upper_first }}\
{% endfor %}
{% endfor %}\n
"""
# template for the changelog footer
footer = """
<!-- generated by git-cliff -->
"""
# remove the leading and trailing s
trim = true
# postprocessors
postprocessors = [
# { pattern = '<REPO>', 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}](<REPO>/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 = "<!-- 0 -->🚀 Features" },
{ message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes" },
{ message = "^doc", group = "<!-- 3 -->📚 Documentation" },
{ message = "^perf", group = "<!-- 4 -->⚡ Performance" },
{ message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
{ message = "^style", group = "<!-- 5 -->🎨 Styling" },
{ message = "^test", group = "<!-- 6 -->🧪 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 = "<!-- 7 -->⚙️ Miscellaneous Tasks" },
{ body = ".*security", group = "<!-- 8 -->🛡️ Security" },
{ message = "^revert", group = "<!-- 9 -->◀️ Revert" },
]
# protect breaking changes from being skipped due to matching a skipping commit_parser
protect_breaking_commits = false
# filter out the commits that are not matched by commit parsers
filter_commits = false
# regex for matching git tags
tag_pattern = "release-[0-9].*"
# regex for skipping tags
# skip_tags = ""
# regex for ignoring tags
# ignore_tags = ""
# sort the tags topologically
topo_order = false
# sort the commits inside sections by oldest/newest order
sort_commits = "oldest"
# limit the number of commits included in the changelog.
# limit_commits = 42
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
},
"dependencies": {
"@openapi-contrib/json-schema-to-openapi-schema": "^3.0.1",
"conventional-changelog-cli": "^4.1.0",
"openapi-types": "^12.1.0",
"util": "^0.12.5"
},
Expand All @@ -49,6 +48,7 @@
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "2.25.4",
"eslint-plugin-prettier": "^4.0.0",
"git-cliff": "^2.2.2",
"payload": "^2.0.14",
"prettier": "^2.7.1",
"react": "^18.0.0",
Expand Down
Loading

0 comments on commit a878b2c

Please sign in to comment.