The immediate process of producing a release tarball (.tar.gz file with the LedgerSMB sources and "web assets" (css, js and images)) has been largely automated, including even the announcements to be made afterwards, such as updating the LedgerSMB Wikipedia page, a mail to the LedgerSMB announcements mailing list and other announcement targets.

The release process encompasses much more than just creating the actual release though. What that is, depends on the type of release. The LedgerSMB team distinguishes two types of releases:

  • Patch releases (Releasing 1.x.(y+1) when 1.x.y is the current latest)
  • Major/minor releases

The exact steps are listed in the LedgerSMB GitHub wiki page.

Release branches

The LedgerSMB project is committed to publishing fixes for bugs for a released version up to three (3) years after the initial release; e.g. 1.4.0 was released in September 2014 meaning that it'll receive community support until (at least) September 2017.

The policy for release branches is to receive only bug fixes - and even only "minimal fixes" at that. A "minimal fix" is the smallest amount of change which can be applied to the branch which resolves the problem. Whitespace change is not counted as a change in this context. This policy seems stringent, but far too often has the project been bitten by new functionality having been backported which completely broke existing and working functionality for upgrading users.

Release branches are named "<major>.<minor>"; meaning that the release series "1.5.0" though "1.5.z" - falling in the 1.5 series - have a branch called "1.5".

Release banches receive their fixes from the "next higher up" branch, meaning that, if 1.5 is latest, 1.4 receives its fixes from "1.5" and that 1.5 receives its fixes from "master". The only exception to this rule is when a specific bug doesn't exist on the "next higher up" version. This can happen when code has been substantially changed since the release which does exhibit the problem.

Executing the release process

As mentioned in the overview, most of the process to cut a release tarball has been automated. Helper programs to create the release are in the LedgerSMB repository in the utils/release/ directory. A patch release can be created as simply as executing:

$ utils/release/release-ledgersmb 1.5 1.5.17 1.5.18-dev ehuelsmann