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

mvn -version

mvn clirr:check

[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

src/site/apt/download.apt 
src/site/apt/index.apt 

mvn javadoc:aggregate

mvn docbkx:generate-pdf docbkx:generate-html

mvn package assembly:assembly antrun:run

mvn deploy

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.

svn -u st

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

TODO - can this be done using the versions plugin?

pom.xml

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

svn diff

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

mvn install

mvn javadoc:aggregate

mvn docbkx:generate-pdf docbkx:generate-html

mvn package assembly:assembly antrun:run

All official ASF release artifacts MUST be signed.

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

# 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`
}

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.

Release vote

[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

[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

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

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 

chmod -R g+w *

pom.xml

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

Update HttpCore module site

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

Update HttpComponents project site

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

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

mvn site:site --non-recursive

mvn site:deploy --non-recursive

Announce release

[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

HttpComponentsCoreReleaseProcess (last edited 2013-03-24 10:19:40 by OlegKalnichevski)