wiki:Dev_ReleaseManagement

Version 13 (modified by thomasb, 2 years 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 trunk into a release branch
    svn cp -m "new x.y release branch" https://svn.roundcube.net/trunk/roundcubemail https://svn.roundcube.net/branches/release-x.y
    
  • Check out the release branch and remove development stuff:
    svn co https://svn.roundcube.net/branches/release-x.y
    cd ./release-x.y
    svn del bin/dumpschema.sh bin/makedoc.sh tests
    
  • edit CHANGELOG: only keep the changes since last release
  • edit README: remove SVN disclaimer
  • bump up version in index.php
  • bump up version in program/include/iniset.php
  • commit the changes
    svn ci -m "Remove development stuff and update versions"
    

2. Create Package

Major Relase

svn export https://svn.roundcube.net/branches/release-x.y ./roundcubemail-x.y
  • the version naming should obviously match the branch/tag
  • the folder name should include the version
  • compress the JavaScript files using the Closure Compiler
    cd roundcubemail-x.y/
    bin/jsshrink.sh
    rm compiler.jar
    
  • create package archive
    tar czf roundcubemail-x.y.tar.gz ./roundcubemail-x.y
    md5_file roundcubemail-x.y.tar.gz
    
  • distribute the release package on SourceForge

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:
svn diff https://svn.roundcube.net/tags/roundcubemail/vx.y https://svn.roundcube.net/branches/release-x.y > ./roundcubemail-patch-x.y.z.patch
gzip ./roundcubemail-patch-x.y.z.patch
  • distribute patch on SourceForge

2.1 Create GPL package

Rhe following shell script does an SVN checkout and patches some files to create a dependent, fully GPL compatible package:

#!/bin/sh

# usage: makedependent.sh https://svn.roundcube.net/branches/release-0.5-beta roundcubemail-0.5-beta-dep

source=$1
target=$2
scriptdir=`dirname $0`

if [ -z $source ]; then
  echo "No SVN source path specified"
  exit
fi

if [ -z $target ]; then
  target=`basename $source-dep`
fi

if [ ! -d $source ]; then
  svn export $source $target
fi

cd $target

rm program/lib/utf8.class.php
rm program/lib/des.inc
rm -rf program/lib/encoding/
rm -rf program/lib/MDB2*
rm -rf program/lib/Auth/
rm -rf program/lib/Mail/
rm -rf program/lib/Net/
rm program/lib/PEAR.php
rm program/lib/PEAR5.php
rm program/lib/magic

patch -p0 < $scriptdir/dependent.diff

Save the script in a local folder and also download the diff attached to this page to the same folder.

3. Tagging released files

svn cp -m "Tagging files for x.y.z" https://svn.roundcube.net/branches/release-x.y https://svn.roundcube.net/tags/roundcubemail/vx.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)

TBD

  • encourage maintainers to subscribe to announce@
  • separately ping distributors
  • maybe a PEAR package with replacement tasks? (@package_version@)