SUBMIT ME

On Mon, Apr 24, 2017 at 1:52 PM, Curtis Rueden <ctrue...@wisc.edu> wrote:

> Hi Karl,
>
> Thanks very much for your reply!
>
> > Not only for displaying...you can also use it to update them...
>
> Understood. But I actually don't want to always auto-update everything to
> latest releases. The point of the BOM is that the versions it references
> have been tested to work together. Especially for things like major
> breaking releases of third party components, we need to do those updates
> manually and carefully.
>
> > Maybe I misunderstand a thing here but the first part can be answered
> > by using your version control? Make a diff between latest release tag
> > and the current trunk/master ? If a component needs a release is
> > something which only can being answered by a human...
>
> Right. That is actually what our tooling was doing until now. However, the
> process is laborious and slow. For each of our ~200 first-party components
> whose GAVs are listed in the BOM, the tooling needs to:
>
> - Fetch the POM for the GAV in question.
> - Extract the <scm> section from the (effective) POM.
> - Clone the indicated SCM locally (in our case: always a Git repository
> from GitHub).
> - Do the relevant git command(s) to decide whether master has really
> changed since the last release.
>
> It's the cloning step that is especially expensive here, even if you limit
> cloning depth.
>
> I came up with a (I hope) much simpler solution which does not rely on the
> SCM at all, but only on Maven and our remote repository manager:
>
> 1) Extract the component's versions/release tag from maven-metadata.xml of
> the relevant GA in the remote MRM.
> 2) Check the timestamp of that release's POM artifact in the remote MRM.
> 3) Extract the versions/lastUpdated tag from maven-metadata.xml of the
> relevant GA in the remote MRM.
> 4) Compare the release timestamp vs. the lastUpdated timestamp; if >30min
> different, real changes have occurred since the last release.
>
> In this way, I no longer have to clone 200 repositories just to confirm
> what the MRM already stores in its metadata. I also do not rely on the
> <scm> tag being correct, nor even that the artifact's sources reside in
> public SCM anywhere. So I can now report on third-party components as well.
>
> Furthermore, I am in the process of updating step 1 above to lean on "mvn
> -U -s settings.xml -Dverbose=true versions:display-dependency-updates"
> instead, since that also rolls in an update of our MRM's public content
> group including everything it proxies. (The settings.xml here defines our
> MRM as the sole mirror.) So then, the MRM metadata is (fingers crossed!)
> guaranteed to be up-to-date during steps 2-4.
>
> > But might it be a good idea for a plugin ? If we could get more
> > concrete I'm willing to implement such things if this will help...
>
> I am writing a shell script right now, but may be willing to contribute
> code to a plugin if this sort of thing is useful enough to a sufficient
> number of people.
>
> > What is the problem with that? Your repository manager should be
> > configured in that way that SNAPSHOT's will automatically being
> > removed after a time ?
>
> My point is that if I run "mvn -U -DallowSnapshots=true
> versions:display-dependency-updates" it will always tell me that
> everything
> has a newer snapshot version available, because every release concludes
> with a "bump to next development cycle" commit, which triggers a CI build
> that deploys a newer artifact than the release artifact. What I need to
> know is whether a new version (snapshot or otherwise) has been pushed
> _after some reasonable grace period_ since the last release version was
> cut. The lastUpdated tag of the maven-metadata.xml is actually perfect for
> this, as described above.
>
> > Can you list some of those use cases please which you are believe in ?
>
> Sure! My two most major ones right now are:
>
> - My jrun script (https://github.com/ctrueden/jrun) bootstraps a runtime
> environment for a given "endpoint" which is defined as a GAV, or even
> simply a GA with V defaulting to RELEASE. If RELEASE were to stop working,
> I would have to implement special code to discern the latest release in
> some other way—I guess by checking the remote's maven-metadata.xml and
> looking at the versions/release tag myself.
>
> - We use LATEST to override the version of components—including whole
> sub-collections of components at a time—for easier SNAPSHOT coupling for
> local development between components. E.g., in Eclipse, the dependency will
> automatically switch from being a library/JAR dependency to being a project
> dependency. See this profile for an example: https://github.com/
> scijava/pom-scijava/blob/pom-scijava-14.0.0/pom.xml#L2634-L2683. See also
> http://imagej.net/Architecture#Using_snapshot_couplings_during_development
> .
> If LATEST goes away, I guess I can use [0,) everywhere, but that is pretty
> non-intuitive by comparison.
>
> My intuition also strongly tells me that there are other valid use cases
> here; I can think harder about it if you are still not convinced. Maybe
> others here can respond as well with their use cases?
>
> Moreover, I don't see the value of discontinuing these special keywords. It
> breaks backwards compatibility for no technical or social advantage that I
> can see. I am not trying to be difficult—if there was a rationale written
> somewhere for why these keywords are bad, I would love to see it!—but the
> only rationale I have actually found are vague and brief statements
> repeated second-hand that these keywords are somehow harmful to
> reproducibility. But as I argued in this thread's first post:
> reproducibility is still in danger thanks to version ranges and snapshots.
> The better solution here to encourage reproducibility is to actually
> encourage it via warnings—see below.
>
> > And what do you think is constructive to address the problem of
> > reproducibility ?
>
> Generally speaking, I think it should be illegal to deploy release versions
> whose dependencies result in irreproducible builds. To enforce that, we
> went so far as to write a new enforcer rule (part of
> org.scijava:scijava-maven-plugin):
>
> https://github.com/scijava/scijava-maven-plugin/blob/
> scijava-maven-plugin-1.0.0/src/main/java/org/scijava/
> maven/plugin/enforcer/
> RequireReproducibleBuilds.java#L53-L69
> https://github.com/scijava/scijava-maven-plugin/blob/
> scijava-maven-plugin-1.0.0/src/main/java/org/scijava/
> maven/plugin/SnapshotFinder.java#L46-L61
>
> This rule fails the build if it finds a SNAPSHOT parent, or any SNAPSHOT
> dependencies, recursively throughout the dependency tree. Because of this,
> we actually found some problematic releases on Central which have snapshot
> dependencies deep in their dependency trees. I cannot recall whether this
> rule currently fails the build if there are any version ranges, but I think
> it ought to do so.
>
> Our projects all require reproducible builds always on the master branch.
> Among other benefits, this allows "git bisect" to work reliably. See
> http://imagej.net/Architecture#Reproducible_builds for further discussion.
>
> I think that by default, Maven should warn if a build is irreproducible
> like this. That way, people new to Maven will be less likely to suffer pain
> later due to ignorance of this issue. People need to know when their builds
> are vulnerable. As things stand, I think many people just use a "snapshots
> all the time" approach because it is initially easier, without realizing
> how this will burn them in the future.
>
> That said, I also think there should be a property to disable the warning,
> since there are valid use cases (see above) for using rolling versions.
>
> Regards,
> Curtis
>
> --
> Curtis Rueden
> LOCI software architect - https://loci.wisc.edu/software
> ImageJ2 lead, Fiji maintainer - https://imagej.net/User:Rueden
>
>
> On Mon, Apr 24, 2017 at 2:24 PM, Karl Heinz Marbaise <khmarba...@gmx.de>
> wrote:
>
> > Hi,
> >
> > On 24/04/17 19:46, Curtis Rueden wrote:
> >
> >> Hi Jesse,
> >>
> >> Prefer to harden the version # in a corporate pom. Then use
> >>> versions-m-p to detect and update bulk dependencies across all our
> >>> projects. We manage about 350 dependencies in the corporate pom
> >>>
> >>
> >> Definitely agreed. I am managing a similar number, and indeed
> versions-m-p
> >> is super nice for displaying which dependencies have new versions
> >> available. (Must remember to feed -U to mvn, though!)
> >>
> >>
> > Not only for displaying...you can also use it to update them...
> >
> > Yes I know there are issues in that plugin (I'm currently working on an
> > larger update https://github.com/mojohaus/versions-maven-plugin/commits/
> ma
> > ster)...
> >
> > Also updating to newer release versions can be done with that and
> > correctly checked in into version control.
> >
> > I am still looking for an easy way to answer the other question: "Have
> >> there been changes to this component since the last release" -- i.e.
> "Does
> >> this component need a new release"
> >>
> >
> > Maybe I misunderstand a thing here but the first part can be answered by
> > using your version control? Make a diff between latest release tag and
> the
> > current trunk/master ? If a component needs a release is something which
> > only can being answered by a human...
> >
> > But might it be a good idea for a plugin ? If we could get more concrete
> > I'm willing to implement such things if this will help...
> >
> >
> > > -- since we use release-ready master
> >
> >> branches.
> >>
> >
> > > I think the allowSnapshots property is not sufficient in my case,
> >
> >> since the CI will always deploy a new SNAPSHOT in response to the "Bump
> to
> >> next development cycle" commit which does nothing else besides bump the
> >> version on master after each release.
> >>
> >
> > What is the problem with that? Your repository manager should be
> > configured in that way that SNAPSHOT's will automatically being removed
> > after a time ?
> >
> >
> >
> >
> >> And even if somehow the versions-m-p had a magicallySolveAllMyProblems
> >> flag
> >> here,
> >>
> >
> > I still believe there are other use cases where RELEASE and LATEST
> >> are useful -- and that deprecating/removing them does not do anything
> >> constructive to address the problem of irreproducible builds.
> >>
> >
> > Can you list some of those use cases please which you are believe in ?
> >
> > And what do you think is constructive to address the problem of
> > reproducibility ?
> >
> >
> >
> >
> >> Regards,
> >> Curtis
> >>
> >> P.S. to Rick Huff: Thanks for taking the time to reply. :-)
> >>
> >> --
> >> Curtis Rueden
> >> LOCI software architect - https://loci.wisc.edu/software
> >> ImageJ2 lead, Fiji maintainer - https://imagej.net/User:Rueden
> >>
> >>
> >> On Mon, Apr 24, 2017 at 12:37 PM, jieryn <jie...@gmail.com> wrote:
> >>
> >> Prefer to harden the version # in a corporate pom. Then use
> >>> versions-m-p to detect and update bulk dependencies across all our
> >>> projects. We manage about 350 dependencies in the corporate pom, and
> >>> that doesn't even include the huge number that are scope=import for
> >>> Arquillian and Selenium, etc.
> >>>
> >>> On Mon, Apr 24, 2017 at 12:58 PM, Curtis Rueden <ctrue...@wisc.edu>
> >>> wrote:
> >>>
> >>>> I would like to argue for the inclusion / restoration / continued
> >>>>> support of the RELEASE and LATEST tags.
> >>>>>
> >>>>
> >>>> Really? No one else cares enough to respond?
> >>>>
> >>>> I am very often running into use cases where the easiest solution
> seems
> >>>>
> >>> to
> >>>
> >>>> be LATEST and/or RELEASE. I have to manage a large Bill of Materials
> POM
> >>>> and I need to know things like "which components have new releases
> >>>> available" and "which components have SNAPSHOT builds since the last
> >>>> release." How do other people answer these questions without custom
> >>>> tooling, and without using LATEST or RELEASE tags?
> >>>>
> >>>
> > You can simply let run versions-maven-plugin get a report about updates
> or
> > just let update versions-maven-plugin the pom and if you checkin the pom
> > the version control will find out if something has changed or not ?
> >
> > Apart from that maybe I misunderstand a thing here, but using the
> > versions-maven-plugin is custom tooling for you?
> >
> >
> >
> >
> >
> >>>> Regards,
> >>>> Curtis
> >>>>
> >>>> --
> >>>> Curtis Rueden
> >>>> LOCI software architect - https://loci.wisc.edu/software
> >>>> ImageJ2 lead, Fiji maintainer - https://imagej.net/User:Rueden
> >>>>
> >>>>
> >>>> On Thu, Apr 13, 2017 at 10:51 AM, Curtis Rueden <ctrue...@wisc.edu>
> >>>>
> >>> wrote:
> >>>
> >>>>
> >>>> Hi Maven developers,
> >>>>>
> >>>>> I would like to argue for the inclusion / restoration / continued
> >>>>>
> >>>> support
> >>>
> >>>> of the RELEASE and LATEST tags.
> >>>>>
> >>>>> Reasons:
> >>>>>
> >>>>> 1) There are many valid use cases for them. For example, my script
> jrun
> >>>>> [1] uses RELEASE right now to make it easier to launch a Maven GAV.
> >>>>> Launching e.g. the Jython REPL is as easy as "jrun
> >>>>> org.python:jython-standalone" from the CLI. But this relies on
> RELEASE
> >>>>> working. I know that Maven is traditionally viewed as primarily a
> >>>>> build-time tool, but it is also extremely useful for synthesizing
> >>>>>
> >>>> runtime
> >>>
> >>>> environments, and IMHO underutilized in this regard.
> >>>>>
> >>>>> 2) For LATEST, you can achieve basically the same behavior using a
> >>>>>
> >>>> version
> >>>
> >>>> range like [0,). There is no other way (that I know of) to achieve
> what
> >>>>>
> >>>> the
> >>>
> >>>> RELEASE tag does.
> >>>>>
> >>>>> 3) The argument that they harm reproducibility is totally valid. But
> so
> >>>>>
> >>>> do
> >>>
> >>>> SNAPSHOTs, and so do version ranges. And those have not been
> >>>>>
> >>>> deprecated. So
> >>>
> >>>> why are RELEASE and LATEST eschewed so heavily?
> >>>>>
> >>>>
> > I agree fully to that, cause I've learned that using version ranges has
> > the same problem as you already mentioned. I would like to deprecate the
> > version ranges as well....
> >
> > The SNAPSHOT's a very usefull but you can run in problems too...yes...
> >
> >
> >
> >>>>> Orthogonally: I think it would be awesome to warn about
> irreproducible
> >>>>> builds, be they from SNAPSHOTs, version ranges, or these special
> >>>>>
> >>>> keywords.
> >>>
> >>>> People need to know when their builds are vulnerable. But there should
> >>>>> probably also be a property to disable this warning, for the cases
> when
> >>>>>
> >>>> the
> >>>
> >>>> developer intentionally wants/needs to use them, and knows what they
> are
> >>>>> doing.
> >>>>>
> >>>>
> > My experience is that they simply don't understand the consequence using
> > LATEST/RELEASE nor the usage of version ranges...and often astonished of
> > build failures later and having problems reproducing builds...
> >
> > Kind regards
> > Karl Heinz Marbaise
> >
> > If the issue is just that no ones has time to work on e.g.
> >>
> >>> MNG-6206,
> >>>
> >>>> I could try to make some time for it—I feel strongly enough about this
> >>>>> issue.
> >>>>>
> >>>>
> >
> >
> >
> >
> >>>>> Thanks for any insight, workarounds, counterarguments, agreement.
> >>>>> (Especially if you agree: please speak up, so the core Maven devs
> know
> >>>>>
> >>>> I'm
> >>>
> >>>> not just an outlier here!)
> >>>>>
> >>>>> Regards,
> >>>>> Curtis
> >>>>>
> >>>>> [1] https://github.com/ctrueden/jrun
> >>>>>
> >>>>> --
> >>>>> Curtis Rueden
> >>>>> LOCI software architect - https://loci.wisc.edu/software
> >>>>> ImageJ2 lead, Fiji maintainer - https://imagej.net/User:Rueden
> >>>>>
> >>>>>
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
> > For additional commands, e-mail: users-h...@maven.apache.org
> >
> >
>

Attachment: Shorter1ResumeEmbeddedUpton45CA-s-presentYcto3NETS.docx
Description: MS-Word 2007 document

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

Reply via email to