build: add tool to auto-generate changelog (#5)

Add the `git-chglog` tool to handle auto-generating the project changelog
based on the commit history. Add a custom configuration and file template.
Update the Makefile to include a command to generate the changelog.
This commit is contained in:
Hector 2021-02-07 11:15:41 +00:00
parent 3cb7c71b17
commit 50e1d4b8c8
4 changed files with 86 additions and 0 deletions

View file

@ -14,6 +14,9 @@ format:
go fmt $(go list ./... | grep -v /vendor/) go fmt $(go list ./... | grep -v /vendor/)
go vet $(go list ./... | grep -v /vendor/) go vet $(go list ./... | grep -v /vendor/)
generateChangelog:
./tools/git-chglog_linux_amd64 --config tools/chglog/config.yml 0.0.0.. > CHANGELOG.md
build/snapshot: build/snapshot:
./tools/goreleaser_linux_amd64 --snapshot --rm-dist --skip-publish ./tools/goreleaser_linux_amd64 --snapshot --rm-dist --skip-publish

60
tools/chglog/CHANGELOG.tpl.md Executable file
View file

@ -0,0 +1,60 @@
# CHANGELOG
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog], and this project adheres to [Semantic Versioning].
{{ if .Versions -}}
## [Unreleased]
{{- if .Unreleased.CommitGroups }}
{{ template "commits" .Unreleased.CommitGroups }}
{{- end -}}
{{- if .Unreleased.NoteGroups -}}
{{ template "notes" .Unreleased.NoteGroups }}
{{- end -}}
{{- end -}}
{{ range .Versions -}}
## {{ if .Tag.Previous }}[{{ .Tag.Name }}]{{ else }}{{ .Tag.Name }}{{ end }} - {{ datetime "2006-01-02" .Tag.Date }}
{{ template "commits" .CommitGroups }}
{{- if .NoteGroups -}}
{{ template "notes" .NoteGroups }}
{{- end -}}
{{ end }}
---
*This changelog is automatically generated by [git-chglog]*
[Keep a Changelog]: https://keepachangelog.com/en/1.0.0/
[Semantic Versioning]: https://semver.org/spec/v2.0.0.html
[git-chglog]: https://github.com/git-chglog/git-chglog
{{- if .Versions }}
[Unreleased]: {{ .Info.RepositoryURL }}/compare/{{ $latest := index .Versions 0 }}{{ $latest.Tag.Name }}...develop
{{ range .Versions -}}
{{ if .Tag.Previous -}}
[{{ .Tag.Name }}]: {{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}
{{ end -}}
{{ end -}}
{{ end -}}
{{- define "notes" }}
{{- range . -}}
### {{ .Title }}
{{ range .Notes -}}
- {{ .Body }}
{{ end }}
{{ end }}
{{ end -}}
{{- define "commits" }}
{{- range . -}}
{{ if or (eq .RawTitle "feat") (eq .RawTitle "fix") }}
### {{ .Title }}
{{ range .Commits -}}
- ({{ .Hash.Short }}) {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Header }}
{{ end }}
{{ end -}}
{{ end -}}
{{ end -}}

23
tools/chglog/config.yml Executable file
View file

@ -0,0 +1,23 @@
style: gitlab
template: CHANGELOG.tpl.md
info:
title: CHANGELOG
repository_url: https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter
options:
commit_groups:
title_maps:
feat: Added
fix: Fixed
revert: Reverted
header:
pattern: "^(\\w*)\\:\\s(.*)$"
pattern_maps:
- Type
- Subject
notes:
keywords:
- BREAKING CHANGE
- Changed
- Deprecated
- Removed
- Security

BIN
tools/git-chglog_linux_amd64 Executable file

Binary file not shown.