1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style type="text/css"> /* <![CDATA[ */
@import "tigris-branding/css/tigris.css";
@import "tigris-branding/css/inst.css";
/* ]]> */</style>
<link rel="stylesheet" type="text/css" media="print"
href="tigris-branding/css/print.css"/>
<script type="text/javascript" src="tigris-branding/scripts/tigris.js"></script>
<title>The Subversion Release Procedure</title>
</head>
<body>
<div class="app">
<h1 style="text-align: center;">The Subversion Release Procedure</h1>
<p>If you are the current Release Manager for the Subversion project,
or aspire to be, you should read and follow this procedure.</p>
<pre>
$LastChangedDate: 2006-04-03 18:57:54 +0200 (Mon, 03 Apr 2006) $
</pre>
<![CDATA[=========================================================]]>
<!-- Other pages seem to use "h2" for ToC, but I think "h1" works
better, because the ToC is fundamentally different from other
sections and therefore it's confusing when it looks the same as
the others. -->
<div class="h1"><!-- no 'id' or 'title' attribute for ToC -->
<h1>Table of Contents</h1>
<ul>
<li><a href="#release-manager-role"
>Being the Release Manager</a></li>
<li><a href="#release-branches"
>Creating and maintaining release branches</a></li>
<li><a href="#porting-changes"
>Porting changes to release branches</a></li>
<li><a href="#the-changes-file"
>Managing the CHANGES file</a></li>
<li><a href="#before-release"
>Preparing to roll a release</a></li>
<li><a href="#rolling-release"
>Rolling a release</a></li>
<li><a href="#blessing-release"
>Blessing a release</a></li>
<li><a href="#releasing-release"
>The actual releasing</a></li>
</ul>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="release-manager-role" title="release-manager-role">
<h2>Being the Release Manager</h2>
<p>The role of the Release Manager in the Subversion project is to
handle the process of getting code stabilized, packaged and released
to the general public. If we were building planes, the RM would be
the guy looking at the construction checklists, painting the airline
logo on the fuselage, and delivering the finished unit to the
customer.</p>
<p>As such, there is no real development associated with being an RM.
All the work you have to do is non-coding: coordinating people,
centralizing information, and being the public voice announcing new
stable releases. A lot of the tasks that the RM has to do are
repetitive, and not automated either because nobody has broken down
and written the tools yet, or because the tasks require human
validation that makes automation a little superfluous.</p>
<p>You may be thinking at this stage that the RM's duty is
unglamorous, and you are kinda right. If you are looking for a
position within the project that will bring fame and fortune, you're
better off implementing stuff that really needs to be done on trunk.
If you're looking for something that really helps people who don't
care about releases focus on code, then RMing is for you.</p>
<p>So, you are the Release Manager. What do you need to do? This is
what the rest of this document is about.</p>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="release-branches" title="release-branches">
<h2>Creating and maintaining release branches</h2>
<p>A new release branch is created for each new major and minor
release. So, for example, a new release branch is created when
preparing to release version 2.0.0, or version 1.3.0. However, when
preparing to release 1.3.1 (a micro-version increment), the release
branch created for 1.3.0 is used.</p>
<p>If you are preparing for a micro release, then there is no release
branch to create. You just pick up where you left off in the current
minor version release branch.</p>
<p>The time at which a new release branch needs to be created is fuzzy
at best. Generally, we have a soft schedule of releasing a new minor
version every 6 months. So, approximately 4 months after the previous
minor release is a good time to start proposing a branch. But remember
that this is flexible, depending on what features are being
developed.</p>
<p>Once people agree that a new release branch should be made, the
Release Manager creates it with the following procedure (substitute
A.B with the version you're preparing, eg. 1.3, or 2.0):</p>
<ul>
<li><p>Create the new release branch with a server-side copy:</p>
<pre>
svn cp http://svn.collab.net/repos/svn/trunk \
http://svn.collab.net/repos/svn/branches/A.B.x \
-m "Create the release branch for release A.B.0."
</pre></li>
<li><p>Edit <tt>subversion/include/svn_version.h</tt> on trunk and
increment the version numbers there. Do not commit these changes
yet.</p>
<p>The version number on trunk always reflects the major/minor
version that will immediately follow the one for which you just
created a branch (eg. 2.1.0 for the 2.0.x branch, and 1.4.0 for
the 1.3.x branch).</p></li>
<li><p>Edit <tt>CHANGES</tt> on trunk to introduce a new section for the
upcoming release. The section starts with:</p>
<pre>
Version A.B.0 (released XX XXXXX 200X, from branches/A.B.x)
http://svn.collab.net/repos/svn/tags/A.B.0
</pre>
<p>Leave the release date blank for now. It will remain this way
until rolling time.</p></li>
<li><p>Commit both these changes with the following log message:</p>
<pre>
Increment the trunk version number, and introduce a new CHANGES
section for the upcoming A.B.0 release.
* subversion/include/svn_version.h: Increment version number.
* CHANGES: New section for A.B.0.
</pre></li>
</ul>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="porting-changes" title="porting-changes">
<h2>Porting changes to release branches</h2>
<p>Once a release branch has been created, no development <i>ever</i>
takes place there. The only changes permitted are ones made to
various bookkeeping files such as <tt>STATUS</tt>, and changes merged
in from trunk.</p>
<p>The protocol used to accept or refuse the merging of changes from
trunk is of interest to all Subversion developers, and as such is
documented in <a
href="hacking.html#release-stabilization">the
release stabilization section of the hacking guide</a>.</p>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="the-changes-file" title="the-changes-file">
<h2>Managing the CHANGES file</h2>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="before-release" title="before-release">
<h2>Preparing to roll a release</h2>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="rolling-release" title="rolling-release">
<h2>Rolling a release</h2>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="blessing-release" title="blessing-release">
<h2>Blessing a release</h2>
</div>
<![CDATA[=========================================================]]>
<div class="h2" id="releasing-release" title="releasing-release">
<h2>The actual releasing</h2>
</div>
</div>
</body>
</html>
|