====== Release process ====== ===== Release cycle ===== We lack the man power to manage a strict release cycle. We usually release about once a year with hotfixes when important security patches are needed. ==== Security ==== We provide security fixes for the two most recent versions. ==== Deprecation ==== Removing legacy interfaces, behaviours and features is done over a period of three releases: In the first release, the object is deprecated, in the third, removed. This means that a plugin or template which only uses non-deprecated aspects should at least work in two future versions as well. Put the other way: A template or plugin older than a year is possibly broken. ===== Releasing ===== The following steps have to be taken for building a new release. FIXME: many tasks below have been automated by the GitHub [[devel:release workflows]]. Needs to be refactored. ==== Version Naming Conventions ==== * Release Candidates use the date on which they are released, prefixed with ''rc'' * rc2022-06-26 "Igor" * rc2022-07-01 "Igor" * Releases use the date on which they are released, no prefixes or postfixes * 2022-08-12 "Igor" * Hotfixes add a letter to the date of the release they fix * 2022-08-12a "Igor" * 2022-08-12b "Igor" ==== Preparation ==== - find a code name * [[http://wiki.lspace.org/mediawiki/Category:Discworld_characters|Discworld Character]] starting with a letter alphabetically after the first letter of the last release name - check https://github.com/dokuwiki/dokuwiki/issues for new bugs - prepare [[:changes]] summary - update release name and changes summary on [[devel:releases]] - run [[devel:unittesting|unit tests]] (and check http://test.dokuwiki.org/master.html) ==== Code changes ==== - push the current ''stable'' branch to the ''old-stable'' branch (only once per release cycle) git checkout old-stable git merge -X theirs stable - increase the update_check msg number in ''doku.php'' - update list of deleted files * git diff stable..HEAD --summary | awk '/^ delete/ && $4 !~ /^(VERSION|_test|_cs)/ {print $4}' * add them to ''data/deleted.files'' - push the release preparations above to the ''master'' branch - merge git ''master'' branch into the ''stable'' branch * ''git merge -Xtheirs master'' helps with conflicts - update the VERSION file in the ''stable'' branch * Format: %%''YYYY-MM-DD "code name"''%% or %%''rcYYYY-MM-DD "code name"''%% * commit: %%''git commit -m "Release `cat VERSION`" -a''%% - tag the release in the git ''stable'' branch * %%''git tag 'release_stable_YYYY-MM-DD' ''%% or * %%''git tag 'release_candidate_YYYY-MM-DD' ''%% or - push the ''stable'' branch to gitgub: * ''%%git push --tags origin stable%%'' ==== Create release ==== - build the .tgz git checkout stable V=`awk '{print $1}' VERSION`; git archive -v --format=tgz --prefix="dokuwiki-$V/" --output="../dokuwiki-$V.tgz" HEAD - test-install the tarball - test-upgrade from previous stable using the tarball ==== Release ==== - push git - upload the .tgz (needs to be done by Andi, Adrian or Guy currently) * http://download.dokuwiki.org/admin/ - update release numbers in bugtracker (needs to be done by Andi, Adrian or Guy currently) ((i.e. for RCs: add a "Reported Version" and don't remove any "Due in Version", add a new "Due in Version" for the release after next; for standard releases: change the latest RC to non-RC "Reported Version", remove current "Due in Version")) - change message in IRC (needs to be done by Andi, Adrian, Guy or Hakan currently) - Update release list in dokuwiki.org config of the pluginrepo plugin - announce in fm (needs to be done by Andi currently) - announce in wikimatrix (needs to be done by Andi or Adrian currently) - announce in mailing list, forum, weping - update update.dokuwiki.org (needs to be done by Andi, Adrian or Guy currently) ==== Tarball build script ==== #!/bin/sh set -e BDIR=/home/andi/projects/buildplace cd $BDIR rm -rf dokuwiki* git clone git://github.com/splitbrain/dokuwiki.git dokuwiki cd dokuwiki git checkout -b stable origin/stable VERSION=`awk '{print $100}' VERSION` rm -rf .gitignore rm -rf .git rm -rf _test rm -rf _cs rm -f .editorconfig rm -f .travis.yml rm -f test.php mkdir -p data/pages/playground echo "====== PlayGround ======" > data/pages/playground/playground.txt cd .. mv dokuwiki dokuwiki-$VERSION tar -czvf dokuwiki-$VERSION.tgz dokuwiki-$VERSION echo "now upload: $BDIR/dokuwiki-$VERSION.tgz" ==== Building a Hotfix Release ==== - Make sure bugfix commit is in master, stable and old-stable * If there is a suitable commit in master, cherry-pick it into stable and old-stable * Else, write your own commit for stable and cherry-pick it into old-stable if suitable * Else, write another commit for old-stable - Make sure the msg numbers are correct * Increase msg number in master by 0.1 ("Release preparations") * Cherry-pick "Release preparations" commit into stable * Increase msg number in old-stable by 0.1 ("Release preparations") - Update VERSION file (append letter to date, starting with "a") in stable and old-stable, commit named like the release. - tag the release in the git ''stable'' and ''old-stable'' branches - build new tarball of ''stable'' and ''old-stable''