geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Geronimo Project Management > Geronimo Server Release Process
Date Thu, 14 Oct 2010 10:51:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/1810/9/1/_/styles/combined.css?spaceKey=GMOxPMGT&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://cwiki.apache.org/confluence/display/GMOxPMGT/Geronimo+Server+Release+Process">Geronimo Server Release Process</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~rickmcguire">Rick McGuire</a>
    </h4>
        <div id="versionComment">
        <b>Comment:</b>
        Update respository and JVM target information. <br />
    </div>
        <br/>
                         <h4>Changes (4)</h4>
                                 
    
<div id="page-diffs">
            <table class="diff" cellpadding="0" cellspacing="0">
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >&lt;source-repository&gt;~/.m2/repository/&lt;/source-repository&gt; <br>{noformat} <br></td></tr>
            <tr><td class="diff-changed-lines" >### Verify that each entry points to the <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">3</span> <span class="diff-added-words"style="background-color: #dfd;">2</span> external repos <br></td></tr>
            <tr><td class="diff-unchanged" >{noformat} <br>&lt;source-repository&gt;http://repo1.maven.org/maven2/&lt;/source-repository&gt; <br></td></tr>
            <tr><td class="diff-changed-lines" ><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">&lt;source-repository&gt;http://people.apache.org/repo/m2-snapshot-repository/&lt;/source-repository&gt;</span> <span class="diff-added-words"style="background-color: #dfd;">&lt;source-repository&gt;http://repository.apache.org/snapshot&lt;/source-repository&gt;</span> <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">&lt;source-repository&gt;http://people.apache.org/repo/m2-incubating-repository/&lt;/source-repository&gt; <br></td></tr>
            <tr><td class="diff-unchanged" >{noformat} <br></td></tr>
            <tr><td class="diff-changed-lines" >### Verify that each entry lists JVM 1.5 and 1.6 targets <span class="diff-added-words"style="background-color: #dfd;">if the release is prior to 3.0.  For all 3.x releases, only 1.6 should be specified.</span> <br></td></tr>
            <tr><td class="diff-unchanged" >{noformat} <br>&lt;jvm-version&gt;1.5&lt;/jvm-version&gt; <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
        </table>
</div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <h3><a name="GeronimoServerReleaseProcess-Procedure"></a>Procedure</h3>

<ol>
	<li>Whenever possible, use the maven release plugin. If something doesn't work file a bug against it.</li>
	<li>Use extreme caution in creating branches as opposed to releasing from trunk. While "core" geronimo may need to keep branches, most smaller projects such as specs, plugins, components, and most likely tools should avoid the complexity of branches unless clearly necessary and agreed upon.</li>
	<li>When branches are needed, branches/x.y would be the branch for all x.y.z releases</li>
</ol>


<p>The next sections are copied from <a href="http://maven.apache.org/developers/release/releasing.html" class="external-link" rel="nofollow">http://maven.apache.org/developers/release/releasing.html</a> with modifications for Geronimo.</p>

<p><a name="GeronimoServerReleaseProcess-staging"></a></p>

<h2><a name="GeronimoServerReleaseProcess-ReleasingaGeronimoProject"></a>Releasing a Geronimo Project</h2>

<p>What follows is a description of releasing a Geronimo project to a staging repository, whereupon it is scrutinized by the community, approved, and transfered to a production repository.<br/>
Prerequisite</p>

<p>Be sure that:</p>
<ul>
	<li>you have all Maven servers defined in your <tt>settings.xml</tt>. For more information, please refer to <a href="http://maven.apache.org/developers/committer-settings.html" class="external-link" rel="nofollow">Maven Committer settings</a> which also apply for Geronimo committers.</li>
	<li>you have created your GPG keys. For more information, please refer to <a href="http://maven.apache.org/developers/release/pmc-gpg-keys.html" class="external-link" rel="nofollow">Making GPG Keys</a>.</li>
</ul>


<p>In order to release a project you must also have the following setup in your <tt>$HOME/.m2/settings.xml</tt> which is a profile that defines the staging repository.</p>

<p>Here's what your release profile might look like in your <tt>$HOME/.m2/settings.xml</tt> :</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;settings&gt;</span>
    <span class="code-tag">&lt;profiles&gt;</span>
        <span class="code-tag">&lt;profile&gt;</span>
            <span class="code-tag">&lt;id&gt;</span>release<span class="code-tag">&lt;/id&gt;</span>
            <span class="code-tag">&lt;properties&gt;</span>
                <span class="code-tag">&lt;gpg.passphrase&gt;</span>secretPhrase<span class="code-tag">&lt;/gpg.passphrase&gt;</span>
                <span class="code-tag">&lt;deploy.altRepository&gt;</span>apache.releases::default::scp://people.apache.org/x1/home/[your apache id]/public_html/staging-repo/${siteId}<span class="code-tag">&lt;/deploy.altRepository&gt;</span>
                <span class="code-tag">&lt;staging.siteURL&gt;</span>scp://people.apache.org/x1/home/[your apache id]/public_html/staging-site<span class="code-tag">&lt;/staging.siteURL&gt;</span>
           <span class="code-tag">&lt;/properties&gt;</span>
        <span class="code-tag">&lt;/profile&gt;</span>
        <span class="code-tag">&lt;profile&gt;</span>
            <span class="code-tag"><span class="code-comment">&lt;!-- use for local site deploy testing and local deploy testing --&gt;</span></span>
            <span class="code-tag">&lt;id&gt;</span>local<span class="code-tag">&lt;/id&gt;</span>
            <span class="code-tag">&lt;properties&gt;</span>
                <span class="code-tag">&lt;deploy.altRepository&gt;</span>djencks::default::file://[home directory]/staging-repo/${siteId}<span class="code-tag">&lt;/deploy.altRepository&gt;</span>
                <span class="code-tag">&lt;gpg.passphrase&gt;</span>secretPhrase<span class="code-tag">&lt;/gpg.passphrase&gt;</span>
                <span class="code-tag">&lt;staging.siteURL&gt;</span>file://[home directory]/staging-site<span class="code-tag">&lt;/staging.siteURL&gt;</span>
            <span class="code-tag">&lt;/properties&gt;</span>
        <span class="code-tag">&lt;/profile&gt;</span>
    <span class="code-tag">&lt;/profiles&gt;</span>

    <span class="code-tag">&lt;servers&gt;</span>
        <span class="code-tag">&lt;server&gt;</span>
            <span class="code-tag">&lt;id&gt;</span>apache.releases<span class="code-tag">&lt;/id&gt;</span>
            <span class="code-tag">&lt;username&gt;</span>[your apache id]<span class="code-tag">&lt;/username&gt;</span>
            <span class="code-tag">&lt;passphrase&gt;</span>[secret passphrase]<span class="code-tag">&lt;/passphrase&gt;</span>
            <span class="code-tag">&lt;filePermissions&gt;</span>664<span class="code-tag">&lt;/filePermissions&gt;</span>
            <span class="code-tag">&lt;directoryPermissions&gt;</span>775<span class="code-tag">&lt;/directoryPermissions&gt;</span>
        <span class="code-tag">&lt;/server&gt;</span>
        <span class="code-tag">&lt;server&gt;</span>
            <span class="code-tag">&lt;id&gt;</span>geronimo-website<span class="code-tag">&lt;/id&gt;</span>
            <span class="code-tag">&lt;username&gt;</span>[your apache id]<span class="code-tag">&lt;/username&gt;</span>
            <span class="code-tag">&lt;passphrase&gt;</span>[secret passphrase]<span class="code-tag">&lt;/passphrase&gt;</span>
            <span class="code-tag">&lt;filePermissions&gt;</span>664<span class="code-tag">&lt;/filePermissions&gt;</span>
            <span class="code-tag">&lt;directoryPermissions&gt;</span>775<span class="code-tag">&lt;/directoryPermissions&gt;</span>
        <span class="code-tag">&lt;/server&gt;</span>
    <span class="code-tag">&lt;/servers&gt;</span>
<span class="code-tag">&lt;/settings&gt;</span>
</pre>
</div></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>The server name apache.releases at the start of deploy.altRepository must correspond to the apache.releases server definition.<br/>
Also that your apache id does not start with "~".</td></tr></table></div>
<p>Everything that you need to release has (will have, actually) been configured in the genesis root pom all Geronimo projects inherit from.</p>

<p>Your project should adhere to standard trunk,branches,tags svn layout in which case no further release profile configuration should be needed.  Some slight deviation such as our specs project still works without extra configuration.  Avoid more complex layouts that require special configuration.</p>

<p>This is the base release configuration in the genesis root pom:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;profile&gt;</span>
            <span class="code-tag">&lt;id&gt;</span>release<span class="code-tag">&lt;/id&gt;</span>

            <span class="code-tag">&lt;build&gt;</span>
                <span class="code-tag">&lt;plugins&gt;</span>

                    <span class="code-tag">&lt;plugin&gt;</span>
                        <span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
                        <span class="code-tag">&lt;artifactId&gt;</span>maven-release-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                        <span class="code-tag">&lt;configuration&gt;</span>
                            <span class="code-tag">&lt;useReleaseProfile&gt;</span>false<span class="code-tag">&lt;/useReleaseProfile&gt;</span>
                            <span class="code-tag">&lt;goals&gt;</span>deploy<span class="code-tag">&lt;/goals&gt;</span>
                            <span class="code-tag">&lt;arguments&gt;</span>-Prelease<span class="code-tag">&lt;/arguments&gt;</span>
                        <span class="code-tag">&lt;/configuration&gt;</span>
                    <span class="code-tag">&lt;/plugin&gt;</span>

                    <span class="code-tag"><span class="code-comment">&lt;!-- We want a source jar --&gt;</span></span>
                    <span class="code-tag">&lt;plugin&gt;</span>
                        <span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
                        <span class="code-tag">&lt;artifactId&gt;</span>maven-source-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                        <span class="code-tag">&lt;executions&gt;</span>
                            <span class="code-tag">&lt;execution&gt;</span>
                                <span class="code-tag">&lt;goals&gt;</span>
                                    <span class="code-tag">&lt;goal&gt;</span>jar<span class="code-tag">&lt;/goal&gt;</span>
                                <span class="code-tag">&lt;/goals&gt;</span>
                            <span class="code-tag">&lt;/execution&gt;</span>
                        <span class="code-tag">&lt;/executions&gt;</span>
                    <span class="code-tag">&lt;/plugin&gt;</span>

                    <span class="code-tag"><span class="code-comment">&lt;!-- We want to sign the artifact, the POM, and all attached artifacts --&gt;</span></span>
                    <span class="code-tag">&lt;plugin&gt;</span>
                        <span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
                        <span class="code-tag">&lt;artifactId&gt;</span>maven-gpg-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                        <span class="code-tag">&lt;inherited&gt;</span>true<span class="code-tag">&lt;/inherited&gt;</span>
                        <span class="code-tag">&lt;configuration&gt;</span>
                            <span class="code-tag">&lt;passphrase&gt;</span>${gpg.passphrase}<span class="code-tag">&lt;/passphrase&gt;</span>
                        <span class="code-tag">&lt;/configuration&gt;</span>
                        <span class="code-tag">&lt;executions&gt;</span>
                            <span class="code-tag">&lt;execution&gt;</span>
                                <span class="code-tag">&lt;goals&gt;</span>
                                    <span class="code-tag">&lt;goal&gt;</span>sign<span class="code-tag">&lt;/goal&gt;</span>
                                <span class="code-tag">&lt;/goals&gt;</span>
                            <span class="code-tag">&lt;/execution&gt;</span>
                        <span class="code-tag">&lt;/executions&gt;</span>
                    <span class="code-tag">&lt;/plugin&gt;</span>

                    <span class="code-tag"><span class="code-comment">&lt;!-- We want to deploy the artifact to a staging location for perusal --&gt;</span></span>
                    <span class="code-tag">&lt;plugin&gt;</span>
                        <span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
                        <span class="code-tag">&lt;artifactId&gt;</span>maven-deploy-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                        <span class="code-tag">&lt;inherited&gt;</span>true<span class="code-tag">&lt;/inherited&gt;</span>
                        <span class="code-tag">&lt;configuration&gt;</span>
                            <span class="code-tag">&lt;altDeploymentRepository&gt;</span>${deploy.altRepository}<span class="code-tag">&lt;/altDeploymentRepository&gt;</span>
                            <span class="code-tag">&lt;updateReleaseInfo&gt;</span>true<span class="code-tag">&lt;/updateReleaseInfo&gt;</span>
                        <span class="code-tag">&lt;/configuration&gt;</span>
                    <span class="code-tag">&lt;/plugin&gt;</span>

                    <span class="code-tag"><span class="code-comment">&lt;!-- We want the JavaDoc JAR published with the release --&gt;</span></span>
                    <span class="code-tag">&lt;plugin&gt;</span>
                        <span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
                        <span class="code-tag">&lt;artifactId&gt;</span>maven-javadoc-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                        <span class="code-tag">&lt;inherited&gt;</span>true<span class="code-tag">&lt;/inherited&gt;</span>
                        <span class="code-tag">&lt;configuration&gt;</span>
                            <span class="code-tag">&lt;source&gt;</span>1.5<span class="code-tag">&lt;/source&gt;</span>
                        <span class="code-tag">&lt;/configuration&gt;</span>
                        <span class="code-tag">&lt;executions&gt;</span>
                            <span class="code-tag">&lt;execution&gt;</span>
                                <span class="code-tag">&lt;id&gt;</span>attach-javadocs<span class="code-tag">&lt;/id&gt;</span>
                                <span class="code-tag">&lt;goals&gt;</span>
                                    <span class="code-tag">&lt;goal&gt;</span>jar<span class="code-tag">&lt;/goal&gt;</span>
                                <span class="code-tag">&lt;/goals&gt;</span>
                            <span class="code-tag">&lt;/execution&gt;</span>
                        <span class="code-tag">&lt;/executions&gt;</span>
                    <span class="code-tag">&lt;/plugin&gt;</span>
                <span class="code-tag">&lt;/plugins&gt;</span>
            <span class="code-tag">&lt;/build&gt;</span>
        <span class="code-tag">&lt;/profile&gt;</span>
</pre>
</div></div>

<h2><a name="GeronimoServerReleaseProcess-ReleaseProcessasusedforGeronimo2.1.x%3A"></a>Release Process as used for Geronimo 2.1.x:</h2>

<p>This incorporates some aspects of the maven release process but stops short of actually using the maven release plugin.  It utilizes a branch for the release process.</p>
<ol>
	<li>when a release is frozen, we spin off a branch with that <b>exact</b> name, as in branches/x.y.z, where z starts at zero and increments by one.</li>
	<li>at that time branches/x.y is immediately updated to version x.y.(z+1)-SNAPSHOT</li>
	<li>We cut releases from the frozen branch</li>
	<li>When a release passes final tck testing and final vote, the frozen branch is moved to tags</li>
</ol>


<h3><a name="GeronimoServerReleaseProcess-Updatingthepomsaftermakinganewbranch"></a>Updating the poms after making a new branch</h3>

<p>Once a new branch is created you will generally need to manage the version number in the poms for parent entries.  The following Perl scripts will assist in that task.  It could use some polishing but given the relatively infrequent use.</p>
<div class="panel" style="border-style: solid;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Pom Version Changer</b></div><div class="panelContent">
<p>perl &#45;i.orig &#45;pe '<br/>
 $done = 0 if /&lt;?xml/;<br/>
 $inParent = 1 if not $done and /&lt;parent&gt;/;<br/>
 s,<b><em>oldVersion</em></b>&lt;/version&gt;,<b><em>newVersion</em></b>&lt;/version&gt;, if $inParent and not $done;<br/>
 $done = $inParent = 1 if /&lt;\/parent&gt;/;<br/>
 ' $(find <b><em>GeronimoDirectory</em></b> &#45;name pom.xml &#124; grep &#45;v "<b><em>GeronimoDirectory</em></b>/pom.xml")</p>
</div></div>
<p>Remember to properly escape periods in the <b><em>oldVersion</em></b>.  For instance, to change 1.1.1-SNAPSHOT to 1.1.1 you would have</p>
<div class="panel" style="border-style: solid;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Example</b></div><div class="panelContent">
<p>perl &#45;i.orig &#45;pe '<br/>
 $done = 0 if /&lt;?xml/;<br/>
 $inParent = 1 if not $done and /&lt;parent&gt;/;<br/>
 s,<b><em>2\.1\.2-SNAPSHOT</em></b>&lt;/version&gt;,<b><em>2.1.2</em></b>&lt;/version&gt;, if $inParent and not $done;<br/>
 $done = $inParent = 1 if /&lt;\/parent&gt;/;<br/>
 ' $(find <b><em>GeronimoDirectory</em></b> &#45;name pom.xml &#124; grep &#45;v "<b><em>GeronimoDirectory</em></b>/pom.xml")</p>
</div></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>making the above script work</b><br />You must replace <b><em>GeronimoDirectory</em></b> above with the fully qualified path to the directory (using "~" will not work).<br/>
Also Note: there are references to versions outside of the pom parent entries updated by the script which will also need to be updated with the new version.</td></tr></table></div>
<p>In addition to the pom version changes there are several other places where version updates are necessary.  To be certain all have been updated you should <b>grep</b> the source for old version references to ensure that those remaining are correct.  Here is an attempt to capture other version changes necessary:</p>
<ol>
	<li>scm entried in root pom.xml</li>
	<li>assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/gsh-classworlds.conf</li>
	<li>framework/configs/geronimo-gbean-deployer/src/it/j2ee-system-2/src/test/resources/META-INF/geronimo-plugin.xml</li>
	<li>framework/configs/geronimo-gbean-deployer/src/it/j2ee-system-2/src/test/resources/META-INF/plan.xml</li>
	<li>framework/configs/geronimo-gbean-deployer/src/it/j2ee-system/src/test/resources/META-INF/geronimo-plugin.xml</li>
	<li>framework/configs/geronimo-gbean-deployer/src/it/j2ee-system/src/test/resources/META-INF/plan.xml</li>
	<li>framework/configs/geronimo-gbean-deployer/src/it/metadatageneration-2/src/test/resources/META-INF/geronimo-plugin.xml</li>
	<li>framework/configs/geronimo-gbean-deployer/src/it/metadatageneration/src/test/resources/META-INF/geronimo-plugin.xml</li>
	<li>framework/configs/plugin/src/main/plan/plan.xml</li>
	<li>framework/modules/geronimo-plugin/src/test/resources/geronimo-plugins.xml</li>
	<li>framework/modules/geronimo-upgrade/src/test/data/gbean_1.xml</li>
	<li>framework/modules/geronimo-upgrade/src/test/data/gbean_1_result.xml</li>
	<li>plugins/remote-deploy/geronimo-remote-deploy/src/main/webapp/WEB-INF/geronimo-web.xml</li>
	<li>plugins/welcome/geronimo-welcome/src/main/webapp/WEB-INF/geronimo-web.xml</li>
	<li>testsuite/webservices-testsuite/jaxrpc-tests/jaxrpc-war/src/main/webapp/WEB-INF/geronimo-web.xml</li>
</ol>


<p>In addition, there are some special version updates required in some pom.xml files beyond those addressed by the script:</p>
<ol>
	<li>assemblies/geronimo-boilerplate-minimal/pom.xml (RELEASE-NOTES filename)</li>
	<li>framework/configs/geronimo-gbean-deployer/src/it/j2ee-system/pom.xml</li>
	<li>framework/configs/plugin/pom.xml</li>
	<li>framework/configs/pom.xml</li>
	<li>plugins/j2ee/j2ee-deployer/pom.xml</li>
	<li>plugins/client/pom.xml</li>
	<li>plugins/corba/client-corba-yoko/pom.xml</li>
	<li>plugins/j2ee/j2ee-server/pom.xml</li>
	<li>plugins/pom.xml</li>
	<li>configs/plugin/pom.xml (plugin-repository-list)</li>
	<li>root pom ... pom.xml</li>
	<li>README.txt</li>
	<li>RELEASE_NOTES-*.txt</li>
</ol>


<h4><a name="GeronimoServerReleaseProcess-Updatetheongoingmaintenancebranch"></a>Update the on-going maintenance branch</h4>
<p>Make similar changes in the branch that will continue on for the next release.</p>
<ol>
	<li>Update poms to the next snapshot version</li>
	<li>Update the same files referenced above</li>
	<li>rename RELEASE_NOTES-x.y.z.txt as appropriate</li>
	<li>Some of the "special" updates required are really just applicable here (when creating a new version rather than just removing the snapshot from an existing version).  This is especially true for reference to the geronimo plugin repository (which normally named without the snapshot even when the release is still a snapshot release).</li>
</ol>


<p>In addition, there are special updates for references to release notes and the plugin website:</p>
<ol>
	<li>assemblies/geronimo-boilerplate-minimal/pom.xml</li>
	<li>framework/configs/plugin/pom.xml</li>
	<li>framework/configs/plugin/src/main/plan/plan.xml</li>
</ol>


<p>In addition, there are special updates for artifact-alias entries:</p>
<ol>
	<li>framework/configs/pom.xml</li>
	<li>plugins/client/pom.xml</li>
	<li>plugins/corba/client-corba-yoko/pom.xml</li>
	<li>plugins/pom.xml</li>
</ol>



<h3><a name="GeronimoServerReleaseProcess-Rationale"></a>Rationale</h3>

<p>We create a branch at freeze time for the following reasons:</p>
<ol>
	<li>it takes at least one week from freeze to ship due to voting, tck testing and potential repeats of that process (re-cut, re-certify, re-vote). There is no reason why work on x.y.z+1 needs to be delayed - only 52 weeks a year.</li>
	<li>stronger guarantee no one is updating the branch once frozen</li>
	<li>less likely that people and ci systems (continuum) will checkout and build pre-release versions of x.y.z (not x.y.z-SNAPSHOT) which would need to be removed manually and may accidentally be distributed.</li>
	<li>it is currently very difficult to roll version numbers forward, entries here and there are often missed. Far better to have branches/x.y have a few straggling old x.y.z-SNAPSHOT versions than a few overlooked x.y.z final numbers that needed to go back to SNAPSHOT - they never leave SNAPSHOT and need to be reverted back later if that process happens in the frozen branch.</li>
</ol>


<h3><a name="GeronimoServerReleaseProcess-CreatingaReleaseCandidate"></a>Creating a Release Candidate</h3>

<ol>
	<li>Download and install the Gnu Privacy Guard (GPG) from <a href="http://www.gnupg.org" class="external-link" rel="nofollow">http://www.gnupg.org</a>. Read the documentation on that site and create a key. Have the key signed and verified by others. Submit your public key to <a href="http://pgp.mit.edu/" class="external-link" rel="nofollow">http://pgp.mit.edu/</a>. This is a one time process.</li>
	<li>Be sure that you have your <tt>&#126;/.m2/settings.xml</tt> updated as specified above in <a href="#GeronimoServerReleaseProcess-staging">Releasing a Geronimo Project</a></li>
	<li>Copy (or move as per situation, for eg specs) the trunk/branch to the new branch using the following command.
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>svn mv SRC-URL DEST-URL -m "Reason for this commit".
</pre>
</div></div></li>
	<li>Checkout or update this branches tree on your machine.</li>
	<li>Update the &lt;scm&gt; urls in the <tt>pom.xml</tt> to point to the final url in tags. Eg:
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;scm&gt;</span>
     <span class="code-tag">&lt;connection&gt;</span>scm:svn:http://svn.apache.org/repos/asf/geronimo/specs/tags/geronimo-servlet_2.5_spec-1.1<span class="code-tag">&lt;/connection&gt;</span>
     <span class="code-tag">&lt;developerConnection&gt;</span>scm:svn:https://svn.apache.org/repos/asf/geronimo/repos/asf/geronimo/specs/tags/geronimo-servlet_2.5_spec-1.1<span class="code-tag">&lt;/developerConnection&gt;</span>
     <span class="code-tag">&lt;url&gt;</span>http://svn.apache.org/viewvc/geronimo/repos/asf/geronimo/specs/tags/geronimo-servlet_2.5_spec-1.1<span class="code-tag">&lt;/url&gt;</span>
<span class="code-tag">&lt;/scm&gt;</span>
</pre>
</div></div></li>
	<li>Add the following release profile to the root pom.xml (Note: This is a subset of the profile included in the maven release process).  This will utilize the maven gpg plugin to sign the artifacts produced and the maven deploy plugin to stage the release to your people.apache staging location but will not utilize the maven release plugin to create the tag, rename versions, etc...
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;profile&gt;</span>
          <span class="code-tag">&lt;id&gt;</span>release<span class="code-tag">&lt;/id&gt;</span>
            <span class="code-tag">&lt;build&gt;</span>
                <span class="code-tag">&lt;plugins&gt;</span>
                    <span class="code-tag"><span class="code-comment">&lt;!-- We want to sign the artifact, the POM, and all attached artifacts --&gt;</span></span>
                    <span class="code-tag">&lt;plugin&gt;</span>
                        <span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
                        <span class="code-tag">&lt;artifactId&gt;</span>maven-gpg-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                        <span class="code-tag">&lt;inherited&gt;</span>true<span class="code-tag">&lt;/inherited&gt;</span>
                        <span class="code-tag">&lt;configuration&gt;</span>
                            <span class="code-tag">&lt;passphrase&gt;</span>${gpg.passphrase}<span class="code-tag">&lt;/passphrase&gt;</span>
                        <span class="code-tag">&lt;/configuration&gt;</span>
                        <span class="code-tag">&lt;executions&gt;</span>
                            <span class="code-tag">&lt;execution&gt;</span>
                                <span class="code-tag">&lt;goals&gt;</span>
                                    <span class="code-tag">&lt;goal&gt;</span>sign<span class="code-tag">&lt;/goal&gt;</span>
                                <span class="code-tag">&lt;/goals&gt;</span>
                            <span class="code-tag">&lt;/execution&gt;</span>
                        <span class="code-tag">&lt;/executions&gt;</span>
                    <span class="code-tag">&lt;/plugin&gt;</span>
                    <span class="code-tag"><span class="code-comment">&lt;!-- We want to deploy the artifact to a staging location for perusal --&gt;</span></span>
                    <span class="code-tag">&lt;plugin&gt;</span>
                        <span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
                        <span class="code-tag">&lt;artifactId&gt;</span>maven-deploy-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                        <span class="code-tag">&lt;inherited&gt;</span>true<span class="code-tag">&lt;/inherited&gt;</span>
                        <span class="code-tag">&lt;configuration&gt;</span>
                            <span class="code-tag">&lt;altDeploymentRepository&gt;</span>${deploy.altRepository}<span class="code-tag">&lt;/altDeploymentRepository&gt;</span>
                            <span class="code-tag">&lt;updateReleaseInfo&gt;</span>true<span class="code-tag">&lt;/updateReleaseInfo&gt;</span>
                        <span class="code-tag">&lt;/configuration&gt;</span>
                    <span class="code-tag">&lt;/plugin&gt;</span>
                <span class="code-tag">&lt;/plugins&gt;</span>
            <span class="code-tag">&lt;/build&gt;</span>
        <span class="code-tag">&lt;/profile&gt;</span>
</pre>
</div></div></li>
	<li>Build the new branches tree as you normally would (including the testsuite) to ensure that it is correct.
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>    mvn install
</pre>
</div></div></li>
	<li>After verifying the updated branch can be built and all tests pass, use the rat-maven-plugin to verify that the source contains required license headers.
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>    find . -name target | xargs rm -rf
    mvn rat:check
</pre>
</div></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>There are a few source files that cannot contain license headers due to the expected format of the file (like LogFactory classes.)  Compare these files against the last release to verify it's okay to release them without headers and ask the prior release manager and/or dev list for guidance.</td></tr></table></div></li>
	<li>Stage the maven artifacts<br/>
When you are ready to create a release candidate, clean out the previous build results from the branches tree (otherwise assemblies will not be rebuilt correctly) and rebuild (without tests or testsuite) to now deploy the artifacts to the staging site that will be used for the release vote using the following command.
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>Server 2.0.x/2.1.x -
    find . -name target | xargs rm -rf
    mvn -Pstaging deploy
Server 2.2 -
    find . -name target | xargs rm -rf
    mvn -Prelease,no-it deploy
</pre>
</div></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Be extremely careful with this step.  There have been times when a slight modification in the above command will result in items being deployed directly to the rsync location rather than to the staging location.<br/>
Before running this step, verify that there is a corresponding "staging" or "release" profile in pom.xml.<br/>
If there are issues/problems with the deploy to the staging location you may have to stage to a local repository and then scp the content to an apache staging location.</td></tr></table></div></li>
	<li>Export and tar/zip the source to be voted on for the release using the following commands:
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>svn export https://svn.apache.org/repos/asf/geronimo/server/branches/2.1.2 geronimo-2.1.2-src
tar -zcvf geronimo-2.1.2-src.tar.gz geronimo-2.1.2-src
</pre>
</div></div>
<p>Also create a zip of the source image.</p></li>
	<li>Create appropriate md5, sha1, and signatures (asc) for the artifacts added manually.  A script similar to this can be used to create the checksums and signature:
<div class="panel" style="border-style: solid;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>signDist.sh</b></div><div class="panelContent">
<p>gpg &#45;-print-md MD5 ./geronimo-2.1.2-src.tar.gz &gt; ./geronimo-2.1.2-src.tar.gz.md5<br/>
gpg &#45;-print-md MD5 ./geronimo-2.1.2-src.zip &gt; ./geronimo-2.1.2-src.zip.md5<br/>
gpg &#45;-print-md MD5 ./RELEASE_NOTES-2.1.2.txt &gt; ./RELEASE_NOTES-2.1.2.txt.md5<br/>
gpg &#45;-print-md MD5 ./README.txt &gt; ./README.txt.md5<br/>
gpg &#45;-print-md MD5 ./NOTICE.txt &gt; ./NOTICE.txt.md5<br/>
gpg &#45;-print-md MD5 ./LICENSE.txt &gt; ./LICENSE.txt.md5<br/>
gpg &#45;-print-md MD5 ./DISCLAIMER.txt &gt; ./DISCLAIMER.txt.md5<br class="atl-forced-newline" />
gpg &#45;-print-md SHA1 ./geronimo-2.1.2-src.tar.gz &gt; ./geronimo-2.1.2-src.tar.gz.sha1<br/>
gpg &#45;-print-md SHA1 ./geronimo-2.1.2-src.zip &gt; ./geronimo-2.1.2-src.zip.sha1<br/>
gpg &#45;-print-md SHA1 ./RELEASE_NOTES-2.1.2.txt &gt; ./RELEASE_NOTES-2.1.2.txt.sha1<br/>
gpg &#45;-print-md SHA1 ./README.txt &gt; ./README.txt.sha1<br/>
gpg &#45;-print-md SHA1 ./NOTICE.txt &gt; ./NOTICE.txt.sha1<br/>
gpg &#45;-print-md SHA1 ./LICENSE.txt &gt; ./LICENSE.txt.sha1<br/>
gpg &#45;-print-md SHA1 ./DISCLAIMER.txt &gt; ./DISCLAIMER.txt.sha1<br class="atl-forced-newline" />
gpg &#45;-armor &#45;-output ./geronimo-2.1.2-src.tar.gz.asc &#45;-detach-sig ./geronimo-2.1.2-src.tar.gz<br/>
gpg &#45;-armor &#45;-output ./geronimo-2.1.2-src.zip.asc &#45;-detach-sig ./geronimo-2.1.2-src.zip<br/>
gpg &#45;-armor &#45;-output ./RELEASE_NOTES-2.1.2.txt.asc &#45;-detach-sig ./RELEASE_NOTES-2.1.2.txt<br/>
gpg &#45;-armor &#45;-output ./README.txt.asc &#45;-detach-sig ./README.txt<br/>
gpg &#45;-armor &#45;-output ./NOTICE.txt.asc &#45;-detach-sig ./NOTICE.txt<br/>
gpg &#45;-armor &#45;-output ./LICENSE.txt.asc &#45;-detach-sig ./LICENSE.txt<br/>
gpg &#45;-armor &#45;-output ./DISCLAIMER.txt.asc &#45;-detach-sig ./DISCLAIMER.txt</p>
</div></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Ensure that your public PGP key is in appropriate public locations (esp. /www/www.apache.org/dist/geronimo/KEYS on people and <a href="http://pgp.mit.edu/" class="external-link" rel="nofollow">http://pgp.mit.edu/</a>) and that your pgp key has been signed by several other apache committers to create a web of trust.</td></tr></table></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>You will need to copy the RELEASE_NOTES-x.x.x.txt from the target location of one of the built assemblies rather than the root of the branch as the version attributes are updated as part of the build.</td></tr></table></div></li>
	<li>Update the plugins site  - <a href="http://cwiki.apache.org/GMOxDEV/steps-to-create-a-plugin-repository-for-a-new-geronimo-release.html" class="external-link" rel="nofollow">http://cwiki.apache.org/GMOxDEV/steps-to-create-a-plugin-repository-for-a-new-geronimo-release.html</a>
	<ol>
		<li>Update your local ~/.m2/repository/geronimo-plugins.xml file from a clean server build to:
		<ol>
			<li>Remove all occurrences of your local repo
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>&lt;source-repository&gt;~/.m2/repository/&lt;/source-repository&gt;
</pre>
</div></div></li>
			<li>Verify that each entry points to the 2 external repos
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>&lt;source-repository&gt;http://repo1.maven.org/maven2/&lt;/source-repository&gt;
&lt;source-repository&gt;http://repository.apache.org/snapshot&lt;/source-repository&gt;
</pre>
</div></div></li>
			<li>Verify that each entry lists JVM 1.5 and 1.6 targets if the release is prior to 3.0.  For all 3.x releases, only 1.6 should be specified.
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>&lt;jvm-version&gt;1.5&lt;/jvm-version&gt;
&lt;jvm-version&gt;1.6&lt;/jvm-version&gt;
</pre>
</div></div></li>
			<li>Update the default repository values by replacing the local repo reference with
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>&lt;default-repository&gt;http://geronimo.apache.org/plugins/geronimo-2.1.3/&lt;/default-repository&gt;
&lt;default-repository&gt;http://repo1.maven.org/maven2/&lt;/default-repository&gt;
&lt;default-repository&gt;http://www.ibiblio.org/maven2/&lt;/default-repository&gt;
</pre>
</div></div></li>
		</ol>
		</li>
		<li>Upload the updated geronimo-plugins.xml to the plugin website in svn
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>https://svn.apache.org/repos/asf/geronimo/site/trunk/docs/plugins/geronimo-2.1.3/
which gets copied over to the following location on people.apache.org by a cron job -
    /www/geronimo.apache.org/plugins/geronimo-2.1.3
</pre>
</div></div></li>
		<li>Create the plugin-repository-list-2.1.4.txt for the on-going maintenance branch with
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>http://geronimo.apache.org/plugins/geronimo-2.1.4/
</pre>
</div></div></li>
		<li>Create the geronimo-2.1.4 directory for the on-going maintenance branch and seed it with a copy of the .htaccess from the prior release and the following geronimo-plugins.xml content (until a 2.1.4-SNAPSHOT build has been published and new geronimo-plugins.xml file created)
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
&lt;geronimo-plugin-list xmlns:ns2="http://geronimo.apache.org/xml/ns/attributes-1.
2" xmlns="http://geronimo.apache.org/xml/ns/plugins-1.3"&gt;

    &lt;default-repository&gt;http://geronimo.apache.org/plugins/geronimo-2.1.4/&lt;/defa
ult-repository&gt;
    &lt;default-repository&gt;http://repo1.maven.org/maven2/&lt;/default-repository&gt;
    &lt;default-repository&gt;http://www.ibiblio.org/maven2/&lt;/default-repository&gt;
&lt;/geronimo-plugin-list&gt;
</pre>
</div></div></li>
		<li>Commit the changes to svn</li>
	</ol>
	</li>
	<li>Create a distribution directory on people.apache.org (like ~/public_html/releases/geronimo-2.1.3-RC1) and upload the following artifacts for the vote:
	<ol>
		<li>Source tar &amp; zip</li>
		<li>All assembly images that are part of the vote.  This is more for convenience of the voters and to serve as a distribution location once the vote is complete.</li>
		<li>Release notes, README, LICENSE, NOTICE, and DISCLAIMER</li>
		<li>MD5, SHA1 and ASC files for all of the above</li>
	</ol>
	</li>
</ol>


<h3><a name="GeronimoServerReleaseProcess-CallingaVote"></a>Calling a Vote</h3>

<ol>
	<li>Put it up for a vote along with the staging release you created earlier. In the vote notice, please include the precise names and versions being voted on (e.g. geronimo-jetty6-javaee5-2.1.3), the svn revision and urls to the current source along with where the tag will be created.
	<ol>
		<li>Start a vote thread for the release
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>To: "Geronimo Developers List" &lt;dev@geronimo.apache.org&gt;
Cc: "Geronimo Users List" &lt;user@geronimo.apache.org&gt;
Subject: [VOTE] Release Geronimo Server 2.1.3 RC1

All,

I've prepared a release candidate of Geronimo Server 2.1.3 for your review and vote.

The source for RC1 is Rev&lt;XXXXX&gt; from the following svn branch:
&lt;branch URL&gt;

When the release vote is approved, I will svn mv the code to:
&lt;future tag URL&gt;

The following staging directory contains the server binary assemblies/distributions
to be released (framework, tomcat/jetty, Java EE/Minimal, tar/zip) as well as the
RELEASE_NOTES, README, NOTICE, LICENSE and source code archives for the release.
&lt;distribution dir URL&gt;

For your convenience, here are pointers to the JavaEE distributions:
&lt;URLs&gt;

The maven artifacts for the release can be found here:
&lt;staging-repo URL&gt;

When the release vote is approved, these maven artifacts will be moved
to the m2-ibiblio-rsync-repository at Apache.


[ ] +1 Release Geronimo Server 2.1.3
[ ] 0 No opinion
[ ] -1 Do not release Geronimo Server 2.1.3 (please provide rationale)

The voting will be open for 72 hours or until the tck results are verified, whichever is longer.

</pre>
</div></div></li>
		<li>Start a discussion thread for the vote
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>To: "Geronimo Developers List" &lt;dev@geronimo.apache.org&gt;
Cc: "Geronimo Users List" &lt;user@geronimo.apache.org&gt;
Subject: [DISCUSS] Release Geronimo Server 2.1.3 RC1

Discussion thread for "[VOTE] Release Geronimo Server 2.1.3 RC1"

</pre>
</div></div></li>
	</ol>
	</li>
	<li>Send out the vote results in a reply email
	<ol>
		<li>If the vote passed, send a reply to the original [VOTE] email with -
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>Subject: [RESULTS] Release Geronimo Server 2.1.3 RC1

The vote passed with:

[xx] +1
[xx] +0
[xx] -1

I'll start publishing the artifacts, updating the download website with the new release and create a News entry for our website.

</pre>
</div></div></li>
		<li>If the vote was canceled and another release candidate is being created for another vote
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>Subject: [CANCELED] Release Geronimo Server 2.1.3 RC1

The vote is being canceled due to xxxx and a new release candidate will be created for another vote.

</pre>
</div></div></li>
	</ol>
	</li>
</ol>


<h3><a name="GeronimoServerReleaseProcess-PublishingaReleaseCandidate"></a>Publishing a Release Candidate</h3>

<ol>
	<li>Copy from the staging repo to the production repo.<br/>
Once the release is deemed fit for public consumption it can be transfered to a production repository where it will be available to all users. Note: Current version of the stage plugin is 1.0-alpha-1.<br/>
Here is an example on how to use the stage plugin:
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>mvn stage:copy -Dsource="http://people.apache.org/&lt;your apache id&gt;/staging-repo/&lt;siteId&gt;" \
  -Dtarget="scp://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository" \
  -Dversion=2.1.2 \
  -DtargetRepositoryId=apache.releases
</pre>
</div></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>The version parameter is currently ignored but specify the correct version anyway.  The entire staging repository is synced, not just the given version or the current project.</td></tr></table></div>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Also note, this process has been known to have problems at times if a maven version other than 2.0.8 is used.</td></tr></table></div></li>
	<li>Copy the distribution content from the staging location to the production repo.<br/>
>From your people apache account copy the distribution content to the appropriate location under /www/www.apache.org/dist/geronimo/
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Ensure that the files you copy to the rsync and distribution directories have <tt>0775</tt> dir permission and a <tt>0664</tt> file permission set on them.</td></tr></table></div></li>
	<li>Move the branches to tags using the following command.
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>svn mv SRC-URL DEST-URL -m "Reason for this commit".
</pre>
</div></div></li>
	<li>Update the Geronimo site download pages with a new page for the release <a href="http://geronimo.apache.org/downloads.html" class="external-link" rel="nofollow">Geronimo Downloads </a>.  Include the list JIRA for know issues by first generating a JIRA query for the release, right clicking on the XML format and saving the url to inclusion in the download page.</li>
	<li>Administer the <a href="https://issues.apache.org/jira/browse/GERONIMO" class="external-link" rel="nofollow">GERONIMO JIRA project</a> to update the released and unreleased versions</li>
	<li>Update the <a href="http://geronimo.apache.org" class="external-link" rel="nofollow">Geronimo Home Page</a> with a News item that a new Geronimo Server release is available</li>
	<li>Update the <a href="http://cwiki.apache.org/confluence/display/GMOxPMGT/Apache+Geronimo+Release+Roadmaps" class="external-link" rel="nofollow">Geronimo Release Roadmaps</a> with the release date.</li>
	<li>Final step, is to force the Confluence Autoexport plugin to run for the following spaces:  Apache Geronimo (GMOxSITE), Apache Geronimo Project Management (GMOxPMGT), Apache Geronimo 2.1 (GMOxDOC21)</li>
</ol>


<h3><a name="GeronimoServerReleaseProcess-Notice"></a>Notice</h3>

<p>The original process in this document was voted on by the Geronimo community. Please formally propose all changes to dev@geronimo.apache.org.</p>

<p>See:</p>
<ol>
	<li><a href="http://marc.theaimsgroup.com/?l=geronimo-dev&amp;m=115094116905426&amp;w=4" class="external-link" rel="nofollow">http://marc.theaimsgroup.com/?l=geronimo-dev&amp;m=115094116905426&amp;w=4</a></li>
</ol>


<p>Revised process using maven tools voted on in March 2008.  Only major structural changes now require votes.</p>

<p>See: (not yet in archive)</p>
    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href="https://cwiki.apache.org/confluence/users/viewnotifications.action" class="grey">Change Notification Preferences</a>
        </div>
        <a href="https://cwiki.apache.org/confluence/display/GMOxPMGT/Geronimo+Server+Release+Process">View Online</a>
        |
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=93168&revisedVersion=19&originalVersion=18">View Changes</a>
                |
        <a href="https://cwiki.apache.org/confluence/display/GMOxPMGT/Geronimo+Server+Release+Process?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message