Cool! I like the idea! :)

On Thu, Sep 10, 2015 at 6:38 PM, Jan Lehnardt <j...@apache.org> wrote:

>
> > On 10 Sep 2015, at 18:31, Robert Kowalski <r...@kowalski.gd> wrote:
> >
> > Hi Jan,
> >
> > how would testing of a PR/change work in practice?
> >
> > Example: I am opening 3 Pull-Requests that depend on each other, one in
> > chttpd, one in fabric and one in rexi.
> >
> > Or is the idea that the testsuite turns red when the deps are updated in
> > the top level module?
>
> Yeah, if the top module only works with all three PRs in concert, you get
> two broken builds and then a working build.
>
> (some of the details of what I explained earlier might make it sound that
> this isn’t possible, rest assured, we’ve considered this case :)
>
> Best
> Jan
> --
>
> >
> > On Thu, Sep 10, 2015 at 2:09 PM, Jan Lehnardt <j...@apache.org> wrote:
> >
> >>
> >>> On 10 Sep 2015, at 12:18, Alexander Shorin <kxe...@gmail.com> wrote:
> >>>
> >>> On Thu, Sep 10, 2015 at 12:40 PM, Dale Harvey <d...@arandomurl.com>
> >> wrote:
> >>>> I dont think CI is a dream, It should take an afternoon at most to get
> >>>> CouchDB setup on travis on a single platform to ensure no major
> >> regressions
> >>>> come though. If anyone wants help doing that feel free to ping me on
> >>>> #pouchdb / #couchdb, we already test couchdb master in travis.
> >>>
> >>> It is a dream for now.
> >>>
> >>> We have travis enabled, but it has practical flaw: it cannot handle
> >>> changes that affected multiple repositories at the same time. Also,
> >>> for each repository we have to build full CouchDB to test what is a
> >>> bit overkill.
> >>>
> >>>> I do think multirepos is an issue and that solution is not so simple,
> we
> >>>> went through the same issues with pouchdb as we attempted to split out
> >> our
> >>>> repository.
> >>>
> >>> Well, there was a good theory that each of our repository will contain
> >>> an app which could be reused outside of CouchDB or being easily
> >>> replaced by alternative implementation. Suddenly, for now most of our
> >>> apps are heavy coupled
> >>
> >> There are two distinct functions that git does for us here:
> >> 1. Separate code into different modules.
> >> 2. Make a module available to downstream users.
> >>
> >> In a Node/npm, Python/pip, Ruby/Gems world, 1. is solved by git, 2. is
> >> solved by npm/pip/Gems. Is there a way to publish an Erlang module for
> >> downstream users
> >> independently of git? If yes, we could move back to a single-git-tree
> >> model for
> >> CouchDB, but we can still release parts as independent modules. I know
> >> there have
> >> been a few attempts at Erlang package managers, but has anything taken
> off?
> >>
> >> * * *
> >>
> >> For Hoodie, we came up with this, based on our experience with using the
> >> full top level test suite on each module (it is indeed overkill):
> >>
> >> - separate modules
> >> - one module that is the top level module (like our couchdb.git) that
> only
> >> includes module dependencies and a top-level integration test suite.
> >> - two release trains: stable and next.
> >> - a service that attempts to create a new version of the top level
> module
> >> with every commit to a dependent module. E.g. we automatically bump the
> >> dependency in a checkout of the top level module, run the integration
> >> tests, if they fail, nothing happens and we report that back on the
> commit
> >> to the dependent module. If it succeeds, we automatically determine the
> >> next version number on the next release train (SemVer makes that easy)
> and
> >> release the new top level module with the updated dependency.
> >> - once we are comfortable that the next release train is stable enough
> for
> >> a release, we change switch out the release trains: next becomes stable,
> >> and we have a new empty next train (npm uses release tags for this, but
> the
> >> mechanics are irrelevant, although something like that needs to be
> >> supported in the package manager).
> >>
> >> This requires:
> >> - Strict SemVer on all modules (we use
> >> https://github.com/semantic-release/semantic-release) to make sure
> humans
> >> can’t screw this up.
> >> - Breaking change detection, so we don’t accidentally release a BC break
> >> in a non-major version (available as semantic-release plugins).
> >> - the service that does the auto-update dance described above.
> >>
> >> This is a lot of infrastructure (and some of it we are still
> developing),
> >> but once in place, it is really simple to not screw this up and it
> takes a
> >> huge cognitive load off of everyday development.
> >>
> >> Semantic-Release is language agnostic in theory, but afaik there are
> only
> >> Node and Python versions, so we’d have to find someone to make an Erlang
> >> variant. Also, the process uses npm heavily, so some sort of package
> >> management system would be nice.
> >>
> >> Eventually, I’d love to see this for CouchDB.
> >>
> >> PS: The person who invented semantic-release works for my company, and
> I’d
> >> be more than happy to have them have a crack at this. If anyone wants to
> >> sponsor an erlang-semantic-release, please get in touch.
> >>
> >> * * *
> >>
> >> Either way, this is a bit of a long shot. For now:
> >>
> >> We should do what Dale proposed in 2.: pin top level dependencies. I
> >> believe that was the plan all along, but with a fast moving 2.0 we just
> >> didn’t do it yet. Now is the time to pin versions and manually upgrade
> them
> >> after thorough testing (can still be in PRs and tested on Travis and
> >> everything).
> >>
> >> That means all of these modules (and their sub-deps) should get releases
> >> and release tags and those tags need to be filled into our top-level
> >> rebar.config.script:
> >>
> >>
> https://github.com/apache/couchdb/blob/master/rebar.config.script#L19-L53
> >>
> >> Let’s get going :)
> >>
> >> Thanks
> >> Jan
> >> --
> >>
> >>
> >>
> >>
> >>>
> >>>> 1. Dont split out into lots of repositories, if you put those
> components
> >>>> inside the CouchDB repo, then they will get the CouchDB tests run
> >> against
> >>>> them when changes are made and you wont break the CouchDB repo.
> >>>
> >>> It's good in retrospective, but useless now. We have to decide how our
> >>> CI will work: with multirepo layout or first fold all core repos back
> >>> to the one. I think we are ready to revise this too and probably this
> >>> should be done before CI work.
> >>>
> >>>> 2. Anything that does live outside the CouchDB repo, pin their version
> >>>> inside the CouchDB repo, dont have commits to subproject X
> >> automatically be
> >>>> applied to CouchDB, that means you can commit whatever you want to X
> but
> >>>> CouchDB will still be working, when you come to update the version of
> X
> >> you
> >>>> pinned, you can see that it breaks and not update until it is fixed.
> >>>
> >>> It's good strategy for milestones or when you don't have to manage 40+
> >> repos (:
> >>>
> >>>> 2.5 Another strategy that can help with this is to have the full
> >> CouchDB
> >>>> test suite run inside X, so changes to X will run the full CouchDB
> suite
> >>>> with an updated X
> >>>
> >>> This works, but until changes are belongs to a single repository. See
> >>> above about travis issue.
> >>>
> >>>
> >>> P.S. Jason, you are right again (:
> >>>
> >>> --
> >>> ,,,^..^,,,
> >>
> >> --
> >> Professional Support for Apache CouchDB:
> >> http://www.neighbourhood.ie/couchdb-support/
> >>
> >>
>
> --
> Professional Support for Apache CouchDB:
> http://www.neighbourhood.ie/couchdb-support/
>
>

Reply via email to