felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Felix > Release Management (Nexus)
Date Wed, 26 Jan 2011 18:01:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/2036/9/1/_/styles/combined.css?spaceKey=FELIX&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/FELIX/Release+Management+%28Nexus%29">Release
Management (Nexus)</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~heavy@ungoverned.org">Richard
S. Hall</a>
    </h4>
        <br/>
                         <h4>Changes (1)</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" >First prepare your POMs for release:
<br> <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">#
Make sure you have correct NOTICE, [DEPENDENCIES|DEPENDENCIES file template], and LICENSE
files. Remember to update the copyright year. <br># Make sure you have an updated change
log file, typically in {{doc/changelog.txt}} but in the project root is also acceptable. <br></td></tr>
            <tr><td class="diff-unchanged" ># make sure there are no snapshots
in the POMs to be released <br># check that your POMs will not lose content when they
are rewritten during the release process <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <p><em>This is the new release process for Apache Felix, based on the
updated Maven <a href="http://maven.apache.org/developers/release/releasing.html" class="external-link"
rel="nofollow">process</a></em></p>

<h2><a name="ReleaseManagement%28Nexus%29-Prerequisites"></a>Prerequisites</h2>

<p>To prepare or perform a release you <b>MUST BE</b> at least an Apache
Felix Committer.</p>

<ul>
	<li>each and every release must be <a href="http://www.apache.org/dev/release-signing.html"
class="external-link" rel="nofollow">SIGNED</a>; your public key should be added
to <a href="http://www.apache.org/dist/felix/KEYS" class="external-link" rel="nofollow">http://www.apache.org/dist/felix/KEYS</a>
(see <b>Appendix A</b>)</li>
	<li>your public key should also be cross-signed by other Apache committers (not required,
but suggested)</li>
	<li>when preparing the release on Mac OS X, make sure you read <b>Appendix B</b>
before continuing</li>
	<li>make sure you have all Apache servers defined in your <a href="http://maven.apache.org/developers/committer-settings.html"
class="external-link" rel="nofollow">settings.xml</a></li>
	<li>use Maven 2.0.x (or 2.2.x), as Maven 2.1.x is known to produce wrong gpg pom signatures
(<a href="http://jira.codehaus.org/browse/MGPG-14" class="external-link" rel="nofollow">MGPG-14</a>)</li>
</ul>


<p><b>Note</b>: Listing the Apache servers in the <tt>settings.xml</tt>
file also requires adding the password to that file. Starting with Maven 2.1 this password
may be encrypted and needs not be give in plaintext. Please refer to <a href="http://maven.apache.org/guides/mini/guide-encryption.html"
class="external-link" rel="nofollow">Password Encryption</a> for more information.</p>

<p>In the past we staged release candidates on our local machines using a semi-manual
process. Now that we inherit from the Apache parent POM version 5, a repository manager will
automatically handle staging for you. This means you now only need to specify your GPG passphrase
in the release profile of your <tt>${user.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> <span
class="code-tag"><span class="code-comment">&lt;!-- YOUR KEY PASSPHRASE --&gt;</span></span>
<span class="code-tag">&lt;/gpg.passphrase&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;/settings&gt;</span>
</pre>
</div></div>

<p>Everything else has been configured in the latest Felix parent POM:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;parent&gt;</span>
  <span class="code-tag">&lt;groupId&gt;</span>org.apache.felix<span
class="code-tag">&lt;/groupId&gt;</span>
  <span class="code-tag">&lt;artifactId&gt;</span>felix-parent<span
class="code-tag">&lt;/artifactId&gt;</span>
  <span class="code-tag">&lt;version&gt;</span>1.2.0<span class="code-tag">&lt;/version&gt;</span>
  <span class="code-tag">&lt;relativePath&gt;</span>../pom/pom.xml<span
class="code-tag">&lt;/relativePath&gt;</span>
<span class="code-tag">&lt;/parent&gt;</span>
</pre>
</div></div>

<h2><a name="ReleaseManagement%28Nexus%29-StagingtheReleaseCandidates"></a>Staging
the Release Candidates</h2>

<p>First prepare your POMs for release:</p>

<ol>
	<li>Make sure you have correct NOTICE, <a href="/confluence/display/FELIX/DEPENDENCIES+file+template"
title="DEPENDENCIES file template">DEPENDENCIES</a>, and LICENSE files. Remember
to update the copyright year.</li>
	<li>Make sure you have an updated change log file, typically in <tt>doc/changelog.txt</tt>
but in the project root is also acceptable.</li>
	<li>make sure there are no snapshots in the POMs to be released</li>
	<li>check that your POMs will not lose content when they are rewritten during the release
process
	<ul>
		<li><tt>mvn release:prepare -DdryRun=true</tt></li>
		<li>diff the original <tt>pom.xml</tt> with the one called <tt>pom.xml.tag</tt>
to see if the license or any other info has been removed. This has been known to happen if
the starting <tt>&lt;project&gt;</tt> tag is not on a single line. The
only things that should be different between these files are the <tt>&lt;version&gt;</tt>
and <tt>&lt;scm&gt;</tt> elements. If there are any other changes, you
must fix the original <tt>pom.xml</tt> file and commit before proceeding with
the release</li>
	</ul>
	</li>
	<li>publish a snapshot
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
$ mvn deploy
...
[INFO] [deploy:deploy]
[INFO] Retrieving previous build number from apache.snapshots.https
...
</pre>
</div></div>
	<ul>
		<li>if you experience an error during deployment like a HTTP 401 check your settings
for the required server entries as outlined in the <b>Prerequisites</b></li>
		<li>be sure that the generated artifacts respect the Apache release <a href="http://www.apache.org/dev/release.html"
class="external-link" rel="nofollow">rules</a>: NOTICE and LICENSE files should be
present in the META-INF directory within the jar. For -sources artifacts, be sure that your
POM does not use the maven-source-plugin:2.0.3 which is broken. The recommended version at
this time is 2.0.4</li>
		<li>you should verify the deployment under the <a href="https://repository.apache.org/content/groups/snapshots/org/apache/felix"
class="external-link" rel="nofollow">snapshot</a> repository on Apache</li>
	</ul>
	</li>
	<li>prepare the release
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
mvn release:clean
mvn release:prepare
</pre>
</div></div>
	<ul>
		<li>preparing the release will create the new tag in SVN, automatically checking in
on your behalf</li>
	</ul>
	</li>
	<li>stage the release for a vote
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
mvn release:perform
</pre>
</div></div>
	<ul>
		<li>the release will automatically be inserted into a temporary staging repository
for you, see the Nexus <a href="http://www.sonatype.com/books/nexus-book/reference/staging.html"
class="external-link" rel="nofollow">staging documentation</a> for full details</li>
		<li>you can continue to use <tt>mvn release:prepare</tt> and <tt>mvn
release:perform</tt> on other sub-projects as necessary on the same machine and they
will be combined in the same staging repository - this is useful when making a release of
the Felix framework and its associated bundles.</li>
	</ul>
	</li>
	<li>close the staging repository
	<ul>
		<li>login to <a href="https://repository.apache.org" class="external-link" rel="nofollow">https://repository.apache.org</a>
using your Apache SVN credentials. Click on <b>Staging</b> on the left. Then click
on <b>org.apache.felix</b> in the list of repositories. In the panel below you
should see an open repository that is linked to your username and IP. Right click on this
repository and select <b>Close</b>. This will close the repository from future
deployments and make it available for others to view. If you are staging multiple releases
together, skip this step until you have staged everything</li>
	</ul>
	</li>
	<li>verify the staged artifacts
	<ul>
		<li>if you click on your repository, a tree view will appear below. You can then browse
the contents to ensure the artifacts are as you expect them. Pay particular attention to the
existence of &#42;.asc (signature) files. If you don't like the content of the repository,
right click your repository and choose <b>Drop</b>. You can then rollback your
release (see <b>Canceling the Release</b>) and repeat the process</li>
		<li>note the staging repository URL (especially the number at the end of the URL)
you will need this in your vote email</li>
	</ul>
	</li>
</ol>


<h2><a name="ReleaseManagement%28Nexus%29-StartingtheVote"></a>Starting
the Vote</h2>

<p>Propose a vote on the dev list with the closed issues, the issues left, and the staging
repository - for example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
To: <span class="code-quote">"Felix Developers List"</span> &lt;dev@felix.apache.org&gt;
Subject: [VOTE] Release Felix XXX version Y.Z

Hi,

We solved N issues in <span class="code-keyword">this</span> release:
http:<span class="code-comment">//issues.apache.org/jira/...
</span>
There are still some outstanding issues:
http:<span class="code-comment">//issues.apache.org/jira/...
</span>
Staging repository:
https:<span class="code-comment">//repository.apache.org/content/repositories/orgapachefelix-[YOUR
REPOSITORY ID]/
</span>
You can use <span class="code-keyword">this</span> UNIX script to download the
release and verify the signatures:
http:<span class="code-comment">//svn.apache.org/repos/asf/felix/trunk/check_staged_release.sh
</span>
Usage:
sh check_staged_release.sh [YOUR REPOSITORY ID] /tmp/felix-staging

Please vote to approve <span class="code-keyword">this</span> release:

[ ] +1 Approve the release
[ ] -1 Veto the release (please provide specific comments)

This vote will be open <span class="code-keyword">for</span> 72 hours.
</pre>
</div></div>
<ul>
	<li>to get the JIRA release notes link, browse to the FELIX <a href="http://issues.apache.org/jira/browse/FELIX"
class="external-link" rel="nofollow">JIRA</a> page, select <a href="http://issues.apache.org/jira/secure/ConfigureReleaseNote.jspa?projectId=12310100"
class="external-link" rel="nofollow">Release Notes</a> and choose the relevant sub-project
release and format (HTML)</li>
	<li>to get the list of issues left in JIRA, select the <a href="http://issues.apache.org/jira/browse/FELIX?report=com.atlassian.jira.plugin.system.project:openissues-panel"
class="external-link" rel="nofollow">Open Issues</a> tab on the main FELIX page,
and select the relevant sub-project.</li>
</ul>


<h2><a name="ReleaseManagement%28Nexus%29-WaitfortheResults"></a>Wait for
the Results</h2>

<p>From <a href="http://www.apache.org/foundation/voting.html" class="external-link"
rel="nofollow">Votes on Package Releases</a>:</p>

<blockquote><p>Votes on whether a package is ready to be released follow a format
similar to majority approval  &#8211; except that the decision is officially determined
solely by whether at least three +1 votes were registered. Releases may not be vetoed. Generally
the community will table the vote to release if anyone identifies serious problems, but in
most cases the ultimate decision, once three or more positive votes have been garnered, lies
with the individual serving as release manager. The specifics of the process may vary from
project to project, but the 'minimum of three +1 votes' rule is universal.</p></blockquote>

<p>The list of binding voters is available at <a href="http://felix.apache.org/site/project-management-committee-pmc.html"
class="external-link" rel="nofollow">http://felix.apache.org/site/project-management-committee-pmc.html</a></p>

<p>If the vote is successful, post the result to the dev list - for example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
To: <span class="code-quote">"Felix Developers List"</span> &lt;dev@felix.apache.org&gt;
Subject: [RESULT] [VOTE] Release Felix XXX version Y.Z

Hi,

The vote has passed with the following result :

  +1 (binding): &lt;&lt;list of names&gt;&gt;
  +1 (non binding): &lt;&lt;list of names&gt;&gt;

I will copy <span class="code-keyword">this</span> release to the Felix dist directory
and
promote the artifacts to the central Maven repository.
</pre>
</div></div>
<p>If the vote is unsuccessful, you need to fix the issues and restart the process -
see <b>Canceling the Release</b>.<br/>
If the vote is successful, you need to promote and distribute the release - see <b>Promoting
the Release</b>.</p>

<h2><a name="ReleaseManagement%28Nexus%29-CancelingtheRelease"></a>Canceling
the Release</h2>

<p>If the vote fails, or you decide to redo the release:</p>
<ol>
	<li>remove the release tag from Subversion (<tt>svn del ...</tt>)</li>
	<li>login to <a href="https://repository.apache.org" class="external-link" rel="nofollow">https://repository.apache.org</a>
using your Apache SVN credentials. Click on <b>Staging</b> on the left. Then click
on <b>org.apache.felix</b> in the list of repositories. In the panel below you
should see a closed repository that is linked to your username and IP (if it's not yet closed
you need to right click and select <b>Close</b>). Right click on this repository
and select <b>Drop</b>.</li>
	<li>rollback the version in the <tt>pom.xml</tt> and commit any fixes you
need to make</li>
</ol>


<h2><a name="ReleaseManagement%28Nexus%29-PromotingtheRelease"></a>Promoting
the Release</h2>

<p>If the vote passes:</p>
<ol>
	<li>copy the released artifacts to the Felix dist directory (<tt>/x1/www/www.apache.org/dist/felix</tt>)
on <tt>people.apache.org</tt></li>
	<li>delete the old release from the Felix dist directory (it's archived)</li>
	<li>login to <a href="https://repository.apache.org" class="external-link" rel="nofollow">https://repository.apache.org</a>
with your Apache SVN credentials. Click on <b>Staging</b>. Find your closed staging
repository, right click on it and choose <b>Promote</b>. Select the <b>Releases</b>
repository from the drop-down list and click <b>Promote</b>.</li>
	<li>next click on <b>Repositories</b>, select the <b>Releases</b>
repository and validate that your artifacts are all there</li>
	<li>if you're releasing bundles, you can also add them to the Felix Release OBR (see
<b>Appendix C</b>).</li>
	<li>update the news section on the website at <a href="http://cwiki.apache.org/confluence/display/FELIX/news"
class="external-link" rel="nofollow">news</a></li>
	<li>update the download page on the website at <a href="http://cwiki.apache.org/confluence/display/FELIX/downloads"
class="external-link" rel="nofollow">downloads</a> to point to the new release.</li>
</ol>


<p>For the last two tasks, it's better to give the mirrors some time to distribute the
uploaded artifacts (one day should be fine). This ensures that once the website (news and
download page) is updated, people can actually download the artifacts.</p>

<h2><a name="ReleaseManagement%28Nexus%29-UpdateJIRA"></a>Update JIRA</h2>

<p>Go to <a href="https://issues.apache.org/jira/secure/project/ViewProject.jspa?pid=12310100"
class="external-link" rel="nofollow">Admin</a> section on the FELIX JIRA and mark
the Y.Z version as released - create version Y.Z+1, if that hasn't already been done.</p>

<h2><a name="ReleaseManagement%28Nexus%29-CreateanAnnouncement"></a>Create
an Announcement</h2>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
To: <span class="code-quote">"Felix Users List"</span> &lt;users@felix.apache.org&gt;
Subject: [ANN] Felix XXX version Y.Z Released

The Felix team is pleased to announce the release of Felix XXX version Y.Z

&lt;&lt;insert <span class="code-object">short</span> description of the
sub-project&gt;&gt;

  http:<span class="code-comment">//felix.apache.org/site/apache-felix-XXX.html
</span>
This release is available from http:<span class="code-comment">//felix.apache.org/site/downloads.cgi
and Maven:
</span>
  &lt;dependency&gt;
    &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
    &lt;artifactId&gt;org.apache.felix.XXX&lt;/artifactId&gt;
    &lt;version&gt;Y.Z&lt;/version&gt;
  &lt;/dependency&gt;

Release Notes:

&lt;&lt;insert release notes in text format from JIRA&gt;&gt;

Enjoy!

-The Felix team
</pre>
</div></div>

<p>Remember to forward this announcement to <tt>users@felix.apache.org</tt>
- try not to cross-post (CC:&#41; announcements to both user and dev lists.</p>

<p><em>Remind Richard about this release when he writes the next board report
<img class="emoticon" src="/confluence/images/icons/emoticons/wink.gif" height="20" width="20"
align="absmiddle" alt="" border="0"/></em></p>

<h2><a name="ReleaseManagement%28Nexus%29-AppendixA%3Acreateandaddyourkeyto"></a>Appendix
A: create and add your key to <a href="http://www.apache.org/dist/felix/KEYS" class="external-link"
rel="nofollow">http://www.apache.org/dist/felix/KEYS</a></h2>

<p>If you are using a *nix system with a working OpenSSH, GnuPG, and bash you can create
and add your own key with the following command:</p>
<ol>
	<li><em>Create a public/private pair key</em>:
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
gpg --gen-key
</pre>
</div></div>
<p>  When gpg asks for e-mail linked the key you  <b>MUST USE</b> the &lt;committer&gt;@apache.org
one<br/>
  When gpg asks for comment linked the key you <em>SHOULD USE</em> "CODE SIGNING
KEY"</p></li>
	<li><em>Add the key to</em> <a href="http://www.apache.org/dist/felix/KEYS:"
class="external-link" rel="nofollow">http://www.apache.org/dist/felix/KEYS:</a> type
the following command replacing the word e-mail with your Apache's one (&lt;committer&gt;@apache.org).
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
(gpg --list-sigs e-mail &amp;&amp; gpg --export --armor e-mail) &gt; toadd.key
scp toadd.key people.apache.org:
ssh people.apache.org <span class="code-quote">"cat toadd.key &gt;&gt; /x1/www/www.apache.org/dist/felix/KEYS"</span>
</pre>
</div></div></li>
	<li>You are now <b>DONE</b>, but to see the changes on <a href="http://www.apache.org/dist/felix/KEYS"
class="external-link" rel="nofollow">http://www.apache.org/dist/felix/KEYS</a> you
must wait 2 hours</li>
</ol>


<h2><a name="ReleaseManagement%28Nexus%29-AppendixB%3ApreparingreleasesonMacOSX"></a>Appendix
B: preparing releases on Mac OS X</h2>

<p>When running the <tt>mvn release:prepare</tt> command on Mac OS X, you
might see the following error:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">[INFO] Executing: svn --non-interactive commit --file /tmp/maven-scm-802409492.commit
--targets /tmp/maven-scm-18804-targets
[INFO] Working directory: /homedir/dev/felix/dependencymanager
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to commit files
Provider message:
The svn command failed.
Command output:
svn: Commit failed (details follow):
svn: MKACTIVITY of '/repos/asf/!svn/act/4f11ad5d-9161-0410-b4dd-cb727141ea8c': authorization
failed (https:<span class="code-comment">//svn.apache.org)</span></pre>
</div></div>

<p>This is due to a bug in Subversion on the Mac, as described by Brett Porter in his
<a href="http://blogs.exist.com/bporter/2008/02/25/working-around-non-interactive-problems-in-leopards-subversion/"
class="external-link" rel="nofollow">blog</a>. He proposes putting an "svn" script
at the head of your path to fix the issue.</p>

<h2><a name="ReleaseManagement%28Nexus%29-AppendixC%3AdeployingbundlestotheFelixOBR"></a>Appendix
C: deploying bundles to the Felix OBR</h2>

<p>If you're releasing bundles, you can also add them to the Felix Release OBR. To do
this, execute the following command:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
mvn clean install \
    org.apache.felix:maven-bundle-plugin:deploy \
    -DprefixUrl=http:<span class="code-comment">//repo1.maven.org/maven2 \
</span>    -DremoteOBR=releases.xml \
    -DaltDeploymentRepository=apache.website::<span class="code-keyword">default</span>::scp:<span
class="code-comment">//people.apache.org/www/felix.apache.org/obr</span>
</pre>
</div></div>
<p>The <a href="http://felix.apache.org/obr/releases.xml" class="external-link" rel="nofollow">http://felix.apache.org/obr/releases.xml</a>
page is automatically updated during the web site synchronization.<br/>
<b>Note</b>: the project building the bundle must use the <a href="/confluence/display/FELIX/Apache+Felix+Maven+Bundle+Plugin+%28BND%29"
title="Apache Felix Maven Bundle Plugin (BND)">maven-bundle-plugin</a> and use a
version superior or equal to 1.4.2.<br/>
<b>Note</b>: with Maven 3, you must add an extension to your <tt>&lt;build&gt;</tt>
providing the SCP/SSH protocol:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
&lt;build&gt;
...
  &lt;extensions&gt;
   &lt;extension&gt;
     &lt;groupId&gt;org.apache.maven.wagon&lt;/groupId&gt;
     &lt;artifactId&gt;wagon-ssh&lt;/artifactId&gt;
     &lt;version&gt;1.0-beta-6&lt;/version&gt;
   &lt;/extension&gt;
   &lt;/extensions&gt;  
&lt;/build&gt;
</pre>
</div></div>
    </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/FELIX/Release+Management+%28Nexus%29">View
Online</a>
        |
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=115457&revisedVersion=21&originalVersion=20">View
Changes</a>
                |
        <a href="https://cwiki.apache.org/confluence/display/FELIX/Release+Management+%28Nexus%29?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message