Development/ReleaseManagement
Important points
The release branch lives in http://darcs.net/releases/branch-X.X
Point releases can go on the same branch as their parent release (so branch-2.4 would still be used for Darcs 2.4.1)
Try to work from the main branch if at all possible. By rights all release-branch patches should come from the mainline and flow back to the mainline. This will allow us to do things in the future such as ‘darcs changes –from-tag=2.4.3’
Patches for the freeze
Patches that need to go in after a freeze should make this point very clear in the description, lest the Release Manager miss it.
It would be helpful to test and submit these the release branch:
darcs send http://darcs.net/releases/branch-X.X
Workflow
Cutting the release branch
- Announce release plans and schedule
- Start writing NEWS entries
- For major releases, create
http://wiki.darcs.net/Releases/X.X(see 2.4) - Create release branch on darcs.net (don’t forget to set _darcs/prefs/email to darcs-users@darcs.net)
- If you’re a BTS admin, try editing the milestones or else get an admin (Eric Kow?) to do it
- Suppose you want to release Darcs 2.30
- Rename: 2.28 CURRENT => 2.28 STABLE
- Rename: 2.30 HEAD => 2.30 CURRENT (ly being released)
- Create: 2.32 HEAD
- Edit the darcs-roundup posthooks on screened/reviewed (2.30 HEAD => 2.32 HEAD)
- Make sure the release branches have appropriate posthook (2.30 CURRENT)
T minus 24 hours
- Make sure you’ve got milestone-X.X accounted for on the BTS. All closed or bumped, right?
- Record NEWS changes, put in release date
- bump version number in darcs.cabal
cabal test && cabal test unit- Draft release announcement and send to some proofreaders if not beta (while test is running)
- darcs tag
release/release.sh- Try to give some warning to binary packagers
Liftoff!
- Darcs push to release branch
- Upload tarball to hackage with
cabal upload - Put tarball on the darcs website and test it
- Change the
darcs-unstable@darcs.net:releases/darcs-latest.tar.gzsymlink to point to the tarball of the new release - Send release announcement, and put it on
http://wiki.darcs.net/Releases/X.X(this gives us a permalink for the release announcement, see Releases/2.4 as an example) - Update darcs homepage by editing FrontPage in the wiki repo
- Update the Releases page on the wiki
- Update the #darcs topic
- Stick around for a few days, in case we need a quick X.X.1 fix…
And reentry
One week later…
- Send release announcement, and put it on
http://wiki.darcs.net/Releases/X.X(this gives us a permalink for the release announcement, see /Releases/2.4 as an example) - Celebrate!
Tricky bits
Argh! There’s a bug in the release candidate
Good! That means our release process caught something. Give yourself a pat on the QA back.
Now what’s the best way to respond to this?
- Create an issue on bugs.darcs.net for the bug if doesn’t exist yet, and mark its milestone as X.Y.
- Release a new RC when this issue has been resolved and the resolution is in the release branch
- If the RC has been bug-free for a week, release darcs-X.Y. Otherwise, repeat the above steps.
What happens if we discover a new bug/regression after the release?
Don’t panic. This sort of thing happens and the only thing you can really do is to try and cope with it to the best of your ability.
Minor packaging flubs:
- you could always make a trivial point release quickly following the original (it happens)
- for really minor issues, it should probably not take the packagers any extra time to make a new version
Actual bugs in Darcs:
- if it’s a really serious regression, you should consider rolling the binaries page on the wiki back so that it points to the last good version
- mark the new bugs as milestone X.Y in the tracker
- start a new (point) release cycle
A point release cycle:
- release an RC that fixes the issue that prompted the point release
- As with major releases, tag and release an RC as final after no bugs have been reported for it within a week
Tips
- Use the buildbots. You should (ideally) only pull patches from unstable that pass buildbots
darcs changes –from-tag=last_version > foo
and copy foo into the ChangeLog and edit it- Advice on ChangeLogs, announcements: How we write Launchpad announcements
Send release announcements to
darcs-usersandhaskell-cafefor prereleases and todarcs-users,haskell-cafeandhaskellfor final releases. Reinier once sent release announcements to the mailing lists of our colleagues of git and bazaar, but this was not universally well-received.
