On Fri, 25 Nov 2016 11:55:57 -0800, Gary Gregory wrote:
On Fri, Nov 25, 2016 at 7:14 AM, Gilles <gil...@harfang.homelinux.org>
wrote:

Hello.

Thanks for all the replies.
However, it seems that when a project could make use of the
flexibility provided by modularization, there are objections
to really embrace it:
 * Some don't like a partial release
 * Some don't like different version numbers
 * Some don't like releasing codes at different levels of
   "achievement"

Clearly there is no consensus.

IMHO, a particular useful feature of modularization is to
allow the respective versions to reflect the actual state of
the code contained in the corresponding module.
Otherwise the (single) version is misleading for some of
modules and meaningless for others.

I can understand that version varying across modules requires
careful attention; but is there a problem in principle?
Won't tools such as Clirr readily spot failures to comply with
compatibility requirements?

Using again the practical example, and trying to mix and match
opposite POVs, here is a suggestion.

Release all "productive" functionality:
 commons-rng-client-api -> 1.0
 commons-rng-core       -> 1.0
 commons-rng-simple     -> 1.0
 commons-rng-sampling   -> 0.8

Question for the latter (from the other thread):
When "sampling v1.0" is released, can it break compatibility
with "sampling v0.8" ?


I guess not.

I understand thus that version numbers below 1 are utterly useless.

In effect, if there is a release of package
  org.apache.commons.rng.sampling
with version, say, 0.8.
Then when version 1.0 is released, the package must change to
  org.apache.commons.rng1.sampling
unless ...

You could also remove any jar hell risk by packaging 0.8 in an
.alpha. package.

... everything released with version < 1 must be in an "alpha"
package
  org.apache.commons.rng.alpha.sampling

Is that a rule? [Anyways, I find it prone to confusion.]

All in all, you confirm that having modules is not giving
any flexibility in release management: codes that would not
strictly require being released together, are forced to
share the same version number.

[The unavoidable consequence is that another component (a.k.a.
"RNG Utils") was the simple and flexible approach.]


On a slightly different note, by assuming that 0.8 would fit
as a version, I might have made it look like the sampling
package is not ready, and you implied that it should not be
released.

Quite the contrary, it is certainly not worse that code
released many times over in Commons Math.
And, with the new 64-bits generators, the continuous
distribution samplers should even be faster.

I can only repeat a statement of fact: I worked on the
design much less than I did for the other modules (a
couple of weeks vs almost a year).
But the functionality is quite usable (as it was deemed
usable in Commons Math).

I'd say that we have to choose between
 (a) allowing different versions in modules (and IIRC Stian
     said that no Apache rule does forbids it), or
 (b) assuming that version numbers are meaningless (in cases
     like "Commons RNG") beyond being a counter, or
 (c) when (b) happens requires the creation of a new
     component.

I've no blocking problem with option (b); just let me know.


Gilles


Gary



Release code only useful for internal development (e.g.
checking that a contribution does degrade performance),
with a suffix that indicates so
 commons-rng-jmh -> 1.0-dev

There is no obligation to provide benchmarking code, is there?
Publishing results on the web site is already much more than
other components do.

Release usage examples with a version number and suffix
indicating that no comptatiblity is to be expected:
 commons-rng-examples -> 0.0.1-beta

[Is there a better "suffix"?]

WDYT?


Regards,
Gilles



On Fri, 25 Nov 2016 13:34:04 +0100, Jörg Schaible wrote:

Hi,

Stian Soiland-Reyes wrote:

I think I'll tend towards agreeing with Jochen here, rather get half the
modules out early than fight ourselves with versioning workarounds if the
rest of the modules are not ready for prime time.

However I see concerns of selective "part releases" and reproducible builds, so I would do this using Maven profiles - the release profile can
have a smaller <modules> set.

I then think all the modules that appear in the src release should also
go
to Nexus as binaries, even if they are more exotic "internal" modules. I would not mess around with selective deployment as it is a recipe for
maintenance nightmare and manual mistakes.

It only gets tricky if the leftover modules get a release cycle of their
own.

It is OK if the -bin release don't have all modules, that is more of a
convenience of jars that are useful out of the box.


The -src artifact is a different case. It should contain anything
independent of the published modules' artifacts (and it can, because it depends on the file patterns in the assembly). It is always a hassle if
you
have no direct possibility to fetch the matching source of the examples
(and
even the JMH stuff) for an individual release. Directing users to GIT is
not
very convenient.

Cheers,
Jörg



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to