New release plan

56 messages Options
Embed this post
Permalink
1 2 3
Kohsuke Kawaguchi

New release plan

Reply Threaded More More options
Print post
Permalink

As you know, lately we are suffering a quality problem in releases.
There are multiple things we need to do to fix that, such as more tests
and early regression testing with plugins, but it's also clear that we
need to adjust the release process.

So this is the proposal to make that adjustment.

- Let's shoot for once-a-week release cycle, on Friday evening pacific
   time.

- We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
   is RC cut off.

- We reserve Wed, Thu, and Fri as the quiet period.
   We make commits to the core conservatively, and I'll use this period
   to deploy RC bits to my production Hudson to be a guinea pig.

- This should give us more time to write tests.


I know there will be all sorts of different ways to do releases, and I
don't want to argue which is better than which. So my main question is,
putting my dictator hat on, is this something that people can live with?

--
Kohsuke Kawaguchi
Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/


smime.p7s (4K) Download Attachment
Peter Reilly-2

Re: New release plan

Reply Threaded More More options
Print post
Permalink
For plugins or just for hudson core?

Peter

On Tue, Mar 10, 2009 at 7:05 PM, Kohsuke Kawaguchi
<[hidden email]> wrote:

>
> As you know, lately we are suffering a quality problem in releases. There
> are multiple things we need to do to fix that, such as more tests and early
> regression testing with plugins, but it's also clear that we need to adjust
> the release process.
>
> So this is the proposal to make that adjustment.
>
> - Let's shoot for once-a-week release cycle, on Friday evening pacific
>  time.
>
> - We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
>  is RC cut off.
>
> - We reserve Wed, Thu, and Fri as the quiet period.
>  We make commits to the core conservatively, and I'll use this period
>  to deploy RC bits to my production Hudson to be a guinea pig.
>
> - This should give us more time to write tests.
>
>
> I know there will be all sorts of different ways to do releases, and I don't
> want to argue which is better than which. So my main question is, putting my
> dictator hat on, is this something that people can live with?
>
> --
> Kohsuke Kawaguchi
> Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Kohsuke Kawaguchi

Re: New release plan

Reply Threaded More More options
Print post
Permalink
Peter Reilly wrote:
> For plugins or just for hudson core?

Just Hudson core.

>
> Peter
>
> On Tue, Mar 10, 2009 at 7:05 PM, Kohsuke Kawaguchi
> <[hidden email]> wrote:
>>
>> As you know, lately we are suffering a quality problem in releases. There
>> are multiple things we need to do to fix that, such as more tests and early
>> regression testing with plugins, but it's also clear that we need to adjust
>> the release process.
>>
>> So this is the proposal to make that adjustment.
>>
>> - Let's shoot for once-a-week release cycle, on Friday evening pacific
>> ?time.
>>
>> - We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
>> ?is RC cut off.
>>
>> - We reserve Wed, Thu, and Fri as the quiet period.
>> ?We make commits to the core conservatively, and I'll use this period
>> ?to deploy RC bits to my production Hudson to be a guinea pig.
>>
>> - This should give us more time to write tests.
>>
>>
>> I know there will be all sorts of different ways to do releases, and I don't
>> want to argue which is better than which. So my main question is, putting my
>> dictator hat on, is this something that people can live with?
>>
>> --
>> Kohsuke Kawaguchi
>> Sun Microsystems ? ? ? ? ? ? ? ? ? http://weblogs.java.net/blog/kohsuke/
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

--
Kohsuke Kawaguchi
Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/


smime.p7s (4K) Download Attachment
Eric Lefevre-Ardant

Re: New release plan

Reply Threaded More More options
Print post
Permalink
What about translations in the core? would we put the same restraints?

Personally, I am very inconsistent in the delays between 2 commits to the French translation; sometimes a couple of days, sometimes one month. I don't see myself paying much attention to days when I should commit. Not that I don't want to.

Eric

2009/3/10 Kohsuke Kawaguchi <[hidden email]>
Peter Reilly wrote:
For plugins or just for hudson core?

Just Hudson core.



Peter

On Tue, Mar 10, 2009 at 7:05 PM, Kohsuke Kawaguchi
<[hidden email]> wrote:

As you know, lately we are suffering a quality problem in releases. There
are multiple things we need to do to fix that, such as more tests and early
regression testing with plugins, but it's also clear that we need to adjust
the release process.

So this is the proposal to make that adjustment.

- Let's shoot for once-a-week release cycle, on Friday evening pacific
?time.

- We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
?is RC cut off.

- We reserve Wed, Thu, and Fri as the quiet period.
?We make commits to the core conservatively, and I'll use this period
?to deploy RC bits to my production Hudson to be a guinea pig.

- This should give us more time to write tests.


I know there will be all sorts of different ways to do releases, and I don't
want to argue which is better than which. So my main question is, putting my
dictator hat on, is this something that people can live with?

--
Kohsuke Kawaguchi
Sun Microsystems ? ? ? ? ? ? ? ? ? http://weblogs.java.net/blog/kohsuke/


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]




--
Kohsuke Kawaguchi
Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/

Kohsuke Kawaguchi

Re: New release plan

Reply Threaded More More options
Print post
Permalink
Eric Lefevre-Ardant wrote:
> What about translations in the core? would we put the same restraints?
> Personally, I am very inconsistent in the delays between 2 commits to the
> French translation; sometimes a couple of days, sometimes one month. I don't
> see myself paying much attention to days when I should commit. Not that I
> don't want to.

I can't think of any past incident where l10n/i18n commits resulted in a
problematic release, so I think you should consider the repository open
for commits all the time.

(And if do a release branch, this point will be moot anyway)


> Eric
>
> 2009/3/10 Kohsuke Kawaguchi <[hidden email]>
>
>> Peter Reilly wrote:
>>
>>> For plugins or just for hudson core?
>>>
>>
>> Just Hudson core.
>>
>>
>>
>>> Peter
>>>
>>> On Tue, Mar 10, 2009 at 7:05 PM, Kohsuke Kawaguchi
>>> <[hidden email]> wrote:
>>>
>>>>
>>>> As you know, lately we are suffering a quality problem in releases. There
>>>> are multiple things we need to do to fix that, such as more tests and
>>>> early
>>>> regression testing with plugins, but it's also clear that we need to
>>>> adjust
>>>> the release process.
>>>>
>>>> So this is the proposal to make that adjustment.
>>>>
>>>> - Let's shoot for once-a-week release cycle, on Friday evening pacific
>>>> ?time.
>>>>
>>>> - We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
>>>> ?is RC cut off.
>>>>
>>>> - We reserve Wed, Thu, and Fri as the quiet period.
>>>> ?We make commits to the core conservatively, and I'll use this period
>>>> ?to deploy RC bits to my production Hudson to be a guinea pig.
>>>>
>>>> - This should give us more time to write tests.
>>>>
>>>>
>>>> I know there will be all sorts of different ways to do releases, and I
>>>> don't
>>>> want to argue which is better than which. So my main question is, putting
>>>> my
>>>> dictator hat on, is this something that people can live with?
>>>>
>>>> --
>>>> Kohsuke Kawaguchi
>>>> Sun Microsystems ? ? ? ? ? ? ? ? ? http://weblogs.java.net/blog/kohsuke/
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [hidden email]
>>> For additional commands, e-mail: [hidden email]
>>>
>>>
>>>
>>
>> --
>> Kohsuke Kawaguchi
>> Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/
>>
>

--
Kohsuke Kawaguchi
Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/


smime.p7s (4K) Download Attachment
Wim Rosseel

Re: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by Eric Lefevre-Ardant
Wel I can second the inconsistent delays between commits for the Dutch translations. However I wouldn't have a problem with the suggestion to have a quiet period. After all I find it a lot more important that we avoid regression problems in releases.
Hudson currently is seeing quite a wide usage, but I feel that people do tend to be weary about upgrading due to upgrade problems and plugin incompatibilities.

So +1 on the idea

Nam-tor Ozhika kluterek t'sha'sutenivaya - k'ish she-tor etek s'nezhak - isan utvau vah sha'kakhartayek.


On Wed, Mar 11, 2009 at 9:57 AM, Eric Lefevre-Ardant <java.net@ericlefevre.net> wrote:
What about translations in the core? would we put the same restraints?

Personally, I am very inconsistent in the delays between 2 commits to the French translation; sometimes a couple of days, sometimes one month. I don't see myself paying much attention to days when I should commit. Not that I don't want to.

Eric

2009/3/10 Kohsuke Kawaguchi <[hidden email]>

Peter Reilly wrote:
For plugins or just for hudson core?

Just Hudson core.



Peter

On Tue, Mar 10, 2009 at 7:05 PM, Kohsuke Kawaguchi
<[hidden email]> wrote:

As you know, lately we are suffering a quality problem in releases. There
are multiple things we need to do to fix that, such as more tests and early
regression testing with plugins, but it's also clear that we need to adjust
the release process.

So this is the proposal to make that adjustment.

- Let's shoot for once-a-week release cycle, on Friday evening pacific
?time.

- We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
?is RC cut off.

- We reserve Wed, Thu, and Fri as the quiet period.
?We make commits to the core conservatively, and I'll use this period
?to deploy RC bits to my production Hudson to be a guinea pig.

- This should give us more time to write tests.


I know there will be all sorts of different ways to do releases, and I don't
want to argue which is better than which. So my main question is, putting my
dictator hat on, is this something that people can live with?

--
Kohsuke Kawaguchi
Sun Microsystems ? ? ? ? ? ? ? ? ? http://weblogs.java.net/blog/kohsuke/


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]




--
Kohsuke Kawaguchi
Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/


BrandonB

Re: New release plan

Reply Threaded More More options
Print post
Permalink
Dean Yu wrote:
I have seen software projects that take this approach. Every single one of them runs into the problem where the software gets completely destabilized from a stampeding herd of checkins after a period of not being able to check in. This is exactly the type of problem that continuous integration is supposed to solve in the first place.
I have also witnessed another problem with the "quiet period" approach on another large scale project I work on - everyone usually rushes to check tons of changes in to the trunk before the weekly "lockdown". Creating a release branch mitigates this somewhat - people can still freely check in changes at their own pace, but they just may not make the weekly release.

As far as merging goes - the release branches should not have to be frequently merged back to the trunk, unless running automated tests against the release branch reveals that patches are required to create a stable release. If you're anti-merging, you can choose to simply not make the release, apply the patches directly to the trunk and wait for the next week's release (or try again with a new, later, release branch).
BrandonB

Re: New release plan

Reply Threaded More More options
Print post
Permalink
Whether the decision is to go with a "quiet period" or branches, I make the following suggestions:

1) Add code coverage checks (Cobertura or Clover) to the http://hudson.glassfish.org/job/hudson/ job, against the existing tests the Hudson core already has. This should identify weaknesses in coverage, and prompt the team/users to start contributing more tests.

2) Before a Hudson core release is made, compile the core against the latest release of all plugins. Wherever possible, run the plugin unit tests against the new core. If, for whatever reason, the hudson.glassfish.org server cannot run plugin unit tests (eg, it might be hard to run the AccuRev plugin tests without AccuRev server or licenses), notify (automatically?) the plugin owners to run their unit tests against the about-to-be-released core.

3) Do any of the plugins have Hudson jobs on a public Hudson instance? If not, can they be added to hudson.glassfish.org? If so, can they be moved there?

4) All plugins should have code coverage (Cobertura or Clover) checks against their unit tests.

5) When the core release is made, publish a document (somewhere, wiki, release notes, part of the changelog, don't know) stating which versions of plugins were tested against the new core. I believe some of the plugins already document which versions of the core *they* were compiled/tested against when they are released - we need the reverse.

6) In fact, including the information from #5 in the 'Updates' and/or 'Available' tabs of the 'Manage Plugins' table would be extremely useful. (I'm envisioning another column stating something to the effect of "This version of Hudson was tested againstplugin release #X.Y.) This can help people identify whether they *should* upgrade plugins, instead of just crossing their fingers and upgrading blindly (or manually comparing release dates of core and plugins).
Andrew Bayer

Re: New release plan

Reply Threaded More More options
Print post
Permalink
I agree wholeheartedly on the plugin-related suggestions - it seems like a lot of the upgrade issues are due to plugin compatibility issues, and I've seen at least one bug against a plugin that was a result of a version of that plugin being run with a version of Hudson that couldn't support it. Unit-testing plugins against new cores seems like it would help with revealing some of those problems, and having some sort of information on what version of Hudson core a particular plugin version is known to work with, etc, would be a big help as well.

A.

On Wed, Mar 11, 2009 at 9:50 AM, BrandonB <[hidden email]> wrote:

Whether the decision is to go with a "quiet period" or branches, I make the
following suggestions:

1) Add code coverage checks (Cobertura or Clover) to the
http://hudson.glassfish.org/job/hudson/ job, against the existing tests the
Hudson core already has. This should identify weaknesses in coverage, and
prompt the team/users to start contributing more tests.

2) Before a Hudson core release is made, compile the core against the latest
release of all plugins. Wherever possible, run the plugin unit tests against
the new core. If, for whatever reason, the hudson.glassfish.org server
cannot run plugin unit tests (eg, it might be hard to run the AccuRev plugin
tests without AccuRev server or licenses), notify (automatically?) the
plugin owners to run their unit tests against the about-to-be-released core.

3) Do any of the plugins have Hudson jobs on a public Hudson instance? If
not, can they be added to hudson.glassfish.org? If so, can they be moved
there?

4) All plugins should have code coverage (Cobertura or Clover) checks
against their unit tests.

5) When the core release is made, publish a document (somewhere, wiki,
release notes, part of the changelog, don't know) stating which versions of
plugins were tested against the new core. I believe some of the plugins
already document which versions of the core *they* were compiled/tested
against when they are released - we need the reverse.

6) In fact, including the information from #5 in the 'Updates' and/or
'Available' tabs of the 'Manage Plugins' table would be extremely useful.
(I'm envisioning another column stating something to the effect of "This
version of Hudson was tested againstplugin release #X.Y.) This can help
people identify whether they *should* upgrade plugins, instead of just
crossing their fingers and upgrading blindly (or manually comparing release
dates of core and plugins).
--
View this message in context: http://www.nabble.com/New-release-plan-tp22441320p22459412.html
Sent from the Hudson dev mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]


Kohsuke Kawaguchi

Re: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by BrandonB
BrandonB wrote:
> Whether the decision is to go with a "quiet period" or branches, I make the
> following suggestions:
>
> 1) Add code coverage checks (Cobertura or Clover) to the
> http://hudson.glassfish.org/job/hudson/ job, against the existing tests the
> Hudson core already has. This should identify weaknesses in coverage, and
> prompt the team/users to start contributing more tests.

Yes, I need to do this.

> 2) Before a Hudson core release is made, compile the core against the latest
> release of all plugins. Wherever possible, run the plugin unit tests against
> the new core. If, for whatever reason, the hudson.glassfish.org server
> cannot run plugin unit tests (eg, it might be hard to run the AccuRev plugin
> tests without AccuRev server or licenses), notify (automatically?) the
> plugin owners to run their unit tests against the about-to-be-released core.

+1.

> 3) Do any of the plugins have Hudson jobs on a public Hudson instance? If
> not, can they be added to hudson.glassfish.org? If so, can they be moved
> there?

Currently there's a single build that builds the entire Hudson including
all the plugins.

If we create one job per plugin, I need a new feature in Hudson to
manage that.

> 4) All plugins should have code coverage (Cobertura or Clover) checks
> against their unit tests.

Right, I believe we get this with the same effort to do your #1.

> 5) When the core release is made, publish a document (somewhere, wiki,
> release notes, part of the changelog, don't know) stating which versions of
> plugins were tested against the new core. I believe some of the plugins
> already document which versions of the core *they* were compiled/tested
> against when they are released - we need the reverse.

Isn't it better to just bake that information in Hudson itself or update
center metadata, so that the user gets a reassuring "tested" icon or
something on UC?


> 6) In fact, including the information from #5 in the 'Updates' and/or
> 'Available' tabs of the 'Manage Plugins' table would be extremely useful.
> (I'm envisioning another column stating something to the effect of "This
> version of Hudson was tested againstplugin release #X.Y.) This can help
> people identify whether they *should* upgrade plugins, instead of just
> crossing their fingers and upgrading blindly (or manually comparing release
> dates of core and plugins).

OK, so you've already thought about that, then.

--
Kohsuke Kawaguchi
Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/


smime.p7s (4K) Download Attachment
John McNair

Re: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by Kohsuke Kawaguchi


On Tue, Mar 10, 2009 at 3:05 PM, Kohsuke Kawaguchi <[hidden email]> wrote:

As you know, lately we are suffering a quality problem in releases. There are multiple things we need to do to fix that, such as more tests and early regression testing with plugins, but it's also clear that we need to adjust the release process.

So this is the proposal to make that adjustment.

- Let's shoot for once-a-week release cycle, on Friday evening pacific
 time.

- We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
 is RC cut off.

- We reserve Wed, Thu, and Fri as the quiet period.
 We make commits to the core conservatively, and I'll use this period
 to deploy RC bits to my production Hudson to be a guinea pig.

I only have a handful of commits on Hudson to my credit, but I thought I'd share a little bit of experience that I don't see mentioned here.  Many people have offered good suggestions.  Increasing test coverage and its measurement is always a good idea.  More frequent CI is good.

But still there is the question of how to use the SCM to its best advantage.  Others have pointed out the problem with quiet periods.  A good SCM should never be off.  That is, developers should always be able to commit _somewhere_.  Someone else pointed out the potential pain with temporary release branches.  It can cause merging pain.

I haven't seen anyone mention the notion of topic branches.  That's git terminology I suppose, but git doesn't own the idea.  Bascially, all work should be done in small isolated branches.  One of the major sources of instability for a project like this is that you want developers to be able to commit frequently, but also be able to release frequently.  So what happens to all those half-implemented features or bug fixes.  Some features never even land at all.  So why not keep them off trunk until they are done?

New feature?  Branch.  New bug fix?  Branch.  Then code would only be shipped on purpose, i.e. when the developer believes it to be complete.  If necessary, you can still have a release branch created a couple of days before release.  If work is done in branches, then critical fixes can be merged to trunk and to the release branch while trunk only accepts less critical features.  If done this way, release branches never have to have a big bang merge back into trunk.

This allows the community to:
- Always have a place to commit
- Ship and prioritize code on purpose rather than whatever is a work in progress
- Deal with conflicts in more isolated settings
- Avoid big bang merges
- Always code against known stable trunk plus developer's own small changeset

Just some food for thought.  As I mentioned I haven't committed much code here, but perhaps I can spur some additional constructive debate.

--
John McNair
[hidden email]
R. Tyler Ballance

Re: New release plan

Reply Threaded More More options
Print post
Permalink
On Wed, Mar 11, 2009 at 04:16:25PM -0400, John McNair wrote:

>    I only have a handful of commits on Hudson to my credit, but I thought I'd
>    share a little bit of experience that I don't see mentioned here.  Many
>    people have offered good suggestions.  Increasing test coverage and its
>    measurement is always a good idea.  More frequent CI is good.
>
>    But still there is the question of how to use the SCM to its best
>    advantage.  Others have pointed out the problem with quiet periods.  A
>    good SCM should never be off.  That is, developers should always be able
>    to commit _somewhere_.  Someone else pointed out the potential pain with
>    temporary release branches.  It can cause merging pain.
This is kind of funny, I met with Kohsuke earlier today and described
our use of Git and Hudson, and we do precisely this, reserving master
("trunk") for stable, release quality code, while using "topic branches"
as a means of doing high-frequency commits.

The problem with this, at least as far as Hudson development goes is
that branches are not cheap at all in Subversion. For a developer to
create a topic branch in Subversion they would need to execute the `svn
copy` and then run `svn checkout` on the new tree, resulting in a whole
new working copy, not ideal for the sporadic developers among us.

My approach thus far has actually been git-svn with Hudson, such that
I'm committing early and often for the random tidbits that I contribute
to Hudson and then when those changes are stabilized, do I execute the
`git-svn dcommit` and actually sync those changes upstream to the Hudson
repository; I'm not saying this is the solution, just saying it's my
solution because I'm deathly afraid of destabilizing the tree :-P


At Slide we've run through a couple of the tribulations that have been
listed on this thread thus far:
       
        * Creation of a release branch to cope with a volatile trunk results
          in large dangerous merges when it comes time to release

        * Creation of topic branches for bug fixes/features results in large
          amounts of merge pain (in Subversion at least) especially as the
          time difference between the branch creation and the most recent
          sync with trunk grows.

(warning, crazy idea inbound!)

I think this is a prime opportunity for eating our own dog food, but
taking it one step further, based on the release branch suggestion: no
manual merges to release!

I'm making large assumtopions about the quality and quantity of test
coverage Hudson has as a project, but imagine a build was associated with
*every* single commit into trunk, i.e. hudson.r1234.war, etc.

When the job associated with r1234 finishes executing, the following
might happen:
        SUCCESS:
                * r1234 is merged automatically into release branch
                * Tests run on an hourly basis to ensure that release branch
                  remains stable
       
        FAILURE:
                * A very "loud" email is sent to relevant parties (including
                  committer stating the failure of what/when/where
                * Maybe r1234 is reverted out of trunk?
                * Trunk is "broken", merges into release branch are ceased for
                  future jobs unless manually okayed.


I think we already have support to do everything except the latter two
bullet points in the failure case. But I think it would prevent the
commit-schedule issues and also help pinpoint exact "problem commits"
given the large range of developers committing into trunk.


IMHO it solves the stability issues, but also holds Hudson commiters to
a high standard and is the appropriate amount of CI applied to a
CI-server ;)


Cheers
--
-R. Tyler Ballance
Slide, Inc.


attachment0 (202 bytes) Download Attachment
stephenconnolly

Re: New release plan

Reply Threaded More More options
Print post
Permalink


2009/3/13 R. Tyler Ballance <[hidden email]>
On Wed, Mar 11, 2009 at 04:16:25PM -0400, John McNair wrote:
>    I only have a handful of commits on Hudson to my credit, but I thought I'd
>    share a little bit of experience that I don't see mentioned here.  Many
>    people have offered good suggestions.  Increasing test coverage and its
>    measurement is always a good idea.  More frequent CI is good.
>
>    But still there is the question of how to use the SCM to its best
>    advantage.  Others have pointed out the problem with quiet periods.  A
>    good SCM should never be off.  That is, developers should always be able
>    to commit _somewhere_.  Someone else pointed out the potential pain with
>    temporary release branches.  It can cause merging pain.

This is kind of funny, I met with Kohsuke earlier today and described
our use of Git and Hudson, and we do precisely this, reserving master
("trunk") for stable, release quality code, while using "topic branches"
as a means of doing high-frequency commits.

The problem with this, at least as far as Hudson development goes is
that branches are not cheap at all in Subversion. For a developer to
create a topic branch in Subversion they would need to execute the `svn
copy` and then run `svn checkout` on the new tree, resulting in a whole
new working copy, not ideal for the sporadic developers among us.

Actually no.... what you do is

1. "Oh feck... I should be doing this in a branch"
2. svn info
Path: /home/connollys/src/hudson
URL: https://hudson.dev.java.net/svn/hudson/trunk
Repository Root: https://hudson.dev.java.net/svn/hudson
Repository UUID: 71c3de6d-444a-0410-be80-ed276b4c234a
Revision: 15451
Node Kind: directory
Schedule: normal
Last Changed Author: sogabe
Last Changed Rev: 15451
Last Changed Date: 2009-02-19 13:22:46 +0000 (Thu, 19 Feb 2009)
3. Note the revision I last updated to... in this case 15451
4. svn cp -r 15451 https://hudson.dev.java.net/svn/hudson/trunk https://hudson.dev.java.net/svn/hudson/branches/my-feature-branch
5. svn switch https://hudson.dev.java.net/svn/hudson/branches/my-feature-branch .

No need to check it all out again... and switch will only pull the diferences between what I last updated to and the branch... which because of step 3 and the -r in step 4 will be nil.... virtually no network traffic



My approach thus far has actually been git-svn with Hudson, such that
I'm committing early and often for the random tidbits that I contribute
to Hudson and then when those changes are stabilized, do I execute the
`git-svn dcommit` and actually sync those changes upstream to the Hudson
repository; I'm not saying this is the solution, just saying it's my
solution because I'm deathly afraid of destabilizing the tree :-P


At Slide we've run through a couple of the tribulations that have been
listed on this thread thus far:

       * Creation of a release branch to cope with a volatile trunk results
         in large dangerous merges when it comes time to release

       * Creation of topic branches for bug fixes/features results in large
         amounts of merge pain (in Subversion at least) especially as the
         time difference between the branch creation and the most recent
         sync with trunk grows.

(warning, crazy idea inbound!)

I think this is a prime opportunity for eating our own dog food, but
taking it one step further, based on the release branch suggestion: no
manual merges to release!

I'm making large assumtopions about the quality and quantity of test
coverage Hudson has as a project, but imagine a build was associated with
*every* single commit into trunk, i.e. hudson.r1234.war, etc.

When the job associated with r1234 finishes executing, the following
might happen:
       SUCCESS:
               * r1234 is merged automatically into release branch
               * Tests run on an hourly basis to ensure that release branch
                 remains stable

       FAILURE:
               * A very "loud" email is sent to relevant parties (including
                 committer stating the failure of what/when/where
               * Maybe r1234 is reverted out of trunk?
               * Trunk is "broken", merges into release branch are ceased for
                 future jobs unless manually okayed.


I think we already have support to do everything except the latter two
bullet points in the failure case. But I think it would prevent the
commit-schedule issues and also help pinpoint exact "problem commits"
given the large range of developers committing into trunk.


IMHO it solves the stability issues, but also holds Hudson commiters to
a high standard and is the appropriate amount of CI applied to a
CI-server ;)


Cheers
--
-R. Tyler Ballance
Slide, Inc.

Ringo De Smet

Re: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by R. Tyler Ballance
All,

2009/3/13 R. Tyler Ballance <[hidden email]>:

>
> The problem with this, at least as far as Hudson development goes is
> that branches are not cheap at all in Subversion. For a developer to
> create a topic branch in Subversion they would need to execute the `svn
> copy` and then run `svn checkout` on the new tree, resulting in a whole
> new working copy, not ideal for the sporadic developers among us.
>
> My approach thus far has actually been git-svn with Hudson, such that
> I'm committing early and often for the random tidbits that I contribute
> to Hudson and then when those changes are stabilized, do I execute the
> `git-svn dcommit` and actually sync those changes upstream to the Hudson
> repository; I'm not saying this is the solution, just saying it's my
> solution because I'm deathly afraid of destabilizing the tree :-P

I also use the git-svn approach a lot for this I would like to
contribute back to the Open Source world. (My day job has prevented me
so far of contributing back code to Hudson.) This makes me wonder:
should we come up with a difficult process to work around the
shortcomings of the SCM, or should we migrate to another SCM and have
an easy process?

Personally, I choose the latter! :-)

Do projects at java.net *have* to use the SVN support at that site, or
can they still choose some other system?


[snip]

> (warning, crazy idea inbound!)
>
> I think this is a prime opportunity for eating our own dog food, but
> taking it one step further, based on the release branch suggestion: no
> manual merges to release!
>
> I'm making large assumtopions about the quality and quantity of test
> coverage Hudson has as a project, but imagine a build was associated with
> *every* single commit into trunk, i.e. hudson.r1234.war, etc.
>
> When the job associated with r1234 finishes executing, the following
> might happen:
>        SUCCESS:
>                * r1234 is merged automatically into release branch
>                * Tests run on an hourly basis to ensure that release branch
>                  remains stable
>
>        FAILURE:
>                * A very "loud" email is sent to relevant parties (including
>                  committer stating the failure of what/when/where
>                * Maybe r1234 is reverted out of trunk?
>                * Trunk is "broken", merges into release branch are ceased for
>                  future jobs unless manually okayed.

I agree with Nigel that it isn't that crazy. I'm just not fond of
automatic merging. Merging code is a bit more than getting the syntax
right and I doubt that a tool is able to perform 100% correct under
all circumstances. What if 2 branches started from the same base
revision of a file and both develoeprs make different changes to the
same line. The first merge would be OK, but how should the second
change be integrated into the revision that already contains the first
change?

Ringo

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Nigel Magnay

Re: New release plan

Reply Threaded More More options
Print post
Permalink
> I agree with Nigel that it isn't that crazy. I'm just not fond of
> automatic merging. Merging code is a bit more than getting the syntax
> right and I doubt that a tool is able to perform 100% correct under
> all circumstances. What if 2 branches started from the same base
> revision of a file and both develoeprs make different changes to the
> same line. The first merge would be OK, but how should the second
> change be integrated into the revision that already contains the first
> change?
>
> Ringo

Well, you can control that too, of course; at a minimum, the change
fails if the merge doesn't apply cleanly. You can also force (in git
parlance) fast-forward only changes if you wish - which means that the
change being merged must be derived from the current branch tip.

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Michael Donohue

Re: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by Ringo De Smet
Going back to the genesis of this thread, Kohsuke said: "I know there will be all sorts of different ways to do releases, and I don't want to argue which is better than which. So my main question is, putting my dictator hat on, is this something that people can live with?"

The only major objection I've seen to the original proposal is that occasional committers want the ability to commit on whatever day they have time available.  Kohsuke has acknowledged this and is working on a way of handling it.

-Michael

On Fri, Mar 13, 2009 at 8:45 AM, Ringo De Smet <[hidden email]> wrote:
All,

2009/3/13 R. Tyler Ballance <[hidden email]>:
>
> The problem with this, at least as far as Hudson development goes is
> that branches are not cheap at all in Subversion. For a developer to
> create a topic branch in Subversion they would need to execute the `svn
> copy` and then run `svn checkout` on the new tree, resulting in a whole
> new working copy, not ideal for the sporadic developers among us.
>
> My approach thus far has actually been git-svn with Hudson, such that
> I'm committing early and often for the random tidbits that I contribute
> to Hudson and then when those changes are stabilized, do I execute the
> `git-svn dcommit` and actually sync those changes upstream to the Hudson
> repository; I'm not saying this is the solution, just saying it's my
> solution because I'm deathly afraid of destabilizing the tree :-P

I also use the git-svn approach a lot for this I would like to
contribute back to the Open Source world. (My day job has prevented me
so far of contributing back code to Hudson.) This makes me wonder:
should we come up with a difficult process to work around the
shortcomings of the SCM, or should we migrate to another SCM and have
an easy process?

Personally, I choose the latter! :-)

Do projects at java.net *have* to use the SVN support at that site, or
can they still choose some other system?


[snip]

> (warning, crazy idea inbound!)
>
> I think this is a prime opportunity for eating our own dog food, but
> taking it one step further, based on the release branch suggestion: no
> manual merges to release!
>
> I'm making large assumtopions about the quality and quantity of test
> coverage Hudson has as a project, but imagine a build was associated with
> *every* single commit into trunk, i.e. hudson.r1234.war, etc.
>
> When the job associated with r1234 finishes executing, the following
> might happen:
>        SUCCESS:
>                * r1234 is merged automatically into release branch
>                * Tests run on an hourly basis to ensure that release branch
>                  remains stable
>
>        FAILURE:
>                * A very "loud" email is sent to relevant parties (including
>                  committer stating the failure of what/when/where
>                * Maybe r1234 is reverted out of trunk?
>                * Trunk is "broken", merges into release branch are ceased for
>                  future jobs unless manually okayed.

I agree with Nigel that it isn't that crazy. I'm just not fond of
automatic merging. Merging code is a bit more than getting the syntax
right and I doubt that a tool is able to perform 100% correct under
all circumstances. What if 2 branches started from the same base
revision of a file and both develoeprs make different changes to the
same line. The first merge would be OK, but how should the second
change be integrated into the revision that already contains the first
change?

Ringo

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]


Nigel Magnay

Re: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by R. Tyler Ballance
>
> (warning, crazy idea inbound!)
>
> I think this is a prime opportunity for eating our own dog food, but
> taking it one step further, based on the release branch suggestion: no
> manual merges to release!
>

FWIW, I don't think that's crazy at all.

In fact, this is exactly what we've been doing, albeit with the git
plugin. The 'master' build branch pulls in candidate merge topics,
runs the CI build, and commits the merge IFF the build (and the tests)
succeed.

You could have various branches each with different quality standards
- e.g a releng branch that only accepts and commits merges from
'master' that pass a full regression test on multiple different
platforms.

The elephant in the room of course is that SVN just isn't very good at
this. Everyone knows that the 'all commit to trunk' svn model is
horrible (and actually, kudos to people for hudson core *not* being
that unstable) - just as much as they know that branch/merge in svn is
even worse. In particular, I don't think (though I may be wrong) that
you can 'back out' of a merge if you decide it was a bad idea - this
makes the above functionality, which is trivial in git, hard.

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Adam Purkiss

RE: New release plan

Reply Threaded More More options
Print post
Permalink
Some javascript/style in this post has been disabled (why?)

 
> Date: Fri, 13 Mar 2009 12:06:13 +0000

> From: [hidden email]
> To: [hidden email]
> Subject: Re: New release plan
>
> >
> > (warning, crazy idea inbound!)
> >
> > I think this is a prime opportunity for eating our own dog food, but
> > taking it one step further, based on the release branch suggestion: no
> > manual merges to release!
> >
>
> FWIW, I don't think that's crazy at all.
>
> In fact, this is exactly what we've been doing, albeit with the git
> plugin. The 'master' build branch pulls in candidate merge topics,
> runs the CI build, and commits the merge IFF the build (and the tests)
> succeed.
>
> You could have various branches each with different quality standards
> - e.g a releng branch that only accepts and commits merges from
> 'master' that pass a full regression test on multiple different
> platforms.
>
> The elephant in the room of course is that SVN just isn't very good at
> this. Everyone knows that the 'all commit to trunk' svn model is
> horrible (and actually, kudos to people for hudson core *not* being
> that unstable) - just as much as they know that branch/merge in svn is
> even worse. In particular, I don't think (though I may be wrong) that
> you can 'back out' of a merge if you decide it was a bad idea - this
> makes the above functionality, which is trivial in git, hard.
 
 
Just an FYI - You can "back out" by reverting to the previous revision and then checking it in to make it the latest code. You can also revert out changes from a particular checking or range of checkins. I use tortoiseSVN to do this for me however.
 

>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>



Tell the whole story with photos, right from your Messenger window. Learn how!
Kohsuke Kawaguchi

Re: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by Nigel Magnay

Without arguing the technical benefits of a better version control
system, changing the SCM is too big a task to attack now. Between the
various automations set around the releases, issue-scm-autolink, and
java.net role handling, there's just too much work to do.

I think a more gradual approach to Git should be possible, with a
gateway so that people can contribute changes to Hudson via Git if
they'd like.

We could gradually improve Hudson to do automatic testing on all those
commits, and perhaps even automate the merging process to various degree.

So let's do this slowly, separate from the immediate short term fix.


Nigel Magnay wrote:

>>
>> (warning, crazy idea inbound!)
>>
>> I think this is a prime opportunity for eating our own dog food, but
>> taking it one step further, based on the release branch suggestion: no
>> manual merges to release!
>>
>
> FWIW, I don't think that's crazy at all.
>
> In fact, this is exactly what we've been doing, albeit with the git
> plugin. The 'master' build branch pulls in candidate merge topics,
> runs the CI build, and commits the merge IFF the build (and the tests)
> succeed.
>
> You could have various branches each with different quality standards
> - e.g a releng branch that only accepts and commits merges from
> 'master' that pass a full regression test on multiple different
> platforms.
>
> The elephant in the room of course is that SVN just isn't very good at
> this. Everyone knows that the 'all commit to trunk' svn model is
> horrible (and actually, kudos to people for hudson core *not* being
> that unstable) - just as much as they know that branch/merge in svn is
> even worse. In particular, I don't think (though I may be wrong) that
> you can 'back out' of a merge if you decide it was a bad idea - this
> makes the above functionality, which is trivial in git, hard.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

--
Kohsuke Kawaguchi
Sun Microsystems                   http://weblogs.java.net/blog/kohsuke/


smime.p7s (4K) Download Attachment
Dean Yu

RE: New release plan

Reply Threaded More More options
Print post
Permalink
In reply to this post by Kohsuke Kawaguchi
Hi Kohsuke,
  Is there a reason you don't want to create a branch on Tuesday evening
instead of cutting off commits? It seems ironic that we don't try to
practice CI for building Hudson itself.
  In the end you're our dictator and I'll go along with whatever you
decide. :)

  -- Dean

> -----Original Message-----
> From: Kohsuke Kawaguchi [mailto:[hidden email]]
> Sent: Tuesday, March 10, 2009 12:05 PM
> To: [hidden email]
> Subject: New release plan
>
>
> As you know, lately we are suffering a quality problem in releases.
> There are multiple things we need to do to fix that, such as
> more tests and early regression testing with plugins, but
> it's also clear that we need to adjust the release process.
>
> So this is the proposal to make that adjustment.
>
> - Let's shoot for once-a-week release cycle, on Friday evening pacific
>    time.
>
> - We allow commits freely in Sat, Sun, Mon, and Tue. Tuesday evening
>    is RC cut off.
>
> - We reserve Wed, Thu, and Fri as the quiet period.
>    We make commits to the core conservatively, and I'll use
> this period
>    to deploy RC bits to my production Hudson to be a guinea pig.
>
> - This should give us more time to write tests.
>
>
> I know there will be all sorts of different ways to do
> releases, and I don't want to argue which is better than
> which. So my main question is, putting my dictator hat on, is
> this something that people can live with?
>
> --
> Kohsuke Kawaguchi
> Sun Microsystems                  
> http://weblogs.java.net/blog/kohsuke/
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

1 2 3