Building HttpComponents Parent
==============================

(1) Requisites
--------------

JDK 1.7 or later is required in order to compile and run HttpComponents Parent.

HttpComponents Parent utilizes Apache Maven as a distribution management and packaging tool.
Version 3.0.5 or later is required.
Version 3.5.0 is recommended (this is what I am running.)

Maven installation and configuration instructions can be found here:

http://maven.apache.org/run-maven/index.html

You will also need Apache Subversion and Git:

- Apache Subversion: https://subversion.apache.org/
- Git: https://git-scm.com/

These instructions were last used with:

Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T13:39:06-06:00)
Maven home: C:\Java\apache-maven-3.5.0\bin\..
Java version: 1.7.0_80, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_80\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows"

svn, version 1.9.7-SlikSvn (SlikSvn/1.9.7)
   compiled Aug 13 2017, 14:10:40 on x86_64-microsoft-windows6.2.9200

git version 2.14.1.windows.1

gpg (GnuPG) 2.0.30 (Gpg4win 2.3.4)
libgcrypt 1.7.8

(2) Check local build
---------------------

Run the following to make sure all is well:

mvn clean package

(3) Consider plugin updates
---------------------------

Run the following to see which plugins you could update:

mvn versions:display-plugin-updates -U

(4) Test deploying the SNAPSHOT
-------------------------------

Try deploying the current SNAPSHOT as a sanity check:

mvn clean deploy

(5) Creating a release candidate
--------------------------------

Check the license headers:

mvn apache-rat:check

Check that we have a LICENSE.txt file.

Check that we have a NOTICE.txt file and that it has the proper copyright end year, which should be the current year.

Make sure the POM shows the correct version and that it is not a SNAPSHOT.

Tag the release candidate:

git commit -am "Update version numbers for release 9"
git tag -s 9-RC1 -m "Tag release 9-RC1"
git push origin 9-RC1

Dry-run the release:

mvn release:prepare -DdryRun=true

Run the release:

mvn release:prepare

Deploy:

mvn deploy -Prelease

Login to https://repository.apache.org and close the RC. 
Keep note of the repository location, for example: https://repository.apache.org/content/repositories/orgapachehttpcomponents-1065

Publish to dist folder:

Check out the dist folder for this component:

set VERSION=9
set RC_VERSION=9-RC1
set REPO_PATH=%USERPROFILE%\.m2\repository\org\apache\httpcomponents\httpcomponents-parent\%VERSION%
svn checkout https://dist.apache.org/repos/dist/dev/httpcomponents/
cd httpcomponents\httpcomponents-parent
mkdir %RC_VERSION%
cd %RC_VERSION%
set RC_DIR=%cd%
copy %REPO_PATH%\httpcomponents-parent-%VERSION%.pom .
copy %REPO_PATH%\httpcomponents-parent-%VERSION%.pom.asc .
ALSO: Copy SHA1 and MD5 files from https://repository.apache.org/content/repositories/orgapachehttpcomponents-????
svn commit -m "Apache HttpComponents Parent %RC_VERSION%" 

(6) Call for a VOTE
-------------------

Email dev@hc.apache.org, for example:

Subject: [VOTE] Release HttpComponents Parent version 9 based on RC1

Please vote to release HttpComponents Parent version 9 based on RC1.

The changes since version 8 are:

- Removed obsolete notice plugin
- Removed obsolete svn-buildnumber plugin and profiles
- Removed obsolete clover plugin and profile
- build-helper-maven-plugin 1.12 -> 3.0.0
- maven-gpg-plugin 1.4 -> 1.6
- maven-assembly-plugin 3.0.0 -> 3.1.0
- maven-compiler-plugin 3.6.0 -> 3.6.1
- maven-compiler-plugin 3.6.1 -> 3.6.2
- maven-compiler-plugin 3.6.2 -> 3.7.0
- maven-surefire-plugin 2.19.1 -> 2.20
- maven-resources-plugin 3.0.1 -> 3.0.2
- maven-bundle-plugin 3.2.0 -> 3.3.0
- jacaoco-maven-plugin 0.7.7.201606060606 -> 0.7.9
- Renamed artifactId to httpcomponents-parent
- Added use-toolchains profile; activated if ~/.m2/toolchains.xml exists
- maven-javadoc-plugin 2.10.4 -> 3.0.0-M1 (allows building on Java 9.)
- animal-sniffer-maven-plugin 1.15 -> 1.16

The vote is open for at least 72 hours.
Anyone may vote, but 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.

Maven artefacts:
https://repository.apache.org/content/repositories/orgapachehttpcomponents-????/

Git tag:
https://git-wip-us.apache.org/repos/asf?p=httpcomponents-parent.git;a=commit;h=215ae373d047e2fa886642de24de9a905dbbe7cb

Dev dist:
https://dist.apache.org/repos/dist/dev/httpcomponents/httpcomponents-parent/9-RC1/

--------------------------------------------------------------------------
 Vote:  HttpComponents parent pom 5 release based on RC1
 [ ] +1 Release the packages as HttpComponents parent pom 5
 [ ] -1 I am against releasing the packages (must include a reason).

(7) Gather the VOTE result
--------------------------

Count and send to dev@hc.apache.org:

Subject: [VOTE][RESULT] Release HttpComponents Parent version 9 based on RC1

(8) Publish
-----------

Publish to https://dist.apache.org/repos/dist/release/httpcomponents/httpcomponents-parent/

set VERSION=9
set RC_VERSION=9-RC1
set REPO_PATH=%USERPROFILE%\.m2\repository\org\apache\httpcomponents\httpcomponents-parent\%VERSION%
svn checkout https://dist.apache.org/repos/dist/release/httpcomponents/
cd httpcomponents\httpcomponents-parent
mkdir %VERSION%
cd %VERSION%
copy %REPO_PATH%\httpcomponents-parent-%VERSION%.pom .
copy %REPO_PATH%\httpcomponents-parent-%VERSION%.pom.sha1 .
svn commit -m "Apache HttpComponents Parent %VERSION%" 

Login to https://repository.apache.org and delete any extraneous checksum files: BE CAREFUL WHICH FILES YOU DELETE. 
Then release the RC.

(9) Clean up
------------

Remove the RC form https://dist.apache.org/repos/dist/dev/httpcomponents/

(10) Send Announcement Email
----------------------------

Since this is an internal component, announcing the release to dev@hc.apache.org should be enough.

