Forum OpenACS Development: Suggestions for release management after 5.1

Current development process:
New work is committed to HEAD. When a scheduled release is code-complete, we do a code freeze, meaning no new features, only bug fixes.  This keeps the code stable so that we can reduce the total number of bugs.  This also blocks new work, so we branch the code to, e.g., oacs-5-0, and new work continues on HEAD.  We spend 1-2 months (or 3-4) stabilizing the branch until it meets the criteria, and we release it.  Then we merge oacs-5-0 back to HEAD and start over again.

There are two big problems with this:
  - It encourages HEAD to get broken, so we have to stabilize over and over again
  - It delays the release of new work

Here is a proposal to address these problems:

1) dot-releases starting with 5.1.1 are calendar-driven.  We do a dot-release every month.  When we integrate tclwebtest into acs-automated-testing in 5.1, we can also build better smoke tests that make it easier to keep HEAD in known state.  With Jeff Davis's batch scripts that implement my instructions for releases, the direct overhead for packaging a release is just minutes.
Benefits:
  New code is available in a release form quickly
  OpenACS release schedules become more predictable
  By not branching, we have to keep HEAD in a very good state, which is good discipline.

New Problems:
  It will be harded to make complex changes in HEAD - probably we will have to require people to do the work in branches and not commit until the branch passes the smoke test.  Even then, we will have to coordinate complex work more closely with manual testing commitments.

2) Minor and Major releases (5.2, 5.3, 6.0) are feature-driven.  We do risky stuff on branches, then merge it after it passes regression, and then do more manual testing and integration testing.  This includes stuff with non-trivial database upgrades, and releases that require platform changes.

3) Work on all non-core packages (services, applications, contrib) is always on HEAD and is not directly included in core releases.  The recommended way to get new applications is through the APM, which uses the repository on openacs.org.

4) The translation server is deliberately lagged behind releases.  We release 5.0, then upgrade the translation server, then ask the translaters to catch up, and then put the full 5.0.0 translations in 5.0.1.  This is obviously not ideal, but I think it's a realistic compromise between our resources and the perfect solution.

I think we should do 3 and 4 immediately, and do 1 and 2 starting with 5.1.1.  Meanwhile, 5.0.x should come from the oacs-5-0 branch; 5.1 should come from head and have a standard freeze process.

Collapse
Posted by Don Baccus on
The branch-and-move-forward paradigm is followed by the Postgres, Mozilla and many other groups.  It is one that many people in the open source community are familiar with, and feel comfortable with.  It has worked well for us in the past and should for the future.  I don't see that CVS issues have much - indeed anything - to do with the long delay involved in releasing 5.0.

I'd favor running automated smoke tests against HEAD regularly, nightly if possible, with those who break things tasked with fixing them, with the understanding that the development process may introduce a time lag.  A big problem we have at the moment with development is not having a good understanding of the current state of the release under current development.  Changing the way we use CVS won't change that.

Likewise we don't need to change our use of CVS to switch to a calendar-driven rather than feature-driven release scheduling paradigm.

Nor do we need to do so to switch to an asynchronous core vs. packages paradigm (something we all agree on doing).

Collapse
Posted by xx xx on
ad 4) I was hoping we could decide on creating language packs instead of using releases to update and add languages.

This is straightforward from a users' perspective, IMO.

It seems that, in the end, this would be like comparing two lists of package-key.message-key 's
It would be important to be able to retain the existing translation, while updating your system, BTW.

I'm aware that it takes effort to prepare/update the system-list (depending on the packages and versions installed) and language-pack (depending on changes of the translation-server), but I would prefer this over new releases.

Collapse
Posted by Andrei Popov on

IMHO releases should be feature (major) and bug (minor) drivven. Trying to link them to calendar will hardly work, as we'd end up with releases that can easily be broken.

As another ¢2, if one wanted to review the process, maybe BSD way could be considered?