| 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@)
