1. Versioning scheme

A SigScheme version number is built up as follows:

  major.minor.patchlevel

The patchlevel number is incremented after every release by rake version:bump. The major and minor numbers are incremented manually when needed. As an example: 1.0.0 will become 1.0.1 after the release. 1.0.1 may become 1.1.0 manually for a release that has large changes.

There’s no limit to each number, it will continue past 9 with 10, in other words: after release 1.0.9 we will see release 1.0.10.

The version is written in the following files:

  • AC_INIT() in configure.ac

  • version of project() in meson.build

  • SSCM_VERSION_* in include/sigscheme/sigscheme.h

rake version:bump updates all of them. Update them manually when the major or the minor number is incremented.

2. Release procedures

2.1. Documents update

Add a section for the new version at the top of NEWS.md. The release note of GitHub Releases is generated from the section. Update RELNOTE too.

2.2. Versioning

Confirm the version numbers described in "Versioning scheme".

And do not forget updating src/libtool-version.mk if libsscm ABI has been altered from previous version. Meson also uses it.

2.3. Test

Make all tests passed.

$ meson setup -Dconf=full build
$ meson test -C build
$ meson compile -C build r7rs-tests

Push the changes and confirm that CI is passed.

2.4. Tagging

$ rake release

It does the followings:

  1. Creates the x.y.z tag and pushes it

  2. Bumps the patchlevel number and pushes it

2.5. Packaging and publishing

The "Release" job of CI (.github/workflows/linux.yml) is run for the pushed tag. It does the followings:

  1. Creates source archives by make distcheck and make sum (ci/release.sh)

  2. Creates a release on GitHub Releases with the source archives and the release note generated from NEWS.md

The source archives are the followings:

sigscheme-x.y.z.tar.gz
sigscheme-x.y.z.tar.bz2
sigscheme-x.y.z.sum

The release is announced in GitHub Discussions too.