It's Release Time!
So it's time for a release again, is it? Well, you're in for quite a bit of work to ensure everything's in order. But fear not – this handy guide will help you find your way through the daunting but important pile of steps you'll have to wade through on your way to releasing the next version of KIELER. So, as usual, go and help yourself to a nice cup of tea or coffee and start...
Almighty Release ToDo List
Follow this list and be rewarded by a smoothly running release process.
- Increase the version numbers of all plugins that have been part of the previous release in their
pom.xmlfiles. To that end, take a look at the changes performed on each one of them since then. For the moment, we'll leave the major version number (the first number) alone. If there have been breaking API changes (a method added to a public interface, changed public method signatures, removed public methods, that sort of thing), you will want to increase the minor version number (the second number). If there were any changes that didn't break the API, increase the revision number (the third number). There is one other case for changing the minor version number: if an important dependency has changed. For instance, regenerating Xtend-based code with a new version of Xtend will justify increasing the minor version number. If the dependency only concerns a KIELER component, however, increasing the revision number will suffice. In such cases, we just assume that users will update the plugin on which we depend anyway.
By the way, this is a good time to make sure that every plugin has a proper license file and proper metadata. Go check the nightly RCA build to make sure that plugin names and provider names are set correctly. Also, you may want to write down for every plugin which part of its version number was incremented – that will make the next step way easier.
- Increase the version numbers of all features in their
pom.xmlfiles. The concrete part of the version number to be increased depends on the version number increases of plug-ins included in the feature.
- Include all plug-ins to be released in a feature. This is particularly important for new plug-ins.
- Update the feature version numbers in the product files. We currently have two product files that depend on specific versions of our features:
kieler.product(part of the
kwebs.product(part of the
kwebs.serverplugin). Open both inside Eclipse and update the version numbers of the features they include. Also, update the version numbers of the products themselves and don't forget to synchronize the changes (there's a button on the Overview page of the product configuration editor). Once you're finished, the product files have to be made available to the build system. Copy
build/de.cau.cs.kieler.kwebs.repository. If the contents of the product icon folders have changed, these changes have to be made available to the build system as well by copying them appropriately.
- Update the feature version numbers in the update site repositories. The features are referenced from the
category.xmlfiles in the KIELER and KWebS update site folders (
build/de.cau.cs.kwebs.repository, respectively). Take this opportunity to also adapt the update site category names to include the proper version number of the new release.
- Update the feature list in the SDK feature. Make sure that the list of features to be included in the SDK feature is still up to date.
- Update plugin dependencies to match the respective requirements. Dependencies to KIELER plugins should specify no version number. Dependencies to other plugins should be updated if any compatibility problems are known (e.g., API changes between versions). Update feature dependencies to other features and plugins according to the plugin dependencies.
This point is actually not realistic since doing this right would require so much work that we wouldn't be able to do anything else. It has to be decided at some point what to do about this.
- Create a release branch in the mainline repository. From this point on, the master branch can be used for normal development, while the release branch will only receive bugfixes and release-specific changes. Bugfixes are usually first developed on the master branch, and are then cherry-picked into the release branch.
- Tell Bamboo to build the release. There are two ways to do this: either by telling the nightly RCA build plan to also build the release branch, or by copying the RCA build plan and basing it on the release branch. The latter option has the disadvantage of adding another build plan, but adds flexibility. For instance, the release RCA build could then also be triggered by checkins, which might be a good idea during the release preparations.
- Publish a few release candidates for testing. Test! One aspect of testing is to assign demo videos to everyone to walk through. Make sure to create tickets for them so that everyone records his findings somewhere.
- Update the update site information in the release branch. This must be done for every
feature.xmlfile and is best done through mass search & replace.
- Proclaim a commit freeze on the release branch. Once all tickets are fixed, no one has any business pushing stuff into the release branch anymore!
- Update top-level update site. This is done by adding the new update site URL to
compositeContent.xml. These two files are in
- Copy the RCA, KWebS, and KLay library files to
/home/kieler/public_html/files. Take care to rename the files appropriately: the nightly build files don't include version information, but only a timestamp.
- Create a tag of the release.
- Write release notes for this release in Confluence.
- Add the release to KIELER's downloads page in our Typo3 system.
- Close the Jira version, set the new default version, and add a new version.
- Send the word out to the mailing list and do a release party!