Also a problem we have encountered with using a 'next' branch for active
development is from third party commits.

Every single 3rd party pull request is going to come into master.

You can ether:
1. tell them to redo it on next
2. rebase it into next for them and let them know for next time.

The cost of option 2 gets more the longer it takes to release.  A 3rd party
pull request coming in could be based on code that is 2+ months old.

This isn't a vote against a development branch, but a small annoyance we
have run into.


On Wed, Jan 2, 2013 at 5:08 PM, Gord Tanner <gtan...@gmail.com> wrote:

> A hot fix is usually branched off of master, tested, merged and released.
>
> We then rebase / merge the hotfix up into next.
>
>
> On Wed, Jan 2, 2013 at 4:51 PM, Michal Mocny <mmo...@chromium.org> wrote:
>
>> Also: while I personally prefer master to be the dev channel, I will say
>> that I do like Gord's suggestion of how its done in ripple in that the
>> name
>> of the dev branch is 'next' and not '2.3.0' so that your dev setup doesn't
>> need to change every month.
>>
>> Gord: how do you deal with bugfixes/point releases?  Do you fix in feature
>> branch, merge into next, and then cherry-pick/merge just that fix into
>> master before doing a major release?  Or, do you just offer bugfixes via
>> 'next'?
>>
>>
>> On Wed, Jan 2, 2013 at 4:45 PM, Michal Mocny <mmo...@chromium.org> wrote:
>>
>> > I don't have much weight here, but personally I feel that this seems
>> > backwards.
>> >
>> > With this proposal (if I understand it), when you do a fresh checkout of
>> > the codebase, instead of sitting on the bleeding edge, you would be
>> sitting
>> > at a "stable" release which is conceptually read-only for most
>> contributors
>> > (writes happen in the form of batch "releases" which itself would just
>> be
>> > some git-fu to rebase master).
>> >
>> > I am happy enough to have features be worked on in branches etc, I just
>> > think that it should be flipped and the stable release be the branch and
>> > dev to be on master.
>> >
>> >
>> > As a separate issue, I would suggest not using branches to "name" point
>> > releases, but just tag them.  If you have a 2.3.0 release, and you need
>> to
>> > fix a bug in 2.3.1, those should not become two logically separate code
>> > branches with independent dev, but rather they are a logically single
>> > timeline with many names for each historically significant commit,
>> right?
>> >  Thats what tags are for (http://git-scm.com/book/en/Git-Basics-Tagging
>> ).
>> >
>> > -Michal
>> >
>> >
>> > On Wed, Jan 2, 2013 at 3:05 PM, Gord Tanner <gtan...@gmail.com> wrote:
>> >
>> >> This is what we have done in ripple (and webworks)
>> >>
>> >> master - always stable current shipping code
>> >> next - always 'stable' next release. Expectation that code has been
>> tested
>> >> / run before merged into this branch.
>> >> feature branches - branched off of next and merged into next when
>> stable /
>> >> done. Not expected to be stable or runnable until merge time.
>> >>
>> >>
>> >>
>> >> On Wed, Jan 2, 2013 at 2:32 PM, Filip Maj <f...@adobe.com> wrote:
>> >>
>> >> > Am I correct when I say that, with this approach, master becomes a
>> >> series
>> >> > of merge commits coming from dev, then ?
>> >> >
>> >> > A couple questions to follow up:
>> >> >
>> >> > - "features get forked from stable" - forked from master, yes?
>> >> > - "features, when ready, tested against dev branch" - what does this
>> >> mean?
>> >> > Does this mean, you would merge feature branch into dev branch
>> (locally)
>> >> > then run tests to make sure things work?
>> >> >
>> >> > On 1/2/13 11:19 AM, "Joe Bowser" <bows...@gmail.com> wrote:
>> >> >
>> >> > >OK, Let's rethink this:
>> >> > >
>> >> > >After talking with Brian on the 21st, I think we agree on this:
>> >> > >
>> >> > > * Master remains stable and sits at the most recent released code
>> >> > >(i.e. 2.3.0 once we get 2.3.0 done) (Stable Channel)
>> >> > > * Dev happens on branches for the releases (i.e. 2.4.0) (Dev
>> Channel)
>> >> > > * In the case of a point release, dev happens in the branch of the
>> >> > >major release (i.e. 2.3.1 would happen in the 2.3.0 branch, not
>> >> > >master) (Testing Channel)
>> >> > > * Features get forked on stable then once the feature is ready,
>> >> > >tested against the dev branch.  If they work with stable, they
>> SHOULD
>> >> > >work with 2.4.0.  If they don't, the tickets get added to 2.4.0 to
>> >> > >make it work with that release.  That way things are more
>> predictable
>> >> > >as far as new features are concerned. (You will burn your face
>> >> > >channel).
>> >> > >
>> >> > >Does that make sense? Working on master for things causes us pain
>> and
>> >> > >we should use git conventions to make it simpler for people who
>> expect
>> >> > >our master to work all the time.  I don't think this will speed up
>> the
>> >> > >release as much as automating tagging of RCs so that when the JS is
>> >> > >tagged, everything else is tagged.  The week it takes to tag an RC
>> is
>> >> > >way too long.
>> >> > >
>> >> > >
>> >> > >On Wed, Jan 2, 2013 at 11:08 AM, Filip Maj <f...@adobe.com> wrote:
>> >> > >> Bumping this thread. I'd like Joe to clarify as well.
>> >> > >>
>> >> > >> On 12/20/12 12:26 PM, "Brian LeRoux" <b...@brian.io> wrote:
>> >> > >>
>> >> > >>>Ok, I want to understand this, let me take a stab.
>> >> > >>>
>> >> > >>>You describe three long-lived branches like this:
>> >> > >>>
>> >> > >>>- Master: This is stable and frozen on the last tagged release.
>> >> > >>>- Dev: the next release to be tagged. Feature branches merged from
>> >> > >>>master when confident.
>> >> > >>>- Unstable: the current working branch for a particular tag.
>> Feature
>> >> > >>>branches merged as needed for collaboration.
>> >> > >>>
>> >> > >>>Everyone works from local feature branch rebasing and committing
>> to
>> >> > >>>master. When that feature branch is considered good enough, it is
>> >> > >>>merged into dev, and work continues. Whatever date we happen to
>> pick
>> >> > >>>for a release that is what dev becomes, we tag, and move that sha
>> to
>> >> > >>>stable if its not an RC.
>> >> > >>>
>> >> > >>>?
>> >> > >>>
>> >> > >>>
>> >> > >>>
>> >> > >>>
>> >> > >>>On Thu, Dec 20, 2012 at 10:52 AM, Joe Bowser <bows...@gmail.com>
>> >> wrote:
>> >> > >>>> I'm OK with this, but I think your example is off:
>> >> > >>>>
>> >> > >>>> Where n is the current released piece of the software:
>> >> > >>>>
>> >> > >>>> n.x.x = Stable
>> >> > >>>> n+1.x.x = Dev
>> >> > >>>> master = Unstable, can have things merged in from feature
>> branches
>> >> > >>>>
>> >> > >>>> This fully uncouples features from release planning, which is
>> good
>> >> > >>>> because it means the release will land in the version when it's
>> >> ready,
>> >> > >>>> and not for any other reason.  I also propose that we keep using
>> >> the
>> >> > >>>> same RC tags and that for a final release we tag it x.x.xFinal.
>>  We
>> >> > >>>> still need to tag an RC and re-tag it.
>> >> > >>>>
>> >> > >>>> Release Process:
>> >> > >>>> 1. Tag the dev tree
>> >> > >>>> 2. merge the dev tree back into master
>> >> > >>>> 3. Create 2.5.0 branch
>> >> > >>>> 4. File issues from 2.5.0 in JIRA
>> >> > >>>>
>> >> > >>>> I also propose that we automate the tagging.  If an RC is
>> broken,
>> >> we
>> >> > >>>> just cut another RC.  A lot of our retagging is done to get
>> around
>> >> the
>> >> > >>>> pain of having to do another RC.  The biggest part of the delay
>> is
>> >> > >>>> waiting for every single platform maintainer to tag their
>> platform
>> >> > >>>> after the JS was tagged.  For example, I tagged rc2 for the JS
>> and
>> >> for
>> >> > >>>> Android on Monday last week from my hotel room, and the release
>> >> wasn't
>> >> > >>>> fully tagged until this week.  I'm fine with RCs going up to 10
>> as
>> >> > >>>> long as we can release early, release often and release when we
>> >> want
>> >> > >>>> to and not run out of time and have to delay.
>> >> > >>>>
>> >> > >>>> On Thu, Dec 20, 2012 at 10:33 AM, Brian LeRoux <b...@brian.io>
>> wrote:
>> >> > >>>>> Truth. Though lets not get hung up on the past and just focus
>> on
>> >> the
>> >> > >>>>> present. We've done a really good job getting where we are.
>> >> > >>>>>
>> >> > >>>>> So, Joe, are you saying you like the idea of three long lived
>> >> > >>>>>branches
>> >> > >>>>> and merges happen from local feature branches?
>> >> > >>>>>
>> >> > >>>>>
>> >> > >>>>> On Thu, Dec 20, 2012 at 10:22 AM, Joe Bowser <
>> bows...@gmail.com>
>> >> > >>>>>wrote:
>> >> > >>>>>> We are totally doing something wrong with the way that we do
>> >> > >>>>>>releases.
>> >> > >>>>>>  I personally think that we're not using git right, and here's
>> >> why:
>> >> > >>>>>>
>> >> > >>>>>> Currently, when we do a release, we tag the RC, and we test
>> the
>> >> RC.
>> >> > >>>>>> There's nothing preventing us from putting things after that
>> tag
>> >> and
>> >> > >>>>>> if we don't want to those things in the release branching off
>> >> that
>> >> > >>>>>> tag.  We've done it before and other than the problem with
>> CoHo,
>> >> it
>> >> > >>>>>> worked really well.  I propose that instead of tagging the
>> >> release,
>> >> > >>>>>>we
>> >> > >>>>>> branch when we want to do a release, and we do all the bug
>> fixes
>> >> on
>> >> > >>>>>> that branch.  Once that branch is ready to roll, we merge it
>> back
>> >> > >>>>>>into
>> >> > >>>>>> master.  In fact, nobody should be working on master except
>> to do
>> >> > >>>>>> merges.  The way we're doing this now feels dirty and wrong.
>> >> > >>>>>>
>> >> > >>>>>> I honestly feel that this is a much faster way of working, and
>> >> that
>> >> > >>>>>> we're missing the point if we have to tell everyone to jump
>> out
>> >> of
>> >> > >>>>>>the
>> >> > >>>>>> pool every time we do an RC.  I know that we could be working
>> on
>> >> our
>> >> > >>>>>> branches, but that work is almost entirely invisible to the
>> rest
>> >> of
>> >> > >>>>>> the project until it's time to merge it back in, which takes
>> >> > >>>>>>forever.
>> >> > >>>>>>
>> >> > >>>>>>
>> >> > >>>>>> On Thu, Dec 20, 2012 at 10:07 AM, Michal Mocny <
>> >> mmo...@chromium.org
>> >> > >
>> >> > >>>>>>wrote:
>> >> > >>>>>>> So there is something to be said about having devs shift
>> focus
>> >> from
>> >> > >>>>>>>dev to
>> >> > >>>>>>> testing during an RC.  However, as the team grows, not all
>> of us
>> >> > >>>>>>>are
>> >> > >>>>>>>really
>> >> > >>>>>>> being responsible for cutting releases.  Maybe that means we
>> >> need
>> >> > >>>>>>>to
>> >> > >>>>>>>train
>> >> > >>>>>>> the entire team to change current behavior, but that doesn't
>> >> feel
>> >> > >>>>>>> necessary/scalable.
>> >> > >>>>>>>
>> >> > >>>>>>> With growing external contributions, I would have to say
>> that a
>> >> > >>>>>>>code
>> >> > >>>>>>>freeze
>> >> > >>>>>>> on trunk doesn't seem to make as much sense.
>> >> > >>>>>>>
>> >> > >>>>>>> -Michal
>> >> > >>>>>>>
>> >> > >>>>>>>
>> >> > >>>>>>> On Thu, Dec 20, 2012 at 9:47 AM, Andrew Grieve
>> >> > >>>>>>><agri...@chromium.org> wrote:
>> >> > >>>>>>>
>> >> > >>>>>>>> I definitely think we'd get more done if we didn't have
>> such a
>> >> > >>>>>>>>long
>> >> > >>>>>>>> code-freeze. I'm not sure this is the same as what you were
>> >> > >>>>>>>>suggesting, but
>> >> > >>>>>>>> have a script/tool to branch all of the platforms into an rc
>> >> > >>>>>>>>branch. Then,
>> >> > >>>>>>>> each platform can fix themselves up a bit and tag their RC.
>> >> > >>>>>>>>Meanwhile, dev
>> >> > >>>>>>>> can continue to happen on edge.
>> >> > >>>>>>>>
>> >> > >>>>>>>> My main concern with our current approach is just that the
>> >> > >>>>>>>>code-freeze time
>> >> > >>>>>>>> is super long.
>> >> > >>>>>>>>
>> >> > >>>>>>>>
>> >> > >>>>>>>> On Wed, Dec 19, 2012 at 3:36 PM, Marcel Kinard
>> >> > >>>>>>>><cmarc...@gmail.com>
>> >> > >>>>>>>>wrote:
>> >> > >>>>>>>>
>> >> > >>>>>>>> > One of the things that strikes me here is the difference
>> >> between
>> >> > >>>>>>>>calendar
>> >> > >>>>>>>> > time and effort time. (This assumes folks already
>> concurred
>> >> that
>> >> > >>>>>>>>the rc
>> >> > >>>>>>>> is
>> >> > >>>>>>>> > ready to release.) Based on my reading of
>> >> > >>>>>>>>http://wiki.apache.org/**
>> >> > >>>>>>>> > cordova/CuttingReleases
>> >> > >>>>>>>><http://wiki.apache.org/cordova/CuttingReleases>there
>> >> > >>>>>>>> isn't a lot of effort time involved to cut a release. It
>> seems
>> >> > >>>>>>>>like
>> >> > >>>>>>>>a
>> >> > >>>>>>>> > good chunk of the calendar time is getting folks to tag
>> their
>> >> > >>>>>>>>platform.
>> >> > >>>>>>>> > Ideally the promotion from rc to final should take very
>> >> little
>> >> > >>>>>>>>effort
>> >> > >>>>>>>> time.
>> >> > >>>>>>>> >
>> >> > >>>>>>>> > What I like about the rc is that it provides a settling
>> >> > >>>>>>>>mechanism
>> >> > >>>>>>>>for the
>> >> > >>>>>>>> > churn to calm down, run tests across more integration, and
>> >> see
>> >> > >>>>>>>>the bigger
>> >> > >>>>>>>> > picture to assess release readiness. I would expect that
>> the
>> >> > >>>>>>>>promotion
>> >> > >>>>>>>> from
>> >> > >>>>>>>> > edge to rc should take a decent amount of effort time, but
>> >> not
>> >> > >>>>>>>>because of
>> >> > >>>>>>>> > the "cut" activities.
>> >> > >>>>>>>> >
>> >> > >>>>>>>> > So when we are at rc and don't find any surprises, why
>> does
>> >> it
>> >> > >>>>>>>>take a
>> >> > >>>>>>>> week
>> >> > >>>>>>>> > to promote to final? If we spend a week in rc1, another
>> week
>> >> in
>> >> > >>>>>>>>rc2, and
>> >> > >>>>>>>> > another week to cut final, that leaves only 1 week in a
>> >> 4-week
>> >> > >>>>>>>>cycle for
>> >> > >>>>>>>> > active dev work?
>> >> > >>>>>>>> >
>> >> > >>>>>>>> > I like the ideal of a channel/stream/branch/whatever where
>> >> there
>> >> > >>>>>>>>is a
>> >> > >>>>>>>> > place for the rc to settle without necessarily blocking
>> >> commits
>> >> > >>>>>>>>to edge.
>> >> > >>>>>>>> > Where I'm going with this is that if there is an area
>> where
>> >> > >>>>>>>>commits to
>> >> > >>>>>>>> the
>> >> > >>>>>>>> > rc are carefully controlled, then perhaps one person (i.e,
>> >> Steve
>> >> > >>>>>>>>G) could
>> >> > >>>>>>>> > cut the release for ALL platforms using scripts. This may
>> >> > >>>>>>>>involve
>> >> > >>>>>>>>that
>> >> > >>>>>>>> one
>> >> > >>>>>>>> > person tagging/branching/whatever across multiple
>> platforms.
>> >> > >>>>>>>> >
>> >> > >>>>>>>> > I also like putting the "how to cut" magic in each
>> platform.
>> >> > >>>>>>>>Then
>> >> > >>>>>>>>perhaps
>> >> > >>>>>>>> > a good chunk of coho is tests to make sure that the
>> platform
>> >> > >>>>>>>>magic
>> >> > >>>>>>>> > delivered the correct format to it.
>> >> > >>>>>>>> >
>> >> > >>>>>>>> > -- Marcel Kinard
>> >> > >>>>>>>> >
>> >> > >>>>>>>>
>> >> > >>
>> >> >
>> >> >
>> >>
>> >
>> >
>>
>
>

Reply via email to