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` * bump up version in `program/lib/Roundcube/bootstrap.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 [http://code.google.com/p/closure-compiler/ Closure Compiler] * run bin/updatecss.sh * 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 [https://gist.github.com/2725894#file_makefile 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 or 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 > ./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 [https://gist.github.com/2725894#file_makefile 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" git push --tags }}} 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)