I raised this topic in a recent discussion thread, but would like to have
it formally voted on because I think it's pretty important.

The proposal is to adopt semantic versioning [1] for both Isis core and the
components.  More detail below on this.

The vote will be open for 72 hours.

[ ] +1
[ ]  0
[ ] -1   ... please explain why

~~~~~
More detail on the proposal:

Version numbers are in the form x.y.z :
- x is bumped up whenever there a breaking API change
- y is bumped up whenever there is a new feature that does not break API
- z is bumped up for minor bug fixes.

This scheme would be adopted for both core and components.  Version numbers
would not be kept in sync.  Version ranges may not be used (*)

For example

* core 1.0.0 is released
* isis-objectstore-jdo 1.0.0 is released, dependent on core 1.0.0
* isis-viewer-wicket 1.0.0 is released, dependent on core 1.0.0
* core 1.0.1 is released.  This is NOT picked up by either of the above
components.
* isis-objectstore-jdo 1.0.1 is released, dependent on core 1.0.1.  This
also incorporates a number of its own bug fixes
* core 1.1.0 is released, providing a new feature
* isis-viewer-wicket 1.1.0 is released, using the new feature provided by
core 1.1.0
* isis-viewer-wicket 1.2.0 is released, offering its own new feature.  It
still depends on core 1.1.0.
* isis-objectstore-jdo 1.0.2 is released.  This has some bug fixes and
depends on core 1.1.0 (even though it does require the new feature
introduced in core 1.1.0)
* core 2.0.0 is released, making breaking changes to the objectstore API
* isis-objectstore-jdo 2.0.0 is released, dependent on core 2.0.0
* isis-objectstore-jdo 2.1.0 is released, providing a new feature.  It
depends on core 2.0.0.
* isis-viewer-wicket 1.2.1 is released.  This has some bug fixes, and also
updates to run against core 2.0.0

At the end of this sequence we have:
- core 2.0.0
- isis-objectstore-jdo 2.1.0, dependent upon core 2.0.0
- isis-wicket-viewer 1.2.1, dependent upon core 2.0.0

To avoid "jar hell" (components having conflicting dependencies of core)
our recommendation to end-users would be to configure the
maven-enforcer-plugin and its DependencyConvergence rule (good practice for
all maven projects) [2]


(*) with semantic versioning it might make sense to allow for version
ranges for the "z" and perhaps "y" components.  HOWEVER, I recall that one
of the plugins we use for release - can't remember which one just now - has
a bug meaning that we cannot do this even if we wanted to.

[1] http://semver.org.
[2]
http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

Reply via email to