wiki:Dev_ReleaseManagement

Version 16 (modified by thomasb, 12 months ago) (diff)

--

How do we release a new version of Roundcube? This document aims to provide an answer.

Creating a new release

Versioning

Syntax: x.y.z

  • x = major
  • y = minor
  • z = fix (0 can be omitted)

1. Creating a release branch

  • Copy current master into a release branch
    git checkout master
    git checkout -b release-x.y
    git push origin release-x.y
    git config branch.release-x.y.merge refs/heads/release-x.y
    git config branch.release-x.y.remote origin
    
  • Remove development stuff:
    git rm bin/dumpschema.sh bin/makedoc.sh tests
    
  • edit CHANGELOG: only keep the changes since last release
  • edit README: remove the UNSTABLE disclaimer
  • bump up version in index.php
  • bump up version in program/include/iniset.php
  • commit the changes
    git commit -m "Remove development stuff and update versions"
    git push
    

2. Create Package

Major Relase

The steps to take are basically

  • clone the release branch from GIT
  • compress the JavaScript files using the Closure Compiler
  • remove test files and .git meta data
  • create package archive
  • distribute the release package on SourceForge

The process of creating the tarball is packed in a Makefile. Get it from gist.github.com and execute

make [GITBRANCH=release-x.y VERSION=x.y] dist

This will produce a tarball named roundcubemail-x.y.tar.gz which can be distributed.

Minor Release/Hotfix?

  • commit changes to the existing release branch
  • repeat the packaging and distribution process
  • adjust naming in case of a hotfix or patch
  • supply a patch in addition:
git diff <last-rev>..HEAD > ./roundcubemail-patch-x.y.z.patch
gzip ./roundcubemail-patch-x.y.z.patch
  • Distribute patch on SourceForge

2.1 Create GPL package

GPL packages are actually the same as the default package but without PEAR and other library files included. To create such a release package, use the above mentioned Makefile and execute

make [GITBRANCH=release-x.y VERSION=x.y] dependent

3. Tagging released files

git checkout release-x.y
git tag -a vy.y.z -m "Tagging files for x.y.z"

The differences between branches and tags are the following:

  • branch may be "patched" or "hotfixed"
  • a tag is just a snapshot and may not be altered
  • in case you apply a fix to a branch, please create a new tag from it

4. Announcements

  • update downloads page on roundcube.net
  • write news entry on SourceForge
  • post notification to announce@, dev@ and users@
  • update project page on freshmeat.net
  • post on Twitter (Till)