Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Httpcomponents Wiki" 
for change notification.

The following page has been changed by RolandWeber:
http://wiki.apache.org/HttpComponents/HttpComponentsCoreReleaseProcess

The comment on the change is:
moving core release process description

New page:
##language:en
#pragma section-numbers off

= HttpComponents Core Release Process =

== Release preparation ==

 * Make sure there are no open Jira issues targeted for this release

 https://issues.apache.org/jira/browse/HTTPCORE

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

 http://www.osjava.org/jardiff/

 * 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

 * Generate clover reports

{{{  
mvn clean clover:instrument clover:clover
}}}

 * Deploy the site to a staging directory and review the resultant site before 
committing the changes  

{{{  
mvn site:site site:stage -DstagingDirectory=/home/oleg/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 [email protected] 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 [email protected] 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.

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 [email protected] and [EMAIL PROTECTED]

{{{  
[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:****************
}}}

 * Manually copy those artifacts to the Maven1 repository (we'll probably 
discontinue M1 support at some point of 
 time, as this manual process is a MAJOR pain in the rectum)

{{{
ssh <your-apache-id>@people.apache.org
}}}

{{{
cd 
/www/people.apache.org/repo/m1-ibiblio-rsync-repository/httpcomponents-httpcore/jars

export 
HC_M2_HOME=/www/people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/httpcomponents
cp ${HC_M2_HOME}/httpcore/<version>/httpcore-<version>.jar* .
cp ${HC_M2_HOME}/httpcore-nio/<version>/httpcore-nio-<version>.jar* .
}}}

  Make sure files are group writable

{{{
cd 
/www/people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/httpcomponents
chmod -R g+w *
cd 
/www/people.apache.org/repo/m1-ibiblio-rsync-repository/httpcomponents-httpcore
chmod -R g+w *
}}}

 * 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 site:site site:deploy
}}}

== 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: [EMAIL PROTECTED], [EMAIL 
PROTECTED], 
   [email protected], [EMAIL PROTECTED]

{{{
[ANNOUNCEMENT] HttpComponents HttpCore ${VERSION} Released

The Jakarta HttpComponents project is pleased to announce the release of 
HttpComponents HttpCore ${VERSION}. This version ${release specific content}.

Download -
<http://jakarta.apache.org/site/downloads/downloads_httpcomponents-httpcore.cgi>
Release notes -
<http://www.apache.org/dist/jakarta/httpcomponents/httpcore/RELEASE_NOTES.txt>
HttpComponents site - <http://jakarta.apache.org/httpcomponents/>

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.

HttpCore will form the foundation of the future releases of Apache HttpClient.
}}}

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

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to