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

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

mvn javadoc:aggregate

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

mvn docbkx:generate-pdf docbkx:generate-html

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

Release tools

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

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.

Make a copy of gradle.properties.template:

Linux

cp gradle.properties.template gradle.properties

Windows

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.

Linux

MAVEN_HOME=opt/maven
signing.secretKeyRingFile=$HOME/.gnupg/secring.gpg

Windows

MAVEN_HOME=C:\\Java\\apache-maven-3.0.5
signing.secretKeyRingFile=C:/Users/ggregory/AppData/Roaming/gnupg/secring.gpg

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

https://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/
https://svn.apache.org/repos/asf/httpcomponents/httpcore/branches/4.3.x/

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.

gradlew -q tasks

Building release artifacts

gradlew -q checkoutSnapshot

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

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
/home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/repos-asf-httpcomponents-httpcore-trunk
M       httpcore-osgi/pom.xml
M       httpcore-nio/pom.xml
M       httpcore/pom.xml
M       pom.xml
M       httpcore-ab/pom.xml

gradlew -q commitRC

gradlew -q checkoutRC

gradlew -q buildRC

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

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.

gradlew -q locateRC

Please deploy HttpCore 4.3.1 based on RC1 from the following directory using 'mvn deploy -Prelease'
/home/oleg/src/apache.org/httpcomponents/project-release-tools/build/repos-asf-httpcomponents-httpcore-tags-4.3.1-RC1

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

https://repository.apache.org/index.html#welcome

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

gradlew -q checkoutDistStage

gradlew -q assemble

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

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/
/home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/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

gradlew -q commitDist

Release vote

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.

Packages:
https://dist.apache.org/repos/dist/dev/httpcomponents/httpcore-4.3.1-RC1
revision 3948

Release notes:
https://dist.apache.org/repos/dist/dev/httpcomponents/httpcore-4.3.1-RC1/RELEASE_NOTES-4.3.x.txt

Maven artefacts:
[link]

SVN tag:
https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1-RC1
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

If the vote fails

gradlew -q cancelRC

https://repository.apache.org/index.html#welcome

environment

gradlew -q updateSnapshot

If the vote succeeds

http://mail-archives.apache.org/mod_mbox/hc-dev/

[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

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

https://repository.apache.org/index.html#welcome

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

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
/home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/repos-asf-httpcomponents-httpcore-trunk
M       httpcore-osgi/pom.xml
M       httpcore-nio/pom.xml
M       httpcore/pom.xml
M       pom.xml
M       httpcore-ab/pom.xml

gradlew -q commitNextVersion

Update project website site

Update website source

Project website source can be found here

http://svn.apache.org/repos/asf/httpcomponents/project-website/trunk/

src/site/apt/news.apt
src/site/apt/status.apt
src/site/resources/css/hc-maven.css
src/site/xdoc/downloads.xml

Prepare local stage

gradlew -q checkoutFullWebsite

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

gradlew -q checkoutSiteStage

gradlew -q siteStage

gradlew -q previewSiteStage

Local changes for project website
/home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/repos-asf-httpcomponents-site
...

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

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 -
<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.

Post-release JIRA admin tasks

HttpComponentsReleaseProcess (last edited 2014-02-26 17:18:16 by 98)