From 015bf993bcfe475b3803fd27d2156d8ac199fb9b Mon Sep 17 00:00:00 2001 From: Volker Schukai <volker.schukai@schukai.com> Date: Sun, 18 Sep 2022 17:43:45 +0200 Subject: [PATCH] chore makefile and changelog Signed-off-by: Volker Schukai <volker.schukai@schukai.com> --- .chglog/CHANGELOG.tpl.md | 27 +++++++++++++++++++ .chglog/config.yml | 57 ++++++++++++++++++++++++++++++++++++++++ Makefile | 16 ++++++++--- README.md | 32 +++++++++++++++------- 4 files changed, 120 insertions(+), 12 deletions(-) create mode 100755 .chglog/CHANGELOG.tpl.md create mode 100755 .chglog/config.yml diff --git a/.chglog/CHANGELOG.tpl.md b/.chglog/CHANGELOG.tpl.md new file mode 100755 index 0000000..8e98c0b --- /dev/null +++ b/.chglog/CHANGELOG.tpl.md @@ -0,0 +1,27 @@ +{{ range .Versions }} +<a name="{{ .Tag.Name }}"></a> +## {{ if .Tag.Previous }}[{{ .Tag.Name }}]{{ else }}{{ .Tag.Name }}{{ end }} - {{ datetime "2006-01-02" .Tag.Date }} +{{ range .CommitGroups -}} +### {{ .Title }} +{{ range .Commits -}} +- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }} +{{ end }} +{{ end -}} + +{{- if .NoteGroups -}} +{{ range .NoteGroups -}} +### {{ .Title }} +{{ range .Notes }} +{{ .Body }} +{{ end }} +{{ end -}} +{{ end -}} +{{ end -}} + +{{- if .Versions }} +{{ range .Versions -}} +{{ if .Tag.Previous -}} +[{{ .Tag.Name }}]: {{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }} +{{ end -}} +{{ end -}} +{{ end -}} \ No newline at end of file diff --git a/.chglog/config.yml b/.chglog/config.yml new file mode 100755 index 0000000..9b9b87e --- /dev/null +++ b/.chglog/config.yml @@ -0,0 +1,57 @@ +style: gitlab +template: CHANGELOG.tpl.md +info: + title: CHANGELOG + repository_url: https://gitlab.schukai.com/oss/libraries/go/application/configuration +options: + commits: + filters: + Type: + - feat + - fix + - doc + - refactor + - perf + - test + - chore + ## deprecated types and typos + - docs + - documentation + - feat + - added + - add + - bugfix + - revert + - update + - updates + - change + - changed + commit_groups: + title_maps: + feat: Add Features + fix: Bug Fixes + doc: Documentation + refactor: Code Refactoring + perf: Performance Improvements + test: Tests + ## Chore is used for all other changes that don't fit in the other categories + chore: Changes + ## deprecated types and typos + docs: Documentation + documentation: Documentation + added: Add Features + add: Add Features + bugfix: Bug Fixes + revert: Reverts + update: Changes + updates: Changes + change: Changes + changed: Changes + header: + pattern: "^((\\w+)\\s.*)$" + pattern_maps: + - Subject + - Type + notes: + keywords: + - BREAKING CHANGE diff --git a/Makefile b/Makefile index 0e828da..e4f9d61 100644 --- a/Makefile +++ b/Makefile @@ -61,8 +61,15 @@ ifndef VERSION_BIN $(shell curl -o $(VERSION_BIN_PATH) http://download.schukai.com/tools/version/version-$(shell uname -s | tr [:upper:] [:lower:])-$(shell echo `uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/`)) $(shell chmod +x $(VERSION_BIN_PATH)) endif + +GIT_CHGLOG_BIN := $(shell command -v git-chglog 2> /dev/null) + +ifeq ($(GIT_CHGLOG_BIN),) + $(shell go install github.com/git-chglog/git-chglog/cmd/git-chglog@latest) +endif RELEASE_FILE ?= $(PROJECT_ROOT)release.json +CHANGELOG_FILE ?= $(PROJECT_ROOT)CHANGELOG.md ifeq ("$(wildcard $(RELEASE_FILE))","") $(shell echo '{"version":"0.1.0"}' > $(RELEASE_FILE)) @@ -72,21 +79,18 @@ PROJECT_VERSION ?= $(shell cat $(RELEASE_FILE) | jq -r .version) PROJECT_BUILD_DATE ?= $(shell $(VERSION_BIN) date) .PHONY: next-patch-version -## create next patch version next-patch-version: check-clean-repo echo "Creating next version" $(VERSION_BIN) patch --path $(RELEASE_FILE) --selector "version" git add $(RELEASE_FILE) && git commit -m "Bump version to $$(cat $(RELEASE_FILE) | jq -r .version)" .PHONY: next-minor-version -## create next minor version next-minor-version: check-clean-repo echo "Creating next minor version" $(VERSION_BIN) minor --path $(RELEASE_FILE) --selector "version" git add $(RELEASE_FILE) && git commit -m "Bump version to $$( cat $(RELEASE_FILE) | jq -r .version)" .PHONY: next-major-version -## create next major version next-major-version: check-clean-repo echo "Creating next minor version" $(VERSION_BIN) major --path $(RELEASE_FILE) --selector "version" @@ -100,18 +104,24 @@ check-clean-repo: tag-patch-version: next-patch-version echo "Tagging patch version" $(eval PROJECT_VERSION := $(shell cat $(RELEASE_FILE) | jq -r .version)) + git-chglog --next-tag v$(PROJECT_VERSION) -o $(CHANGELOG_FILE) + git add $(CHANGELOG_FILE) && git commit -m "Update changelog" git tag -a v$(PROJECT_VERSION) -m "Version $(PROJECT_VERSION)" ## tag repository with next minor version tag-minor-version: next-minor-version echo "Tagging minor version" $(eval PROJECT_VERSION := $(shell cat $(RELEASE_FILE) | jq -r .version)) + git-chglog --next-tag v$(PROJECT_VERSION) -o $(CHANGELOG_FILE) + git add $(CHANGELOG_FILE) && git commit -m "Update changelog" git tag -a v$(PROJECT_VERSION) -m "Version $(PROJECT_VERSION)" ## tag repository with next major version tag-major-version: next-major-version echo "Tagging major version" $(eval PROJECT_VERSION := $(shell cat $(RELEASE_FILE) | jq -r .version)) + git-chglog --next-tag v$(PROJECT_VERSION) -o $(CHANGELOG_FILE) + git add $(CHANGELOG_FILE) && git commit -m "Update changelog" git tag -a v$(PROJECT_VERSION) -m "Version $(PROJECT_VERSION)" GO_MOD_FILE := $(SOURCE_PATH)go.mod diff --git a/README.md b/README.md index e839769..b45923d 100644 --- a/README.md +++ b/README.md @@ -136,22 +136,36 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { ``` -## Change Log +## Contributing -### 1.1.0 +Merge requests are welcome. For major changes, please open an issue first to discuss what +you would like to change. **Please make sure to update tests as appropriate.** -* Add `ContentType` function +Versioning is done with [SemVer](https://semver.org/). +Changelog is generated with [git-chglog](https://github.com/git-chglog/git-chglog#git-chglog) -### 1.0.0 +Commit messages should follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification. +Messages are started with a type, which is one of the following: -* Initial release +- **feat**: A new feature +- **fix**: A bug fix +- **doc**: Documentation only changes +- **refactor**: A code change that neither fixes a bug nor adds a feature +- **perf**: A code change that improves performance +- **test**: Adding missing or correcting existing tests +- **chore**: Other changes that don't modify src or test files -## Contributing +The footer would be used for a reference to an issue or a breaking change. -Merge requests are welcome. For major changes, please open an issue first to discuss what -you would like to change. +A commit that has a footer `BREAKING CHANGE:`, or appends a ! after the type/scope, +introduces a breaking API change (correlating with MAJOR in semantic versioning). +A BREAKING CHANGE can be part of commits of any type. + +the following is an example of a commit message: -Please make sure to update tests as appropriate. +```text +feat: add 'extras' field +``` ## License -- GitLab