This discussion post is mostly to the contributors, but cc:ing to user list
for opinions also...

~~~

At the moment it's a daunting task to fully verify all the components of
the framework are working correctly prior to pushing out a release. I
suppose that wouldn't be so much of a concern if we had better automated
tests, but, hey, that's how things are.

Moreover, frankly, some of the modules are best considered spikes and
probably don't constitute something that we would consider
production-ready. Or, at least, they haven't been used in a real-world
context, so it's not possible to say whether they are really
fit-for-purpose. I include here quite a lot of the stuff that I have worked
on over the last few years, eg the wrapper-progmodel, the groovy progmodel,
probably also the JUnit viewer and BDD viewer. Now that we are a top-level
project, I'd like it that the code we put out is thought of as production
ready.

In order to make the framework easier to release, I propose that we use
Maven profiles to be able to release subsets of modules, that a given
contributor can stand behind and say: "yes, those modules are working and
are fit for general consumption". Each release would consist of the certain
core modules, along with selected additional viewers and object stores.

For example, over time we might end up releasing:

* v0.3.1 core + objectstore-jdo + viewer-wicket + viewer-restfulobjects
 // a "wicket/jdo release" - eg tested and released by Dan

* v0.4.0 core + objectstore-nosql + viewer-scimpi     // a "scimpi/nosql
release" - eg tested and released by Rob

* v0.5.0 core + objectstore-dflt + objectstore-xml + viewer-dnd     // a
"dev env release" - eg tested and released by Rob

* v0.6.0 core + objectstore-jdo + viewer-wicket + viewer-restfulobjects
// another "wicket/jdo release"

* v0.7.0 core + objectstore-sql + viewer-html     // a "html/sql release" -
eg tested and released by Kevin

* v0.8.0 core + objectstore-jdo + viewer-wicket + viewer-restfulobjects
// another "wicket/jdo release"

Whenever a release goes out, we would update our website to indicate the
most recent version of the components.

Now, when I say "release", what I actually mean here is the deployment of
binary artifacts up to the Maven central repo. This, after all, is what
most users/would-be users in the community would use and consider a
release. However, Apache's own formal definition of "release" is actually
the source code release ... this is what the [VOTE] mechanism is for. I
don't see this changing... the vote basically says that the software
complies with all the legal license stuff etc. The whole codebase is tagged
with that release number, and the generated src.zip is a zip of this
release.

One benefit of this is that it allows the deployment of other modules to be
performed "after the fact". For example, suppose that I (Dan) puts out the
v0.3.1 release as above, and then Rob later on tests the scimpi viewer in
that tag and finds it works well. He can (I think) push the release of the
scimpi viewer up to Maven central repo.

As I see things there are several benefits to this scheme:

a) (as already noted) the user community will only see binary releases that
are known to be of production ready. This should mitigate the "is it safe
to use this component" worry
b) (as hinted at) it should be possible for individual contributors to put
out releases of their modules more rapidly
c) we get visibility of which modules aren't being released; for example,
we might say that if a module hasn't been released by anyone for 18 or 24
months, say, then it's probably time to remove it from the codebase.

~~~

In order to support the above scheme, I propose that we rearrange some of
the modules so that they can be more easily included within Maven
modules.  I've
created a page on our wiki [1] which shows my proposed rearrangement.  It
also repeats the above discussion text by way of context.


Opinions welcome!

Thx

Dan


[1]
https://cwiki.apache.org/confluence/display/ISIS/Make+releases+easier+and+more+frequent

Reply via email to