Developer Area/Version Numbering Policy
From Mahara Wiki
< Developer Area
This page documents the Mahara version numbering scheme, and how the version numbers of new releases are decided.
From 15.04 on
Starting with the Mahara 15.04 series (in April 2015), Mahara releases will be numbered YY.MM.Z, for example, "15.04.0".
The "YY.MM" portion of the version number is the major version or series. It encodes the year and month that the series is scheduled to be released. 15.04 = April 2015. Mahara releases a new major version every 6 months, in April and October, so this will increment as follows: 15.04; 15.10; 16.04; 16.10; etc.
The "Z" portion of the version number is the minor version or point release. It starts at 0 and is incremented with each minor release for a series. Minor releases are released on an as-needed basis, and not by any predetermined schedule. These will increment like so: 15.04.0; 15.04.1; 15.04.2; etc.
1.10 and earlier
The Mahara 1.10 series was the last to use the older Mahara release numbering system. Under this system, Mahara major releases were number 0.9; 1.0; 1.1; 1.2; etc. And minor releases were numbered 1.2.0; 1.2.1; 1.2.2; 1.2.4; etc.
How the Release Version Changes
Stable branch
Imagine the current stable version is 15.04.6. The htdocs/lib/version.php
file will have this version number:
- In the Launchpad download package: "15.04.6"
- In the git commit tagged as
15.04.6_RELEASE
: "15.04.6" - In the HEAD commit of the
15.04_STABLE
branch: "15.04.7testing"- Bug fixes will be made from time to time here.
When the release 15.04.7 is ready:
- The
htdocs/lib/version.php
in the15.04_STABLE
branch will be updated to say "15.04.7" - This commit will be tagged as
15.04.7_RELEASE
- This commit will be packaged and uploaded to Launchpad
- The
htdocs/lib/version.php
in the15.04_STABLE
branch will be updated again, to say "15.04.8testing"
Dev branch
Meanwhile, the master
git branch will be preparing for the next major version, 15.10. So...
- In the
master
git branch,lib/version.php
file will contain the version "15.10.0dev" - This won't change until we're reading to release the first 15.10 release candidate.
When we release the first 15.10 release candidate...
- We'll make a new branch
15.10_STABLE
, based off ofmaster
- The
lib/version.php
in themaster
branch will be bumped to the next major release, "16.04.0dev" - The
lib/version.php
in the15.10_STABLE
branch will be bumped to "15.10.0rc1"- When 15.10.0 is ready, this branch will update as per the instructions in the "Stable branch" section above.
Version bumps and database upgrades
Mahara also has an internal version number, also known as the database version. This version number is stored in the htdocs/lib/version.php
file in $config->version
. It is not meant to be human readable, but is used by the program to determine what code to run when upgrading.
The database version has the format YYYYMMDDZZ
, where "YYYYMMDD" is the current date, and "ZZ" is an arbitrary counter that starts at 00.
- On a stable branch, the "YYYYMMDD" should always remain the same, and only the "ZZ" should be incremented with each upgrade.
- On the master branch, the current date should be used and "ZZ" should be "00" unless there are multiple updates pushed on the same day.
- This will ensure that someone who has upgraded on a stable branch (e.g. from 1.4.0 to 1.4.2) will still have a $config->version less than the first upgrade on the 1.5 or master branches.
If you backport a database upgrade from one branch to another:
- Make sure to update the version number so that it matches each branch!
- Make sure that the upgrade is safe to run multiple times!
- Because a user who upgrades from an older branch to a newer branch, will wind up running your upgrade twice.
Plugin versions are messier, and also complicated by the fact that Mahara's upgrade system upgrades core all the way before it begins upgrading plugins. This has potential to cause nasty problems. For example, a plugin upgrade could refer to a db column in a core table which gets removed from core before the plugin upgrade has a chance to run. This can sometimes be avoided by forcing plugin upgrades at points during a core upgrade. However, that will upgrade the plugin all the way before it continues the core upgrade, with the same potential issues! As a last resort, $config->minupgradefrom can be used to force all upgrades to stop at a certain fixed point before continuing, but this is a hassle for users.
If you push your code to gerrit using the command make push
, the precommit checks will run the script test/versioncheck.php
, which will test for some common version numbering mistakes.