Differences between revisions 30 and 31
Revision 30 as of 2013-03-24 10:19:40
Size: 12405
Comment:
Revision 31 as of 2013-12-27 20:27:43
Size: 93
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
##language:en
#pragma section-numbers off

= HttpComponents Core Release Process =

== Preparations for using Nexus and uploading files ==

See MavenConfiguration for details on how to set up Maven.
This only has to be done once.

== Release preparation ==

 * Make sure there are no open Jira issues targeted for this release

 https://issues.apache.org/jira/browse/HTTPCORE

 * Review RELEASE_NOTES.txt and make sure all important issues closed since the previous release are included in the release notes

 * Write an opening statement for the release highlighting the most changes, bug fixed and improvements

 * Make sure you are using JDK 1.5 and Maven 3.0.3 or newer to build the packages

{{{
mvn -version
}}}

 * If this is a non-ALPHA release, verify binary compatibility with the previous stable baseline version. Baseline version is the latest stable xx.yy.00 release

{{{
mvn clirr:check
}}}

  Please note Clirr currently can't handle Java 5 constructs very well and it can generate bogus errors about incompatibility of {{{Enum}}}s

{{{
[INFO] [clirr:check {execution: default-cli}]
[INFO] Comparing to version: 4.0
[ERROR] org.apache.http.impl.nio.reactor.SSLMode: Method 'public org.apache.http.impl.nio.reactor.SSLMode[] values()' is now final
[ERROR] org.apache.http.nio.reactor.IOReactorStatus: Method 'public org.apache.http.nio.reactor.IOReactorStatus[] values()' is now final
}}}

 * Review the following pages

{{{
src/site/apt/download.apt
src/site/apt/index.apt
}}}

 and make adjustments that are necessary

 * Generate release javadocs

{{{
mvn javadoc:aggregate
}}}

 * Generate tutorial

{{{
mvn docbkx:generate-pdf docbkx:generate-html
}}}

 * Generate release packages

{{{
mvn package assembly:assembly antrun:run
}}}

 * Deploy pre-release snapshots to the Apache Nexus snapshot repository.
   The snapshots will appear at https://repository.apache.org/content/repositories/snapshots/org/apache/httpcomponents/
   (This is also where the Hudson snapshots appear)

{{{
mvn deploy
}}}

 The command assumes presence of a functional gpg setup on the local system

 * Review site, release notes, release packages and release artefacts

== Building release packages ==

Rather than making the necessary changes in the current SVN tree, and then creating the tag from that,
we create a clean workspace from the current tree.
The version and SCM changes are applied to the new workspace, which is then used to create the tag.
This approach means that the current tree is never in a transitional state.
Also, ongoing changes to the current tree cannot affect the new workspace.

 * Make sure all the workspace is up to date

{{{
svn -u st
}}}

 * Checkout the current SVN tree (usually trunk) into a fresh directory

{{{
svn co https://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk httpcore-4.x.y-RC1
}}}

 * Manually update the top-level pom.xml of the project: put the release version (e.g. 4.x.y) as the artifact version and update the SCM details to refer to the final release tag (without the -RC1 suffix, as the tag will be renamed later).

''TODO - can this be done using the versions plugin?''

{{{
pom.xml
}}}
  
 * Manually update pom.xml of all modules in the project to refer to the updated parent version

{{{
httpcore/pom.xml
httpcore-nio/pom.xml
httpcore-osgi/pom.xml
httpcore-ab/pom.xml
}}}

 * Double-check that the changes to the workspace look OK.
 The diff command should only show changes to the version and scm tags.

{{{
svn diff
}}}

 * Commit the changes, creating the release tag in the process.
 Note: this preserves history, and the commit message will show just the version and SCM changes as above

{{{
svn cp . https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.x.y-RC1
}}}

 '''IMPORTANT''' the workspace is still attached to trunk, so do not perform a checkin.

 * Install release artifacts to the local Maven repository

{{{
mvn install
}}}

 * Generate release javadocs

{{{
mvn javadoc:aggregate
}}}

 * Generate tutorial

{{{
mvn docbkx:generate-pdf docbkx:generate-html
}}}

 * Build release packages

{{{
mvn package assembly:assembly antrun:run
}}}

 * Use this script to sign release packages

All official ASF release artifacts MUST be signed.
 
The script assumes presence of a functional gpg setup on the local system

{{{
#!/usr/bin/perl -w
# signs and checksums all files given as command line args

foreach my $file (@ARGV) {
    print $file."\n";

    my $md5 = `md5sum $file`;
    `echo "$md5" > $file.md5`;
    $md5 =~ /(\w+)\s+/;
    $md5 = $1;
    # verify md5
    my $testMd5 = `openssl md5 < $file`;
    chomp($testMd5);
    if ($testMd5 ne $md5) { die 'md5 does not equal'; }

    `gpg --armor --output $file.asc --detach-sig $file`;
    # verify signature
    `gpg --verify $file.asc $file`
}
}}}

 * Deploy the Maven artefacts to the Nexus staging repository

{{{
mvn deploy -P release
}}}

The 'release' profile parameter will cause release artifacts to be signed prior to deployment to Nexus
where will be held in the staging repository until they are promoted or deleted.

The command assumes presence of a functional gpg setup on the local system.

  * Login to Nexus (same login/password as for SVN and people), and navigate to the staging repository
   * Check that the correct files are present (e.g. binary, source, Javadoc), and "Close" the upload directory.
   * This will allow the files to be seen publicly, but the files won't be added to the Central Maven repo yet.
   * You can then delete any unwanted files (such as .asc.md5 and .asc.sha1) (N.B. You cannot delete files until the upload is closed).
   * Check that the files at the public URL look OK.
   * If not, you can delete them all and try again.

  * The public URL, which will look something like https://repository.apache.org/content/repositories/orgapachehttpcomponents-nnn/,
    should be copied into the Release Vote e-mail (see below).

== Release vote ==

 * Upload RELEASE_NOTES.txt, release packages and corresponding MD5 and signature files to a publicly accessible web space such as people.apache.org

 * Call release vote on the dev@hc.apache.org list

{{{
[VOTE] HttpComponents Core ${VERSION} release

Please vote on releasing these packages as HttpComponents Core ${VERSION}. The vote is open for the
at least 72 hours, and only votes from HttpComponents PMC members are binding. The vote passes if at least
three binding +1 votes are cast and there are more +1 than -1 votes.

Packages:
[link]

Release notes:
[link]

Maven artefacts:
[link]

SVN tag:
[link]
--------------------------------------------------------------------------
 Vote: HttpComponents Core ${VERSION} release
 [ ] +1 Release the packages as HttpComponents Core ${VERSION}.
 [ ] -1 I am against releasing the packages (must include a reason).

}}}

== Release vote result ==

 * Tally votes after the voting deadline elapsed (usually 72 hours, but may be extended if not enough votes have been cast)

 * If the vote fails, address concerns / problems stated as reasons for negative votes and re-vote
   * Login to Nexus and "Delete" the staged uploads
   * Delete the local workspace containing the updated poms
   * (Optionally) delete the SVN RC tag (it may be useful to keep this until a bit later)

 * If the vote succeeds, send results to dev@hc.apache.org and private@hc.apache.org

{{{
[VOTE][RESULT] HttpComponents Core ${VERSION} release

The vote to release HttpComponents Core ${VERSION} has passed with the following results

+1 (4 binding votes in total)
aaaa <aaaa -at- apache.org> *
bbbb <bbbb -at- apache.org>
cccc <cccc -at- apache.org> *
dddd <dddd -at- apache.org> *
eeee <eeee -at- apache.org> *

-1 (1 binding vote in total)

ffff <ffff -at- apache.org> *

* binding votes

Original voting thread:
[link]
}}}

== Release deployment ==

 * Rename the SVN tag to remove the RCn suffix:{{{
svn ren https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.x.y-RC1 https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.x.y
}}}

 * Deploy release artifacts to the Maven2 repository

Login to the Nexus repository, and "Promote" the staging directory.
This will cause the artifacts to be released to the Central Maven repo.

 * Deploy release packages

{{{
cd /www/www.apache.org/dist/httpcomponents/httpcore

cp ~/public_html/httpcore-<version>/RELEASE_NOTES.txt .
cp ~/public_html/httpcore-<version>/packages/httpcomponents-core-<version>-src.* source
cp ~/public_html/httpcore-<version>/packages/httpcomponents-core-<version>-bin.* binary
}}}

  Make sure files are group writable

{{{
chmod -R g+w *
}}}

 * This may also be a good occasion to delete old release packages

 * Manually update pom.xml of the project: put the next SNAPSHOT version as the artifact version and update the SCM details to refer to the trunk

{{{
pom.xml
}}}
  
 * Manually update pom.xml of all modules in the project to refer to the updated parent version

{{{
httpcore/pom.xml
httpcore-nio/pom.xml
httpcore-osgi/pom.xml
httpcore-ab/pom.xml
httpcore-benchmark/pom.xml
}}}

 * Commit the changes

== Update HttpCore module site ==

 * Build and deploy the site

{{{
mvn site-deploy -Dmaven.clover.licenseLocation=<path>/clover.license
}}}

 Remark: ASF committers can obtain a copy of Clover2 license donated to the ASF at this location
 https://svn.apache.org/repos/private/committers/donated-licenses/clover

== Update HttpComponents project site ==

 * Make sure you have the project folder checked out and updated (located at https://svn.apache.org/repos/asf/httpcomponents/project)

{{{
svn co https://svn.apache.org/repos/asf/httpcomponents/project project
svn up
}}}

 This folder contains global project data that apples to all !HttpComponents modules. The folder MUST be put to the same root directory
 as other !HttpComponents modules, as the global pom.xml contains relative paths to those module folders

 * Review and update News, Status, Download pages
 * Check that the ApacheCon advert in the css file is for the appropriate date

{{{
src/site/apt/news.apt
src/site/apt/status.apt
src/site/apt/download.apt
src/site/resources/css/hc-maven.css
}}}

 * Generate the site locally and review its content

{{{
mvn site:site --non-recursive
}}}

 You may want to run Maven in the non-recursive mode to skip individual project modules

 * Once happy with the content of the site commit the changes

 * Deploy the site

{{{
mvn site:deploy --non-recursive
}}}

== Announce release ==

 * Send out an announcement to the following lists: announce@apache.org, private@hc.apache.org,
   dev@hc.apache.org, httpclient-users@hc.apache.org

{{{
[ANNOUNCEMENT] HttpComponents HttpCore ${VERSION} Released

The Apache HttpComponents project is pleased to announce the release of
HttpComponents HttpCore ${VERSION}. This version ${release specific content}.

Download -
<http://hc.apache.org/downloads.cgi>
Release notes -
<http://www.apache.org/dist/httpcomponents/httpcore/RELEASE_NOTES.txt>
HttpComponents site -
<http://hc.apache.org/>

About HttpComponents Core -
HttpCore is a set of low level HTTP transport components that can be used to build
custom client and server side HTTP services with a minimal footprint. HttpCore supports
two I/O models: a blocking I/O model based on the classic Java I/O and a non-blocking,
event driven I/O model based on Java NIO. The blocking I/O model may be more appropriate
for data intensive, low latency scenarios, whereas the non-blocking model may be more
appropriate for high latency scenarios where raw data throughput is less important than
the ability to handle thousands of simultaneous HTTP connections in a resource efficient
manner.
}}}

== Post-release JIRA admin tasks ==

 * Goto !HttpComponents Core -> Administer project -> Versions: Manage

 * Mark current version as Released

 * This may also be a good moment to mark old unsupported release versions as Archived
 and to add new release targets
#redirect HttpComponentsReleaseProcess
This page has moved to HttpComponentsReleaseProcess

This page has moved to HttpComponentsReleaseProcess

HttpComponentsCoreReleaseProcess (last edited 2013-12-27 20:27:43 by OlegKalnichevski)