Victor Lowther (victor.lowt...@gmail.com) wrote: > On Fri, Jan 3, 2014 at 8:52 AM, Adam Spiers <aspi...@suse.com> wrote: > > Victor Lowther (victor.lowt...@gmail.com) wrote: > > > On Fri, Jan 3, 2014 at 5:33 AM, Adam Spiers <aspi...@suse.com> wrote: > > > > Victor Lowther (victor.lowt...@gmail.com) wrote: > > > > > This is intended to work as a starting point for a discussion of what > > > > > tool > > > > > we should use to use to track inter-repository dependencies for CB2.0 > > > > > in > > > > > the opencrowbar org. > > > > > > > > Before evaluating the tools I think it would be worth trying to > > > > clarify the requirements. For example, all the approaches you list > > > > seem to assume that there will only be dependencies from a single > > > > superproject repository onto multiple slave repositories, but why is > > > > it safe to exclude the possible need to track dependencies between > > > > slave repositories? > > > > > > Then you are assuming too much. None of the tools I mentioned enforce > > > such > > > a relationship between git repositories > > > > OK, maybe I didn't express myself clearly enough then, or maybe we > > are talking about different types of dependencies. > > > > I assumed that by "inter-repository dependencies" you were talking > > about dependencies at the version control layer, e.g. one of the > > following:
[snipped] > > (Probably not all of these would be useful, but I'm just listing them > > now for clarity, to help us avoid talking at cross-purposes.) > > > > These types of dependencies are obviously very different in nature to > > the crowbar.yml types of dependencies such as "barclamp-nova requires > > barclamp-keystone". > > > > So are you talking about the first type of dependency or the second, > > or both, or something else? > > The first type of dependency. However, that all the tools express their > relations in terms of parent/child relationships does not mean that we are > restricted to a one superproject -> many subprojects structure -- I am > leaning towards a one-superproject-per-release structure myself, and the > superprojects would pick and choose whatever subset of the slaves were > appropriate. You really mean a superproject (i.e. separate git repo) per release, or per build? I can *maybe* understand per build, but per release would dispose of the many benefits which git branches provide. > > With regards to the first type of dependency listed above > > (i.e. version control layer): > > > > ./dev, git submodule, and git subtree, and gitslave *all* assume a > > topology which involves a single parent repository and one or more > > child repositories. I'm not sure about gitslave, but for the other > > three, version control layer dependencies can only be expressed from > > the parent ("superproject" as gitslave calls it) onto children > > (e.g. to define a "snapshot" representing a particular release), not > > between children. So my question was: is this limitation safe, or > > might it get in the way later on? The answer may well be "yes, it's > > safe"; I just wanted to raise awareness that adoption of any of the > > tools you proposed will impose that limitation. > > That is an area I would like to discuss -- what sort of restrictions are we > willing to live with here? Maybe easier to ask what things we are not willing to live without? For example: - the ability to express dependencies between barclamps (e.g. for handling barclamp API changes or any other changes where we would currently use PR bundles) - CI which is easily run per pull-request, without having to build and maintain a complex layer of custom automation - making it easy for newcomers to start developing within minutes rather than hours or days (e.g. without having to build/download a large ISO or learn a complex workflow) > > > > What do these repositories contain? > > > > > > Source code, docs, and metadata. > > > > > > > Multiple barclamps in the superproject and one per slave? > > > > > > Doesn't matter for the purposes of this conversation. > > > > It does, because ./dev currently assumes no barclamps in the > > superproject and one per slave whereas the other tools you proposed > > don't, so if you want to achieve something different to the current > > layout then that will certainly impact the decision whether to > > continue using ./dev or not. > > Or splitting ./dev into several smaller tools, one of which would be the > bit that handles git repo interdependencies. Right. Of course I'm not saying it's impossible to change ./dev in order to accommodate a different topology (and as you already know I am a big fan of the idea of splitting it up into smaller tools with decoupled responsibilities) - but the effort of doing so would need to be considered versus switching to another approach, and that's why it impacts the decision around tool choice. > > > > Where do tools live? > > > > > > Wherever we want them to. > > > > Will the superproject be release-specific or not? Development of > > ./dev and its associated files was held back by the fear of breaking > > reproducible builds for older releases. But then keeping any future > > repository "meta" tool in a separate repository to the build toolchain > > should alleviate this problem. > > One of the things I am interested in talking about. OK, but let's first ascertain whether we really need a custom tool at all. > > > > I have a strong preference for reusing existing technology over > > > > rolling custom tools. For example, packaging barclamps as gems would > > > > provide the functionality of the whole gem/bundler ecosystem for free, > > > > which AFAICS would in one stroke solve the whole problem. > > > > > > I don't see how introducing a packaging conversation here is useful, > > > unless > > > you prefer downloading a gem over cloning a repo when you want to hack on > > > some random ruby project (as opposed to just using it) > > > > Yes, I *hugely* prefer that - that's the whole point! If dependencies > > are available as gems then this whole discussion becomes a non-issue. > > > Example advantages: > > > > - Any barclamp repo could easily be unit-tested standalone in Travis > > simply by ensuring its Gemfile expressed the right dependencies > > (e.g. on the core framework and barclamp gems), rather than the > > awful https://github.com/crowbar/travis-ci-crowbar tree flattening > > hack we were forced to build previously, which was never able to > > automatically test pull requests. > > > > - Dependencies could be expressed using version numbers adhering to > > semantic versioning, which gives much more flexibility during > > testing than a monolithic approach which insists git cloning an > > exact set of commits/branches/tags from a set of remotes chosen > > by an opinionated tool. > > > > - Doesn't reinvent any wheels. > > > > - Proven technology already adopted by the whole Ruby community. > > > > - Everyone already knows bundler / Gemfile etc. very well => very > > shallow learning curve => more welcoming for newbies > > OK. > > > Packaging and dependency handling are NOT mutually orthogonal problems. > > True, but I wish to focus on dependencies at the VCS level for the purposes > of this conversation, not the packaging level. Why? If you agree that they are not orthogonal, then how would you attempt to solve one without solving the other? > If you want to do otherwise, please start a new thread. That doesn't make sense to me either, given that we apparently agree the problems can't be isolated ... but very well - two threads tackling strongly coupled problems is better than one which ignores one ;-p _______________________________________________ Crowbar mailing list Crowbar@dell.com https://lists.us.dell.com/mailman/listinfo/crowbar For more information: http://crowbar.github.com/