Note: This release strategy is no longer in use. Please visit our current release strategy page.
Trunk
- Main product branch - everything that ever gets released to the public ends up here
- All releases branches are derived from it
- Minor bug fixes are checked into trunk
- Primary test coverage is done in trunk
- Successfully tested unstable branches are merged into here
Unstable
Potentially breaking changes (high risk check-ins) are done on the unstable branch - testers are notified to switch branches and localize their testing to the scope of the bug fix - once this is verified, it can be checked into trunk (if necessary for a release prior to the specified "merge date" for that particular unstable branch).
Release branches
Bug fixes are not applied directly to release branches. When a product update is ready to be released, revisions are selected from trunk to be issued in the release, and these change are then ported into the appropriate release branch. No check-ins should be done on any release branches by developers. Once the release branch has been updated, final test coverage is given by the testers before the product release.
Anatomy of a bug fix
Background
MindTouch has just released Deki Wiki 1.8.2a. Developers are currently working on two unstable branches: unstable - multi, and unstable - php for the 1.8.3 release.
Bug Process
- Linda Barker, PHP developeress extraordinaire, is assigned a bug which must be fixed prior to the next major release.
- The bug has already been verified as being active on the 1.8.2a release by the testers.
- Linda Barker SVN switches to trunk and reproduces the bug.
- She then resolves the bug (revision 12345) and checks-in to trunk (thus marking the bug report as RESOLVED)
- The testers are notified of the check-in and give the bug test coverage.
- The bug is fixed, so the testers mark the bug as CLOSED.
One caveat about this process is that the bug fix does not make it into any unstable branches unless ported by the developer. Critical fixes may require porting specific bugs to unstable branches, but given that unstable will eventually be merged back into trunk after stabilization, the general public will never have the bug.
Release Process
- The bug fix sits on trunk, waiting to be released
- 1 week before the 1.8.2b release, revision 12345 (along with another blocking bug 12344), are ported to the 1.8.x branch at once by (???) - note that all backports are done at once after test coverage
- The testers give final test coverage to the 1.8.x branch with the merged changes
- The 1.8.x branch is released to the public as Deki Wiki version 1.8.2a
Update Process
For users of Deki Wiki who are sitting on SVN, doing an updateWiki.sh (or SVN UP) on the 1.8.x branch will automatically pick up the most recent stable & tested release. Users who want bleeding-edge (but stable) code, they will subscribe to trunk. When a major release is done (1.9.0), they will be forced to SVN switch to the new release and abandon their 1.8 release.
What changes
SVN
- Current /dekiwiki/trunk/ branch becomes /dekiwiki/unstable
- Current /dekiwiki/1.8.2-multi/ becomes /dekiwiki/unstable-multi
- Current /dekiwiki/1.8.2/ becomes /dekiwiki/trunk/
- New /dekiwiki/1.8.x branch is created from the last revision
- We set future merge dates on the unstable branches (after wik.is launch for unstable-multi, and end of November for unstable) into trunk
Test Coverage Priority
(In descending priority order)
- Test new bug fixes in trunk
- Given specific items to test for in unstable branches
- Broad test coverage on trunk
Releases
- Week before release, we pick the revisions to put into the next (major or minor) release
- Somebody applies the aggregate diff to the 1.8.x branch (or to an integration branch for sanity's sake)
- Testers give broad, shallow coverage (make sure nothing obvious broke) to 1.8.x branch
- Release issued, everybody switches back to unstable branches for continued dev