Some notes on how Roller releases are orchestrated.

The Release Cycle

Roller releases are made on an as needed basis. Here's an overview of the release cycle.

When a Roller PMC member would like to make a release at some point in the future, he/she simply proposes that release to the Roller dev mailing list.

After some of the planned features are added, a committer may propose a milestone build. Milestone builds are not official releases, each is just a snapshot, so formal vote is not required, only lazy consensus. They may be tagged in Git and are made available via They are meant for testing only and not intended for production use, so there will be no migration scripts to help folks migrate data from milestone M1 to M2, etc.

Once a committer feels that the release is completely ready, he/she proposes to start making release candidates, also made available via A release candidate is a complete release, signed and ready to be shipped. Like milestone releases, release candidates are not official releases. They are meant for testing only and not intended for production use. After some feedback and testing has occurred and a release candidate appears to be good for final release, a vote is called. Once there are three +1 votes from PMC members the release can be made.

That's the overview, now let's talk details.

Contributing to a release

If you want to add a feature to a release, you should create a JIRA issue describing the feature, assign it to yourself, and set the "fix-for" field for the release you want. (see the roadmap view in JIRA). For all but the smallest improvements and bug fixes, you should also write a proposal and get it reviewed by the community on the development mailing list. If you are working on a feature marked as IN-PROGRESS in JIRA, then when you are done you should mark it as RESOLVED. Any work that is completed should be properly documented (user guide and/or install guide), change lists should be updated, and if needed database scripts are updated and tested.

Release Numbers and Versions

Roller follows the typical Major.Minor.Patch version numbering convention.

Major releases

A major release is noted by a change in the major release number (i.e. 1.x to 2.x). major releases are like any other Roller release except that they are expected to include potential database schema changes and for that reason the upgrade procedure may be longer and more involved. major releases are also expected to contain larger sets of changes and more complex feature additions which were too large to complete in a minor release.

Minor releases

A minor release is noted by a change in the minor release number (i.e. 1.2 to 1.3). minor releases typically contain smaller changes to the code base and can be easily upgraded. Roller users should feel very comfortable about upgrading their Roller installation with a new minor release.

Patch releases (emergency bug fixes)

We expect that each release of roller will simply be considered a minor release, however should something unfortunate happen and we must do an emergency bug fix for a given release then we may mark that release with an incremental patch version number (i.e. 1.3.1). this is not expected to happen often.

Where Work Gets Done

This section tells you where the right place is for your code and in general how the Roller repository is structured.

Roller Master

The Roller trunk is the main development repository and will try to always represent the version of the code base currently being developed for the next release. Each new release will be made from the trunk and distributed as appropriate. It is expected that any code commited to the trunk will be in full working order _in time for the next scheduled release_

Roller Release branch

At some point while we are making release candidates for a Roller release, we may decide to create a branch for the release. We do this in cases where it is very important that post-release development continue in the trunk.

Custom branches

A custom branch can be created whenever a feature is in development that is not on a certain schedule. this allows the custom branch to worked at whatever pace is desired and when the code is ready it can be applied to whatever branch is most appropriate.


All tags in the Git repository are meant to be read-only archives of versions of Roller that went final. If you are ever looking for the code to a specific version of Roller you should look here. In roller Git this is at tags/*.

Step-by-step How to Create a Release

1. Create a stable branch for the release
Name the branch with the format roller-{version}, e.g. roller-5.2.0

2. Update version numbers
You will need to change the version numbers in at least the files below:

3. Build Roller
Run a full build & test with "mvn install". If tests fail, you need to figure out why and rectify.
    $ mvn install

4. Build the release package
Change directory into the assembly-release directory and do a Maven build there: "mvn package"
    $ cd assembly-release
    $ mvn package

5. Sign the release
Before you can do this, you need to have GPG setup and a key in place for signing releases. To sign the release, you can use the script in the assemly-release directory like so:
    $ ./

6. Make the release available

You make the release available by committing it to a Subversion (SVN) repo at Get that repo and take a look at the directory structure there. If you are creating a Release Candidate (RC) then it will go into a subdirectory of the "dev" directory and if you are making a final release, then it must go into the "release" directory.
For example a 5.2.0 RC1 release would go into ./dev/roller/roller-5.2/v5.2.0-rc-1
Another example, a final 5.2.0 release would go into ./release/roller-5.2/v5.2.0

7. Update the website to point to the new files

Update the website's download links to point to the new release.

  • No labels