github release procedure

Rob T rob at ucora.com
Thu Jan 3 22:59:05 PST 2013


On Thursday, 3 January 2013 at 22:11:59 UTC, H. S. Teoh wrote:
> We could either:
>
> (1) Have an actual branch called 'staging', where changes made 
> to master
> since the last merge are merged in immediately after release, 
> and when
> things have sufficiently stabilized, we tag/branch that 
> particular
> commit as release 2.X.Y;
>
> (2) Or, we can follow Walter's suggestion of branching master 
> into 2.X.Y
> after a release and just tag it as a release when it's 
> sufficiently
> stable. In this case, the latest 2.X.Y branch acts as 'staging'.
>
> Part of the draw of (1) is that betatesters and adventurous 
> people have
> a fixed place to go to, to get the latest and greatest 
> features, but
> without the instability of master.

(1) is what I was advocating precisely so that beta testers could 
use it shortly after a release and up to the final next release. 
There are a few benefits to this that may be under appreciated. 
There's plenty of benefits to having a lot of beta testers, so we 
want to draw them in and encourage them to use the latest beta 
version as soon as possible. Real world programmers do not want 
to make use of something that is too unstable, so they will tend 
to avoid the master development branch and will prefer the latest 
stable release instead. The only reason they will try out the 
latest beta version, is to gain access to a bug fix or new 
feature that they really need for their real world programming 
tasks, but they will only try it out if they think that the beta 
is stable enough and is not going to get horribly broken by 
anything radical being merged in without proper oversight and 
planning (that's what master and the related feature branches are 
for).

If we immediately move master into the next staging after a new 
release, and freeze the introduction of new features, only to 
concentrate on stabilizing it for the next release, then we're 
more likely to attract beta testers from the real world, these 
are the guys who will do testing under the most realistically 
conditions possible, something that in invaluable in gaining feed 
back and routing our difficult to discover bugs.

> I think (2) is more commonly what is actually done by software 
> companies
> and projects. In this case, 'staging' isn't so much as an actual
> physical branch, as the general concept of having a branch 
> (2.X.Y, which
> changes per release) to stabilize things for a release, while
> development on master continues unhindered.
>
> The Linux kernel also uses a similar kind of process: X.Y.Z is a
> development release (can be thought of as 'master') when Y is 
> odd, and a
> stable release (can be thought of as 'staging' or Walter's 
> release
> branches) when Y is even.
>
> Basically, the idea is that master should be able to receive 
> the latest
> and greatest features, completely unhindered, while stabilizing 
> the code
> for a release is done in a separate branch which doesn't 
> receive new
> features, but only bugfixes, prior to an actual release.
>

I'm not certain what the major difference is between (1) and (2), 
because they both sound very nearly identical. In both cases, 
they seem to provide the same goals of stabilizing the next 
release, while allowing development to proceed unhindered, so if 
(2) can be made to achieve the goal I described for attracting 
real world beta testers, it may not matter which is used, however 
I would suggest that we always focus on serving the needs of the 
end user as a top priority as much as is possible. D requires 
plenty of significant end users working on significant projects.

You did mention that (1) is more suitable for beta testers, so I 
ask how is (2) not as suitable?

--rt


More information about the Digitalmars-d mailing list