Skip to content
This repository has been archived by the owner on Oct 14, 2024. It is now read-only.

Commit

Permalink
ci: add changelog generation
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisgacsal committed Nov 6, 2023
1 parent b8355d5 commit 3ae9be2
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -460,3 +460,11 @@ publish-helm-chart: $(DIST_DIR)/vmclarity-$(VERSION).tgz ## Create Helm Chart bu
$(DIST_DIR)/%.sha256sum: | $(DIST_DIR)
$(info --- Generate SHA256 for $(notdir $@))
shasum -a 256 $(basename $@) | sed "s@$(dir $@)@@" > $@

.PHONY: generate-release-notes
generate-release-notes: $(DIST_DIR)/RELEASE.md ## Generate Release Notes

$(DIST_DIR)/RELEASE.md: $(DIST_DIR)/CHANGELOG.md

$(DIST_DIR)/CHANGELOG.md: $(ROOT_DIR)/.git/refs/heads/$(shell git rev-parse --abbrev-ref HEAD) $(ROOT_DIR)/cliff.toml $(ROOT_DIR)/release.tmpl
$(GITCLIFF_BIN) -vv --strip all --unreleased --tag $(VERSION) --output $@
86 changes: 86 additions & 0 deletions cliff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# 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 = ""
# 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 | upper_first }}
{% for commit in commits %}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}{% if commit.breaking %}[**BREAKING**] {% endif %}{{ commit.message | upper_first }}\
{% endfor %}
{% endfor %}\n
"""
# remove the leading and trailing whitespace from the template
trim = true
# changelog footer
footer = ""
# postprocessors
postprocessors = [
{ pattern = '<REPO>', replace = "https://github.com/openclarity/vmclarity" }, # 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 = [
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/pull/${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 = 'bin/typos --write-changes -' },
]
# regex for parsing and grouping commits
commit_parsers = [
{ message = "^feat\\(ci\\)", group = "Miscellaneous Tasks" },
{ message = "^refactor\\(ci\\)", group = "Miscellaneous Tasks" },
{ message = "^feat\\(e2e\\)", group = "Testing" },
{ message = "^fix\\(ci\\)", group = "Miscellaneous Tasks" },
# TODO(chrisgacsal): remove the rules above for the next release
{ 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" },
]
# protect breaking changes from being skipped due to matching a skipping commit_parser
protect_breaking_commits = true
# filter out the commits that are not matched by commit parsers
filter_commits = false
# regex for matching git tags
tag_pattern = "v[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 = "newest"
# limit the number of commits included in the changelog.
# limit_commits = 42
62 changes: 62 additions & 0 deletions makefile.d/20-tools.mk
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,65 @@ bin/helm-docs-$(HELMDOCS_VERSION): | $(BIN_DIR)
@curl -sSfL 'https://github.com/norwoodj/helm-docs/releases/download/v$(HELMDOCS_VERSION)/helm-docs_$(HELMDOCS_VERSION)_$(HELMDOCS_OSTYPE)_$(HELMDOCS_ARCH).tar.gz' --output - \
| tar xvOf - 'helm-docs' > $@
@chmod +x $@

####
## git-cliff CLI
####

GITCLIFF_BIN := $(BIN_DIR)/git-cliff
GITCLIFF_VERSION := 1.4.0
GITCLIFF_OSTYPE := $(OSTYPE)
GITCLIFF_ARCH := $(ARCHTYPE)
GITCLIFF_URL =

ifeq ($(GITCLIFF_OSTYPE),darwin)
GITCLIFF_OSTYPE = apple-darwin
endif
ifeq ($(GITCLIFF_OSTYPE),linux)
GITCLIFF_OSTYPE = unknown-linux-gnu
endif
ifeq ($(GITCLIFF_ARCH),amd64)
GITCLIFF_ARCH = x86_64
endif
ifeq ($(GITCLIFF_ARCH),arm64)
GITCLIFF_ARCH = aarch64
endif

bin/git-cliff: bin/git-cliff-$(GITCLIFF_VERSION)
@ln -sf $(notdir $<) $@

bin/git-cliff-$(GITCLIFF_VERSION): | $(BIN_DIR)
@curl -sSfL 'https://github.com/orhun/git-cliff/releases/download/v$(GITCLIFF_VERSION)/git-cliff-$(GITCLIFF_VERSION)-$(GITCLIFF_ARCH)-$(GITCLIFF_OSTYPE).tar.gz' --output - \
| tar xvOf - 'git-cliff-$(GITCLIFF_VERSION)/git-cliff' > $@
@chmod +x $@

####
## typos CLI
####

TYPOS_BIN := $(BIN_DIR)/typos
TYPOS_VERSION := 1.4.0
TYPOS_OSTYPE := $(OSTYPE)
TYPOS_ARCH := $(ARCHTYPE)
TYPOS_URL =

ifeq ($(TYPOS_OSTYPE),darwin)
TYPOS_OSTYPE = apple-darwin
endif
ifeq ($(TYPOS_OSTYPE),linux)
TYPOS_OSTYPE = unknown-linux-gnu
endif
ifeq ($(TYPOS_ARCH),amd64)
TYPOS_ARCH = x86_64
endif
ifeq ($(TYPOS_ARCH),arm64)
TYPOS_ARCH = aarch64
endif

bin/typos: bin/typos-$(TYPOS_VERSION)
@ln -sf $(notdir $<) $@

bin/typos-$(TYPOS_VERSION): | $(BIN_DIR)
@curl -sSfL 'https://github.com/crate-ci/typos/releases/download/v$(TYPOS_VERSION)/typos-v$(TYPOS_VERSION)-$(TYPOS_ARCH)-$(TYPOS_OSTYPE).tar.gz' --output - \
| tar xvOf - './typos' > $@
@chmod +x $@

0 comments on commit 3ae9be2

Please sign in to comment.