# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.


             ==============================
                   POI Release Guide
             ==============================


(I) Prerequisites

   1. You should read the <a href="http://apache.org/dev/release.html">Apache Release FAQ</a>
   2. You must have shell access to people.apache.org
   3. Release manager must have his public key appended to the KEYS file checked in to SVN and the key published on one of the public key servers.
      More info can be found here: <a href="http://www.apache.org/dev/release-signing.html">http://www.apache.org/dev/release-signing.html</a>
   4. You must have <a href="java.sun.com">JDK 1.5</a>
   5. You must have the following utilities installed on your local machine and available in your path:
          * <a href="www.openssh.com">ssh</a>
          * <a href="www.gnupg.org">gnupg</a>
          * <a href="www.openssl.org">openssl</a>
      For Windows users, install Cygwin and make sure you have the above utilities
   6. The POI build system requires two components to perform a build
          * <a href="ant.apache.org">Ant</a>  
          * <a href="http://forrest.apache.org/">Forrest</a>. 
  POI 3.0.2 and 3.1 were built using Ant 1.6.2 and Forrest 0.5

   7. Before building, you should run the "rat-check" build task, which
      uses <a href="http://incubator.apache.org/rat/">Apache Rat</a>
      to check the source tree for files lacking license headers. Files
      without headers should be either fixed, or added to the exlude list


(II) Making release artefacts
  1. Update version id in build.xml
{code:xml}
  <property name="version.id" value="3.1-beta1"/>
{code}


  1a Check file permissions in SVN. 
 There can be  files in the SVN tree marked executable (have the
 svn:executable property set), but which should not be. Checking them out will cause 
 the executable bit to be set for them on filesystems which support it. 
 The flag can be removed in batch using
 
$ svn pd 'svn:executable' $(find -name .svn -prune -or -type f ! -name \*.sh \
 -print0 | xargs -0 svn pg 'svn:executable' | cut -d ' ' -f 1)


  2. Tag current version. Include the current revision number in the comment

{code}
$ svn cp https://svn.apache.org/repos/asf/poi/trunk \
https://svn.apache.org/repos/asf/poi/tags/$TAG \
-m "tag r649911 as 3.1-beta1"
{code}

where $TAG is the release tag, for example, REL_3_1_BETA1

  3. Checkout the tagged version
{code}
cd tags
svn checkout https://svn.apache.org/repos/asf/poi/tags/$TAG
{code}

  4. Merge (if required)

{code}
cd $TAG
$ svn merge https://svn.apache.org/repos/asf/poi/tags/$TAG \
https://svn.apache.org/repos/asf/poi/trunk
{code}

  5. Start a new section in status.xml. 

  6. Build as if the vote had passed. The build date must be +7 days from current.
{code}
# eg ant -DDSTAMP=20100924 dist
ant -DDSTAMP=YYYYMMDD dist
{code}

where $TAG is the release tag specified in build.xml in the version.id property, $DATE is the release date (typically +7 days from the actual build date). 

  7. Signing the release artifacts:
{code}
cd build/dist
./multisign.sh

   8. Upload to the dev svn dist repo, 
      https://dist.apache.org/repos/dist/dev/poi/ eg
      https://dist.apache.org/repos/dist/dev/poi/3.8-RC3/

How to upload:

svn co https://dist.apache.org/repos/dist/dev/poi
mkdir 3.8-RC3/
svn add 3.8-RC3

then add .gz and .zip  packages along with checksums. 

 binaries should be in ./bin, sources in ./src sub-directories

8c. commit
After commit the files should be acessible at https://dist.apache.org/repos/dist/dev/poi/3.8-RC2/


 (III) After the vote:

In the release area of the dist repo:
    https://dist.apache.org/repos/dist/release/poi/release/   (FINAL)
    https://dist.apache.org/repos/dist/release/poi/dev/       (Alpha/Beta)
Remove the previous release

Next, svn move the files from the /dist/dev/ area to the appropriate
/dist/release/ area

example:
$ svn rm -m "remove the previous release" \ 
    https://dist.apache.org/repos/dist/release/poi/dev/src
    https://dist.apache.org/repos/dist/release/poi/dev/bin

$ svn mv -m "move staging files to the release area" \
    https://dist.apache.org/repos/dist/dev/poi/bin \
    https://dist.apache.org/repos/dist/dev/poi/src/  \
    https://dist.apache.org/repos/dist/release/poi/dev/

Log-in on people.apache.org

deploy Maven artifacts
{code}
cd build/dist
./mvn-deploy.sh
{code}

2. Make sure that the files are owned by the unix group apcvs and that they are writable by this group. 

3. Wait for the distributions to appear on your favourite mirror

4. Edit the website homepage and list the new release there. If a full release,
   remove older full releases and all beta releases. If a beta release, keep
   the last full release, and replace any other beta releases

5. Edit the website download page, and list the new release there. This should
   reference the checksums, so take care when updating

6. Commit the site changes to svn, and publish live

7. test maven
create a simple project and make sure the release artifacts are accessible by maven:

{code}
$ mvn archetype:create -DgroupId=org.apache.poi.scratchpad -DartifactId=maven-test
cd maven-test
{code}
edit pom.xml and add the release artefacts to the project dependencies: 

{code:xml}
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.1-beta1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-scratchpad</artifactId>
      <version>3.1-beta1</version>
    </dependency>
{code}

{code}
mvn compile 
{code}

You should see [INFO] BUILD SUCCESSFUL in the end.

8. Don't forget to upload the latest version of the site and javadocs

9. Send announcements:
 - to poi-user and poi-dev lists
 - to announcement@apache.org, announcements@jakarta.apache.org

Note, announcements should be sent from your @apache.org e-mail address.

10. add a new project version in Bugzilla
