This document describes how to release a new version of sabakan.
Sabakan has two kind of versions: API version and schema version.
API version should follow semantic versioning 2.0.0 to choose the new version number. It is also used for archive versions.
Schema version is a positive integer. It must be incremented when some data format has been changed.
Add notable changes since the last release to CHANGELOG.md. It should look like:
(snip)
## [Unreleased]
### Added
- Implement ... (#35)
### Changed
- Fix a bug in ... (#33)
### Removed
- Deprecated `-option` is removed ... (#39)
(snip)
When a backward-incompatible change in the data structure which is stored in etcd is to be merged to main
, the schema version must be incremented
and conversion from old schema need to be implemented.
- Increment
SchemaVersion
in version.go by 1. - Increment schema version at the top of docs/schema.md by 1.
- Add conversion method from old schema. Example: models/etcd/convert2.go.
- Call the conversion method from
driver.Upgrade
defined in models/etcd/schema.go.
-
Determine a new API/program version number. Then set
VERSION
variable.# Set VERSION and confirm it. It should not have "v" prefix. $ VERSION=x.y.z $ echo $VERSION
-
Make a branch to release
$ git checkout main $ git pull $ git checkout -b "bump-$VERSION"
-
Edit
CHANGELOG.md
for the new version (example). -
Update
Version
constant in version.go. -
Commit the change and push it.
$ git commit -a -m "Bump version to $VERSION" $ git push -u origin HEAD $ gh pr create -f
-
Merge this branch.
-
Add a git tag to the main HEAD, then push it.
# Set VERSION again. $ VERSION=x.y.z $ echo $VERSION $ git checkout main $ git pull $ git tag -a -m "Release v$VERSION" "v$VERSION" # Make sure the release tag exists. $ git tag -ln | grep $VERSION $ git push origin "v$VERSION"
GitHub actions will build and push artifacts such as container images and create a new GitHub release.