cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Hugo Trippaers <h...@trippaers.nl>
Subject Re: [VOTE] git workflow
Date Wed, 06 Aug 2014 14:53:05 GMT
To me this pretty much ties in to the discussion about the simulator and the BVT/CI suite.
This works very neatly with the work Alex has been doing and his proposal on how to deal with
the BVT test suite.

His original proposal was about constantly checking master and reverting any commits that
would cause master to break. If we would adopt another branching model like git flow we can
change this around to, merge only when all checks are green. Given an community that cares
about the quality of the software that they are releasing it will help having a more stable
develop/master branch.

The big idea is that we get small chunks that we can test individually from each other and
once verified merge them into the various branches where we need them. Master would be a special
case where only the release manager merges the individual branches that are going to be part
of a release. If i got everything correctly (which i doubt, so please correct me).

X develops feature F1
Y develops feature F2
Z develops bugfix B1

They are all tested individually and after green light merged into develop, so developers
can work with the latest greatest.

On release time we can all decide to take F1 and B1 into the release because they are release
grade, so they get merged into master. At all times we can track what is where because of
the merging the git commit ids will be the same so a simple check on which branches contain
a commit id will tell you where a certain feature or bug fix is included.


It requires discipline and a trustworthily CI system, but with those things in place it’s
pretty sweet. We run other projects with a similar branching scheme and it works really well.
It’s worth to keep pointing out that this is not a standalone thing, it should be regarded
with the context of a CI system (or committers doing reviews) that can actually tell us if
CloudStack works .


Cheers,

Hugo


On 6 aug. 2014, at 16:10, David Nalley <david@gnsa.us> wrote:

> On Wed, Aug 6, 2014 at 9:41 AM, Rohit Yadav <rohit.yadav@shapeblue.com> wrote:
>> 
>> Hi,
>> 
>> Comments in-line;
>> 
>> On 05-Aug-2014, at 10:45 pm, Alena Prokharchyk <Alena.Prokharchyk@citrix.com>
wrote:
>> 
>>> Rayees,
>>> 
>>> I think you have the same misunderstanding as a lot of other folks
>>> (including myself) had in the beginning - seeing develop branch as a trunk
>>> branch that gets merged into master on a regular basis after the BVT/CI
>>> tests pass. So the master branch reflects the develop branch minus changes
>>> that didn¹t pass the tests and weren¹t merged into master -  lets refer to
>>> it as implementation #1
>>> 
>>> That¹s not what git workflow/this thread proposes. In git workflow master
>>> branch reflects the latest stable release instead. So for example, we
>>> released 4.4, and that what you would see the master to be as we merge the
>>> *release branch to master, not the *develop to master. And develop branch
>>> becomes the trunk branch where all the new fixes go to. I would look at
>>> the master as at the stable branch, where you can track the history for
>>> all the major releases as for each of them the master branch has
>>> corresponding tags - lets call it implementation #2
>>> 
>>> I still don¹t see many advantages in implementation #2 - making the master
>>> build stable by simply making it reflect the latest release branch.
>>> Because you:
>>> 
>>> * never cut the release from master branch
>> 
>> We’ve a stable branch that gets rolling/continuous releases which is good.
>> 
>>> * if you are the customer, and need the latest stable code, you download
>>> the official RPM
>>> * if you are a developer, you always want to download the latest code, and
>>> that comes from *develop branch
>>> * if you want to look at the latest stable release, you look at the
>>> release branch as per CS git workflow implementation we never remove the
>>> release branches (they are needed for maintenance releases)
>> 
>> IMO We “should" remove the release branches when done. Instead there is a support
workflow with git-flow (see support http://yakiloo.com/getting-started-git-flow/) and also
in the tooling (git flow support etc. though experimental).
>> 
> 
> You aren't aiding your case by suggesting that we use experimental tooling.
> 
> So removing a release branch worries me. Will there be loss of commit
> information? I know that heretofore, each release has contained
> commits that aren't in master. Whether that's good, bad or
> indifferent, that is the fact, and I personally think that is unlikely
> to change in the short term.
> 
> Or put more succinctly, what does removing a release branch buy us?
> 
> So I like most of the things about this proposal - I like doing all
> the work in the feature/bug branches. But the rest of this workflow
> befuddles me a bit. I don't think that the workflow will result in a
> stable 'master' or that we are really doing anything significant by
> pushing what is master now to become the develop branch. In the page
> describing this, pushes to the develop branch seem welcome 'when a
> feature is completed' - so develop will be as messy as master is
> today, frequently broken, and no improvement in quality. This attempts
> to solve a quality problem with workflow, and I don't think it can do
> that. Instead, we end up with develop being cluttered and as messy as
> current master, and we spend time trying to get merge commits from
> develop -> master and hoping things don't diverge so far in our
> release branches that we can merge fixes from develop -> master ->
> release-branches.
> 
> This is a bit of a change from what we are doing now; why are we doing
> it? A stable master? I am not sure how a workflow change enforces a
> stable master. Improved quality? A workflow change might be a part of
> the solution, but there seems to be missing something that enforces
> quality or gates on working functionality.
> 
> --David


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message