Skip to content
Fr. Samuel Springuel edited this page Mar 11, 2021 · 4 revisions

This page describes the process of release. It should be carefully studied before attempting to release a Gregorio version.

This page describes the general release process, for technical details, see the release actions.

The release cycle

Gregorio uses Semantic Versioning. A priori, major releases are not maintained after a new major release is out. This means that, for instance, when 4.0 is released officially, 3.X becomes obsolete and support for stops.

It seems a good practice to release every few months, if user-impacting changes have occured in the repository.

Git workflow

Gregorio uses the Gitflow workflow. All developments take place in separate branches, and once they are ready for a release, they are merged in the develop or ctan branch. Developments which only alter the tex (and lua) files and which do not require a major release (change to x+1.0.0) are allowed on the ctan branch. All other development should be against the develop branch.

During the course of the year, new releases which can be uploaded to CTAN are made off the ctan branch.

Each year, in either January or February, a new release based on the develop branch can be made. This release should not be uploaded to CTAN until the TeX Live pretest is announced, at which point it should be uploaded with a note that it is specifically for the pretest and should not be added to the current year TeX Live.

Once a release is decided, a new release-x.y branch is created, based on the develop or ctan branch. New features continue to arrive on those branches, but are not merged into release-x.y.

Version Updates

Version changes are only made in release-x.y or hotfix-x.y.z+1 branches. No changes are to be made in the develop, ctan, or master branches.

Extended betas

In some cases, new features may require an extended beta period in order to iron out possible kinks "in the wild." In this case, these extended beta releases can be created directly on the develop branch and their creation does not feature lock the release. Once the feature set has stabalized, then the release-x.y branch is created and betas (or release candidates) continue there.

release-x.y branches

Once the release-x.y branch is created, the version is incremented in the branch, using VersionManager.py with either -m or -e to increment the major or minor number respectively. The new version is x.y.0-beta1.

hotfix-x.y.z+1 branches

Once the hotfix-x.y.z+1 branch is created, the version is incremented in the branch, using VersionManager.py -p. The new version is x.y.z+1.

Release candidates

Once the branch is considered stable enough for release, it can be tagged (by git) as vx.y.0-rc1 and released (as described in the release actions). Users are informed of this release and can test it if they want. If blocking bugs are discovered, a new release candidate is released (vx.y.0-rc2), etc.

Final release

Once the blocking bugs are fixed, the vx.y.0 version is released. The release-x.y git branch is merged into master, develop, and ctan.

Post release

In order to ensures that new deprecations will not get mixed in with the old ones which need to be advanced prior to the next release, after the merge of a major or minor release it is advisable to create a deprecation branch and step deprecated and obsolete functions along the deprecation path right away. A separate commit should be made on this branch for steps that would happen only a major release. In this fashion those changes can be reversed should the next release turn out to be a minor release.

Bug fix releases

If bugs are discovered, new versions can be released anytime before the x.y+1.0.