Differences between revisions 29 and 30
Revision 29 as of 2014-02-26 17:13:20
Size: 18002
Editor: 98
Comment: Edit "Announce release".
Revision 30 as of 2014-02-26 17:18:16
Size: 18080
Editor: 98
Comment: Edit "Post-release JIRA admin tasks"
Deletions are marked like this. Additions are marked like this.
Line 520: Line 520:

 * Delete old versions from https://www.us.apache.org/dist/httpcomponents/

HttpComponents 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
  • 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 Enums

[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
  • Generate release javadocs

mvn javadoc:aggregate

Make sure the command completes successfully and there are no warnings.

  • Generate tutorial if included in this release. Presently only HttpCore and HttpClient have tutorials.

mvn docbkx:generate-pdf docbkx:generate-html

Make sure the command completes successfully and there are no warnings.

Release tools

  • Make a dedicated local copy of HttpCompoments release tools by checking out project source from the following location


svn co https://svn.apache.org/repos/asf/httpcomponents/project-release-tools/trunk release-httpcore-4.3.1

Given that a release can span across several days or even weeks it is recommended to have a dedicated copy of release tools per ongoing release process.

Release tools are basically a collection of Gradle scripts that simplify and facilitate time consuming, often tedious and therefore error-prone tasks.

  • Prepare gradle.properties

Make a copy of gradle.properties.template:


cp gradle.properties.template gradle.properties


copy gradle.properties.template gradle.properties

Edit gradle.properties file and update 'MAVEN_HOME', 'HC_DEV' and 'signing.*' properties

'MAVEN_HOME' must refer to the local Maven installation. You must set 'MAVEN_HOME' even if you have a 'MAVEN_HOME' environment variable.





'HC_DEV' must refer to the trunk or a stable branch of the project being releases, for example:


Important: Check that you are using https and not http.

'signing.keyId' must contain id of the personal GPG key to be used for signing release artifacts.

'signing.secretKeyRingFile' must refer to the personal GPG ring file.

'signing.password' may be left empty. In this case the script will be prompting for a pass phrase every time access to the key is needed.

  • Make sure that the scripts are valid by listing available tasks

gradlew -q tasks

Building release artifacts

  • Check out the latest snapshot from the release branch

gradlew -q checkoutSnapshot
  • Prepare release tag

gradlew -q prepareRelease

Manually enter release version or hit enter to select the default based on pom.xml content (current version sans -SNAPSHOT qualifier)

The task will print out the location of the release tag. Please double-check its validity.

Release tag to be created: https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1
  • Prepare RC tag

gradlew -q prepareRC

Manually enter RC qualifier or hit enter to select the default one (RC1)

The task will print out the location of the RC tag. Please double-check its validity.

RC tag to be created: https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1-RC1

Optionally run preview task to see what changes have been made to the current snapshot. The RC tag will be created by copying those changes to the tag location

gradlew -q previewRC

Local changes for https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1-RC1
M       httpcore-osgi/pom.xml
M       httpcore-nio/pom.xml
M       httpcore/pom.xml
M       pom.xml
M       httpcore-ab/pom.xml
  • Create RC tag

gradlew -q commitRC
  • Check out RC from the RC tag

gradlew -q checkoutRC
  • Build RC and install it to the local Maven repository

gradlew -q buildRC

This task will execute 'maven install site' as an external command. Make sure the task terminates successfully without any error.

  • If a gpg agent is present, deploy RC to the staging artifact repositor with:

gradlew -q deployRC

This task will execute 'maven -Prelease deploy' as an external command. Make sure the task terminates successfully without any error.

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 and of a gpg agent on the local system.

  • If a gpg agent is not present, deploy RC to the staging artifact repositor with Maven manually:

gradlew -q locateRC

Please deploy HttpCore 4.3.1 based on RC1 from the following directory using 'mvn deploy -Prelease'

Change to the RC location and execute 'mvn deploy -Prelease' passing additional parameters, if necessary, for example:

cd /home/oleg/src/apache.org/httpcomponents/project-release-tools/build/repos-asf-httpcomponents-httpcore-tags-4.3.1-RC1
mvn deploy -Prelease -Dgpg.passphrase=MySecret

Login to the ASF Nexus repository manager at the following location


  • Select 'Staging Repositories'
  • Mark release artifacts as 'Closed' in the Nexus artifact 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.

Important! 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).

  • Check out staging dist repository

gradlew -q checkoutDistStage
  • Assemble release dist packages

gradlew -q assemble

The build script will prompt for key pass-phrase if the 'signing.password' parameter has been left empty in gradle.properties.

  • Prepare dist packages for import into the staging repository

gradlew -q prepareDist

Optionally run preview task to see what files have been scheduled for import into the staging repository.

gradlew -q previewDist

Local changes for release dist https://dist.apache.org/repos/dist/dev/httpcomponents/
A       httpcore-4.3.1-RC1
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-osgi-bin.zip.md5
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-bin.zip
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-osgi-bin.tar.gz.md5
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-osgi-bin.zip
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-src.zip
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-bin.tar.gz
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-bin.tar.gz.md5
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-src.tar.gz.asc
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-bin.tar.gz.asc
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-osgi-bin.zip.asc
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-osgi-bin.tar.gz.asc
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-bin.zip.md5
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-src.tar.gz.md5
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-src.tar.gz
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-src.zip.md5
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-osgi-bin.tar.gz
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-bin.zip.asc
A       httpcore-4.3.1-RC1/RELEASE_NOTES-4.3.x.txt
A       httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-src.zip.asc
  • Commit dist packages to the staging repository

gradlew -q commitDist

Release vote

  • Prepare release vote content

gradlew -q prepareVote

This will generate output like the following:

----------------8<-------------[ cut here ]------------------
[VOTE] Release HttpComponents Core 4.3.1 based on RC1

Please vote on releasing these packages as HttpComponents Core 4.3.1.
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.

revision 3948

Release notes:

Maven artefacts:

SVN tag:
revision 1551921

Vote: HttpComponents Core 4.3.1 release
[ ] +1 Release the packages as HttpComponents Core 4.3.1.
[ ] -1 I am against releasing the packages (must include a reason).
----------------8<-------------[ cut here ]------------------

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

  • Cancel current RC

gradlew -q cancelRC
  • This command will invalidate local RC checkout and increment RC count. It will _not_ remove any staged artifacts or packages.
  • Login to Nexus and "Delete" the staged uploads


  • Address concerns / problems stated as reasons for negative votes in your normal development


  • Update the local snapshot from the release branch to pull the latest changes

gradlew -q updateSnapshot
  • Restart the release process from the 'Prepare RC tag' section.

If the vote succeeds

  • Find the original original voting thread at


  • Prepare vote result message using the following template

[VOTE][RESULT] HttpComponents Core 4.3.1 release

The vote to release HttpComponents Core 4.3.1 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:
[insert link here]

gradlew -q promoteRC

Promoting HttpCore 4.3.1 RC1 to official release
Copying https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1-RC1 to https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1

Release deployment

  • Deploy release artifacts

Login to the Nexus repository, and "Release" the staging directory.


This will cause the artifacts to be released to the Central Maven repo.

  • Deploy dist packages

gradlew -q promoteDist

Alternatively if some customization of the process is required one may generate a svnmucc input file instead

gradlew -q svnmucc

Prepare next development cycle

* Update project metadata in pom.xml files

gradlew -q prepareNextVersion

Manually enter next snapshot version or hit enter to select the default based on pom.xml content

Optionally run preview task to see what changes have been made to the current snapshot.

gradlew -q previewNextVersion

Next development version: 4.3.2-SNAPSHOT
M       httpcore-osgi/pom.xml
M       httpcore-nio/pom.xml
M       httpcore/pom.xml
M       pom.xml
M       httpcore-ab/pom.xml
  • Commit updated project metadata

gradlew -q commitNextVersion

Update project website site

Update website source

Project website source can be found here


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


Prepare local stage

  • Checkout the latest snapshot of the main website source and the released project

gradlew -q checkoutFullWebsite
  • Render website content

gradlew -q generateFullWebSite

You may get an error here if the parent POM is not present because the project uses a SNAPSHOT version. You can checkout the project trunk (for example 8-SNAPSHOT) at http://svn.apache.org/repos/asf/httpcomponents/project/trunk/ and install it locally by running 'mvn install -N'.

You can at any time pick up the latest changes from the repository by running

gradlew -q updateMainWebSite generateFullWebSite
  • Prepare project site stage

gradlew -q checkoutSiteStage
  • Stage updated website content

gradlew -q siteStage
  • Preview staged website content

gradlew -q previewSiteStage

Local changes for project website

You can now use a browser to review the content located in the staging directory.

  • Commit staged website content

Once satisfied with the changes, commit local changes to the repository.

gradlew -q commitSiteStage

Enter commit message when promted

oleg@ubuntu:~/src/apache.org/httpcomponents/release-httpcore-4.3.1$ ./gradlew -q commitSiteStage
Please enter commit message:

Announce release

[ANNOUNCEMENT] HttpComponents Core 4.3.1 Released

The Apache HttpComponents project is pleased to announce 4.3.1 GA release of HttpComponents Core.

[release specific content]

Download -
Release notes -
HttpComponents site -

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.

Post-release JIRA admin tasks