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
- 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 site site:stage -Dmaven.clover.licenseLocation=<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: 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 Remark: stagingDirectory MUST be an absolute path Remark: due to limitations of the docbkx plugin the tutorial will not be copied to the staging directory
- Package the content of the staging directory
- Generate release javadocs
mvn javadoc:javadoc
- Generate tutorial
mvn docbkx:generate-pdf docbkx:generate-html
- Generate release packages
mvn package assembly:assembly antrun:run
- Use this script to sign release packages 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`
}- 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
- 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
- Generate tutorial
mvn docbkx:generate-pdf docbkx:generate-html
- Build release packages
mvn package assembly:assembly antrun:run
- 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
- Build and deploy the site
mvn clean site 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,
[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: blocking I/O model based on the classic Java I/O and 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