Both GNOME/MeeGo use the same procedure for the most part and both use git.
For this documentation, we'll assume we're releasing 0.9.28.
Make sure tarball is ready for distribution:
Get a list of changes: git log --oneline --no-merges 0.9.27.. > changes.txt
Enhanced version to automatically add "Fixes GB/NB" and print list in the right format: git log --oneline --no-merges 0.9.27.. | ( while read sha title ; do git log -1 $sha --pretty=%b | grep -q ^Fixes..B# && title="$(git log -1 $sha --pretty=%b | grep ^Fixes..B# | sed -e 's/^\(Fixes .B#[0-9]\+\).*$/\1/'): $title" ; echo " * $title"; done ) > changes.txt
- Edit changes.txt into NEWS and git commit
Edit configure.ac and update version to 0.9.28 and git commit (make sure this is the last commit before we tag)
Make sure no cached files are lying around: git clean -dfx
Use autogen with the distcheck arguments to avoid failing later: ./autogen.sh --enable-nautilus-extension --enable-unit-tests --enable-functional-tests --enable-gtk-doc --enable-miner-rss --enable-miner-flickr --enable-miner-evolution --enable-poppler --enable-exempi --enable-libiptcdata --enable-libjpeg --enable-libtiff --enable-libvorbis --enable-libflac --enable-libgsf --enable-playlist --enable-tracker-preferences --enable-tracker-search-bar --with-enca --enable-maemo
Build sources: make
Install latest version: make install (this is needed before running make distcheck because the test cases depend on a working installation, this needs fixing)
Make sure the latest version is running: tracker-control -rs
Wait: make distcheck
For step #1, the list is usually quite condensed into what is useful for readers, useless things don't make it in, like whitespace changes. Anything too technical should be explained properly too.
For step #5, you can see the latest distcheck arguments if they happen to change in the top level Makefile.am.
If step #9 fails, fix the issues and go back to step #4. If you need to reorder commits, it is useful to use: git rebase -i origin/master and reorder commits so the "Release" statement is the last one. This statement serves as a marker for those reading the logs.
Push the latest master: git push gnome:tracker master (the gnome:tracker is an alias of course)
Create tag: git tag -s 0.9.28 -m "Release 0.9.28" (GNOME's git requires the -s)
Push the latest tag: git push gnome:tracker 0.9.28
Upload tarball to release machine: scp tracker-0.9.28.tar.gz email@example.com:
Log in to release machine: ssh firstname.lastname@example.org
Run the install script and then return to your local machine: install-module tracker-0.9.28.tar.gz
If step #1 fails because someone has pushed since you last updated, you need to pull and go back to the beginning.
Making the branch ready:
git push gitorious master (where master is GNOME's master and gitorious is an alias for the repository above)
git pull --rebase
git checkout harmattan
git pull --rebase
git merge master
Creating the debian/changelog is done using the dch command, e.g.: dch -v 0.9.28-1maemo1. The changes non-UI and non-translation related in the NEWS file should be copied into the debian/changelog. For formatting, see: https://projects.maemo.org/trac/integration/wiki/ChangeLogHarmattan
git push gitorious harmattan
Do not commit anything non-packaging related (i.e. anything outside debian/) to the harmattan branch, this branch is just a debian/ directory sitting on top of master and must not have any conflicts.
All commits in the harmattan branch are usually prefixed with build to make it clear they're not related to any merge from master.
Make sure the debian/patches/*.patch apply. This is usually done in a sandbox type environment like Scratchbox with something like: dpkg-buildpackage -rfakeroot (you might want to use -d to skip dependencies and just make sure the patches apply).
For sending an announcement email, I use announcer.py with a bash alias for the target address (alias announcer-tracker='$HOME/.local/bin/announcer.py -t email@example.com').
For #4, if you use Evolution instead of Thunderbird like I do, you have to switch a line in the script which is commented out because the line breaking is slightly different.