This page was moved to https://cwiki.apache.org/confluence/display/CAUSEWAY/Make releases easier and more frequent
Click in the link above if you are not automatically redirected in 10 seconds.


You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Rationale

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, we might have:

  • 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 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 the site 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 months, say, then it's probably time to remove it from the codebase.

Flattening the Modules

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. The table below summarises the changes (with the 'new location' column being relative to trunk/framework directory):

 

 

 

 

Wicket/Rest/JDO

Scimpi/NoSQL

HTML/SQL

Module

New location

Core?

Notes

edition

edition

edition

isis

.

Y

No change

Y (core)

Y (core)

Y (core)

isis.applib

applib

Y

No change

Y (core)

Y (core)

Y (core)

isis.core

core

Y

No change

Y (core)

Y (core)

Y (core)

isis.quickstart-archetype

isis.quickstart-archetype-xxx-yyy

N

Split into several, per release profile

Y

Y

Y

isis.runtimes

Remove module

 

 

 

isis.runtimes.dflt

runtime-dflt

Y

 

Y (core)

Y (core)

Y (core)

isis.runtimes.dflt.bytecode

bytecode

Y

 

Y (core)

Y (core)

Y (core)

isis.runtimes.dflt.monitoring

monitoring

N

 

 

 

 

isis.runtimes.dflt.objectstores

Remove module

 

 

 

isis.runtimes.dflt.objectstores.dflt

objectstore-dflt

N

No longer considered part of core

 

 

 

isis.runtimes.dflt.objectstores.jdo

objectstore-jdo

N

 

Y

 

 

isis.runtimes.dflt.objectstores.nosql

objectstore-nosql

N

 

 

Y

 

isis.runtimes.dflt.objectstores.sql

objectstore-sql

N

 

 

 

Y

isis.runtimes.dflt.objectstores.xml

objectstore-xml

N

 

 

 

 

isis.runtimes.dflt.profilestores

Remove module

 

 

 

isis.runtimes.dflt.profilestores.dflt

profilestore-dflt

Y

 

Y (core)

Y (core)

Y (core)

isis.runtimes.dflt.profilestores.sql

profilestore-sql

N

 

 

 

 

isis.runtimes.dflt.profilestores.xml

profilestore-xml

N

 

 

 

 

isis.runtimes.dflt.runtime

runtime-dflt/runtime

Y

 

Y (core)

Y (core)

Y (core)

isis.runtimes.dflt.testsupport

runtime-dflt/testsupport

Y

 

Y (core)

Y (core)

Y (core)

isis.runtimes.dflt.webapp

runtime-dflt/webapp

Y

 

Y (core)

Y (core)

Y (core)

isis.runtimes.dflt.webserver

runtime-dflt/webserver

Y

 

Y (core)

Y (core)

Y (core)

isis.progmodels

Remove module

 

 

 

isis.progmodels.dflt

progmodel-dflt

Y

 

Y (core)

Y (core)

Y (core)

isis.progmodels.groovy

progmodel-groovy

N

 

 

 

 

isis.progmodels.wrapper

progmodel-wrapper

N

 

 

 

 

isis.viewer

Remove module

 

 

 

isis.viewer.bdd

viewer-bdd

N

 

 

 

 

isis.viewer.dnd

viewer-dnd

N

 

 

 

 

isis.viewer.html

viewer-html

N

 

 

 

Y

isis.viewer.junit

viewer-junit

N

 

 

 

 

isis.viewer.restfulobjects

viewer-restfulobjects

N

 

Y

 

 

isis.viewer.scimpi

viewer-scimpi

N

 

 

Y

 

isis.viewer.wicket

viewer-wicket

N

 

Y

 

 

isis.security

Remove module

 

 

 

isis.security.dflt

security-dflt

Y

 

Y (core)

Y (core)

Y (core)

isis.security.file

security-file

Y

 

Y (core)

Y (core)

Y (core)

isis.security.ldap

security-ldap

N

 

 

 

 

isis.security.sql

security-sql

N

 

 

 

 

isis.tck

tck

Y

 

Y (core)

Y (core)

Y (core)

Profiles

as defined in pom.xml.

<profiles>
	<profile>
		<id>wicket-edition</id>
		<properties>
			<sourceReleaseAssemblyDescriptor>source-release-wicket-edition.zip
			</sourceReleaseAssemblyDescriptor>
		</properties>
		<modules>
			<!-- core modules -->
			<module>applib</module>
			<module>core</module>
			<module>runtimes-dflt</module>
			<module>progmodel-dflt</module>
			<module>bytecode</module>
			<module>profilestore-dflt</module>
			<module>security-dflt</module>
			<module>security-file</module>
			<module>tck</module>
			<!-- edition-specific -->
			<module>objectstore-jdo</module>
			<module>viewer-restfulobjects</module>
			<module>viewer-wicket</module>
			<module>quickstart-archetype-wicket-restful-jdo</module>
		</modules>
	</profile>

	<profile>
		<id>scimpi-edition</id>
		<properties>
			<sourceReleaseAssemblyDescriptor>source-release-scimpi-edition.zip
			</sourceReleaseAssemblyDescriptor>
		</properties>
		<modules>
			<!-- core modules -->
			<module>applib</module>
			<module>core</module>
			<module>runtimes-dflt</module>
			<module>bytecode</module>
			<module>progmodel-dflt</module>
			<module>profilestore-dflt</module>
			<module>security-dflt</module>
			<module>security-file</module>
			<module>tck</module>
			<!-- edition-specific -->
			<module>objectstore-nosql</module>
			<module>viewer-scimpi</module>
			<module>quickstart-archetype-scimpi-nosql-jdo</module>
		</modules>
	</profile>

	<profile>
		<id>wicket-edition</id>
		<properties>
			<sourceReleaseAssemblyDescriptor>source-release-html-edition.zip
			</sourceReleaseAssemblyDescriptor>
		</properties>
		<modules>
			<!-- core modules -->
			<module>applib</module>
			<module>core</module>
			<module>runtimes-dflt</module>
			<module>bytecode</module>
			<module>progmodel-dflt</module>
			<module>profilestore-dflt</module>
			<module>security-dflt</module>
			<module>security-file</module>
			<module>tck</module>
			<!-- edition-specific -->
			<module>objectstore-sql</module>
			<module>viewer-html</module>
			<module>quickstart-archetype-html-sql</module>
	</profile>

<!-- not yet defined in any edition, though there could be a 'dev env' edition: 
	monitoring objectstore-dflt objectstore-xml profilestore-sql profilestore-xml 
	progmodel-groovy progmodel-wrapper viewer-bdd viewer-dnd viewer-junit security-ldap 
	security-sql -->

</profiles>

  • No labels