HttpComponents Core Release Process
Release preparation
Make sure there are no open Jira issues targeted for this release
Review RELEASE_NOTES.txt and make sure all important issues closed since the previous release are included in the release notes
Generate pre-release JARs by running
mvn package
Download the latest jardiff-x.x-uber.jar (version 0.2 as of writing)
Run the following command for all components that have been previously released
java -jar jardiff-0.2-uber.jar -f <previous-release>.jar -t <prerelease>-SNAPSHOT.jar -o text
Collect output (by redirecting it to a file) and add it to the 'API changes' of the release notes
HttpCore API changes (generated by JarDiff 0.2) -------------------------------------- ... HttpCore NIO API changes (generated by JarDiff 0.2) -------------------------------------- ...
Remove 'API changes' section of the previous release to keep release notes file short
Write an opening statement for the release highlighting the most changes, bug fixed and improvements
Review the following pages
src/site/apt/download.apt src/site/apt/index.apt
and make adjustments that are necessary
Deploy the site to a staging directory and review the resultant site before committing the changes
mvn clean clover:instrument clover:clover site:stage -Dclover.license=<path>/clover.license -DstagingDirectory=<path>/stage
You may need to re-build the site several times until fully satisfied with its content and appearance
Remark: stagingDirectory MUST be an absolute path
Package the content of the staging directory
Generate release packages
mvn package assembly:assembly
Rename pre-release packages packages
httpcomponents-core-<version>-SNAPSHOT-bin-win.zip -> httpcomponents-core-<version>-SNAPSHOT-bin.zip httpcomponents-core-<version>-SNAPSHOT-src-win.zip -> httpcomponents-core-<version>-SNAPSHOT-src.zip httpcomponents-core-<version>-SNAPSHOT-bin-unix.tar.gz -> httpcomponents-core-<version>-SNAPSHOT-bin.tar.gz httpcomponents-core-<version>-SNAPSHOT-src-unix.tar.gz -> httpcomponents-core-<version>-SNAPSHOT-src.tar.gz
Use this script to sign release packages
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`
}
Upload the content of the staging directory, RELEASE_NOTES.txt, release packages and corresponding MD5 and signature files to a publicly accessible web space such as people.apache.org
Deploy pre-release snapshots to the Apache Maven snapshot repository
mvn deploy -P release
The 'release' profile parameter will cause release artifacts to be signed prior to deployment to the remote repository
The command assumes presence of a functional gpg setup on the local system
Invite people on the
dev@hc.apache.org list to review the site, release notes, release packages and report problems
Building release packages
Make sure you have the latest SVN content
svn up
Just in case do
mvn release:clean
Prepare release by updating the POMs and creating a release tag
mvn -Dusername=<username> -Dpassword=<password> release:prepare Where <username> is your apache account name <password> is your apache SVN password
Follow instructions displayed at the console
What is the release version for "HttpComponents Core"? (org.apache.httpcomponents:httpcomponents-core) 4.0-alpha5: What is the release version for "HttpCore (base module)"? (org.apache.httpcomponents:httpcore) 4.0-alpha5: What is the release version for "HttpCore (NIO extensions module)"? (org.apache.httpcomponents:httpcore-nio) 4.0-alpha5:
Select default unless this release transitions the development process from one phase (such as ALPHA) to the next one (for instance BETA)
What is SCM release tag or label for "HttpComponents Core"? (org.apache.httpcomponents:httpcomponents-core) httpcomponents-core-4.0-alpha5
DO NOT select the default value. Enter the release version such as 4.0-alpha5
What is the new development version for "HttpComponents Core"? (org.apache.httpcomponents:httpcomponents-core) 4.0-alpha6-SNAPSHOT What is the new development version for "HttpCore (base module)"? (org.apache.httpcomponents:httpcore) 4.0-alpha6-SNAPSHOT What is the new development version for "HttpCore (NIO extensions module)"? (org.apache.httpcomponents:httpcore-nio) 4.0-alpha6-SNAPSHOT
Select default
If for whatever reason release:prepare fails before making another attempt make sure you do
mvn release:clean svn -R revert .
You may want to clear shell history at this point to make sure it does not contain your SVN password in clear text
history -c
Make a clean checkout off the release tag
svn co http://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/<version>/ httpcore-<version>
Install release artifacts to the local Maven repository
mvn install
Generate release javadocs
mvn javadoc:javadoc
Build release packages
mvn package assembly:assembly
Rename packages
httpcomponents-core-<version>-bin-unix.tar.gz -> httpcomponents-core-<version>-bin.tar.gz httpcomponents-core-<version>-bin-win.zip -> httpcomponents-core-<version>-bin.zip httpcomponents-core-<version>-src-unix.tar.gz -> httpcomponents-core-<version>-src.tar.gz httpcomponents-core-<version>-src-win.zip -> httpcomponents-core-<version>-src.zip
Sign packages using the helper script (see previous section)
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
next 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]
--------------------------------------------------------------------------
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)
If the vote fails, address concerns / problems stated as reasons for negative votes and re-vote
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
Review your local Maven settings (usually located in ~/.m2/settings.xml)
It will make your life _infinitely_ easier if you have a functional GPG system installed and are able to login into people.apache.org using your private key. If you are not comfortable with the idea of having your phase stored in clear text on your disk either remove it from settings.xml once you are done with the release deployment or consider storing settings.xml on an encrypted partition.
...
<servers>
<server>
<id>apache.website</id>
<username>${your apache id}</username>
<passphrase>${your GPG pass phrase}</passphrase>
<directoryPermissions>775</directoryPermissions>
<filePermissions>644</filePermissions>
</server>
<server>
<id>apache.releases</id>
<username>${your apache id}</username>
<passphrase>${your GPG pass phrase}</passphrase>
<directoryPermissions>775</directoryPermissions>
<filePermissions>644</filePermissions>
</server>
<server>
<id>apache.snapshots</id>
<username>${your apache id}</username>
<passphrase>${your GPG pass phrase}</passphrase>
<directoryPermissions>775</directoryPermissions>
<filePermissions>644</filePermissions>
</server>
</servers>
...
Deploy release artifacts to the Maven2 repository
mvn deploy -P release
The 'release' profile parameter will cause release artifacts to be signed prior to deployment to the remote repository
The command assumes presence of a functional gpg setup on the local system
Make sure to enter your GPG Passphrase when prompted for while deploying the artifacts. All official ASF release artifacts MUST be signed
[INFO] [gpg:sign {execution: sign-artifacts}]
GPG Passphrase:****************
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
Update HttpCore module site
Regenerate clover reports
mvn clean clover:instrument clover:clover
Build and deploy the site
mvn clover:instrument clover:clover site:site site:deploy -Dclover.license=<path>/clover.license
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
src/site/apt/news.apt src/site/apt/status.apt src/site/apt/download.apt
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
If you want to generate the complete project site with all individual project modules execute
mvn site:site site:stage -DstagingDirectory=<absolute path to a staging directory>
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,
[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 -
The HttpCore components implement the most fundamental aspects of the
HTTP protocol. They are nonetheless sufficient to develop basic client
side and server side HTTP services with a minimal footprint and no
external dependencies. HttpCore NIO extensions can be used to build
asynchronous HTTP services based on non-blocking I/O model capable of
handling a great number of simultaneous connections with just a few I/O
threads.
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