Forrest Release Process
============================


This file documents the steps a release manager should follow when making a new
Forrest release.

Preparations
------------

- Ensure that as many PMC members as possible have their PGP keys in
  the KEYS file.

- Ensure that there are no copyright issues. The committers and PMC would
  have been continually monitoring this. There are some tools to assist
  with scanning for issues, e.g.
  svn:committers/relicense/src/perl/relicense.txt
  svn:committers/tools/

- Ensure that the line-endings and svn:eol-style property are correct
  for all files. See svn:committers/tools/

- Discuss which Java-Version to use for compliling the release.
  Downloading and installing that version should be done well 
  ahead of time to avoid delays.

- Announce the release plan to the dev list. Define when the code freeze
  commences, when the vote ends etc. See email templates at end-of-file.
  Send a reminder when the code-freeze commences.
  
  - Check out a fresh copy from SVN to make sure you have no local modifications,
  especially those that might be hidden by svn:ignore settings.  

      1. Create a new empty directory 'Forrest_Release'
      2. svn co https://svn.apache.org/repos/asf/forrest/trunk
  
          NOTE: This will take quite a while if you are on a dial-up connection.
          See alternatives below.
  
      3. Wait for the check-out to finish

  Alternatively:

      1. run 'svn st --no-ignore'
      2. Delete any extra files that you might have 
          added/changed in your local copy. They must not be packed with
          the release. It must be a pristine copy of the current trunk.

- Send a reminder when the code-freeze commences.

================ CODE FREEZE ==============================================

Building the distribution
-------------------------
Note: You can practice the following steps (as far as creating the branch)
without committing anything. This ensures a good release candidate.


- Update your release checkout to reflect last minute changes

    1. cd to the 'Forrest_Release'-directory
    2. svn up
    3. Wait for the update to finish

- Do 'build test'. Fix any problems, just those that prevent building.
  It is not your job to fix bugs.
  Remove the build directories, run 'svn st --no-ignore' to be sure.

- Update the version numbers at various places.

    = Edit main\build.xml and replace the '-dev' text with '' i.e. nothing:
        around line 45:
        <property name="forrest.version" value="0.7-dev"/>
        to:
        <property name="forrest.version" value="0.7"/>

    = Edit site-author\status.xml, remove the -dev from the current <release> tag,
        and set the release date.  Also add a new <release> for development
        on the next version  e.g. from:
        
        <release version="0.7-dev" date="not yet released">
        ...
        to:
        <release version="0.8-dev" date="not yet released">
        </release>
        <release version="0.7" date="2002-02-13">
        ...

    = Edit main/forrest.build.xml to update the version tag to remove "-dev".
        There are two occurences:
        around line 32:
        <property name="forrest.version" value="0.7-dev"/>
        ^^^^
        
        around line 60:
        <description>
        |                 Forrest Site Builder                  |
        |                        0.7-dev                        |
        ^^^^

      = Edit plugins/build.xml and increase the docs version number to the next major release:
          around line 23:
          <property name="forrest.version" value="0.7"/>  
          to:
          <property name="forrest.version" value="0.8"/>
          
          NOTE: This is deliberately a major version up. It is assumed that plugins will be 
          developed against the next version of Forrest. Individual plugins can override this
          property in their own build files.
                                
 - Create a new file, etc/RELEASE-NOTES-x.y.txt, where x.y is the version
   currently being released.  It is best to copy an earlier RELEASE-NOTES file,
   to keep a common layout.
   In this file, provide a summary of changes, and check for general accuracy.
   Scan the status.xml/changes and the Roadmap via the issues tracker,
   to find the important issues.

 - Set your Java version to be the lowest specified of our supported versions.
   
   On Windows you have to set the environment variable JAVA_HOME to the 
   path of the Java version to use. 
   Note: If you change the setting in the system properties, you have to logout and login 
   again for the changes to become effective.

 - Take note of the SVN revision number of your trunk.

 - Change to directory main and run 'build release-dist' to generate the
   distributions on a UNIX machine.
   - Two archives are created: apache-forrest-X.Y.tar.gz apache-forrest-X.Y.zip
   - Ignore the *.zip archive.
   
 - Repeat that on a Windows machine.
   - Two archives are created: apache-forrest-X.Y.tar.gz apache-forrest-X.Y.zip
   - Ignore the *.tar.gz archive.
 
 Note: The reason for creating two separate archives is the line-endings
 dilemma between Windows and UNIX. SVN ensures correct line-endings
 on each operating system (as long as committers have been diligent when
 adding/updating the repository).

 - Do a local test of your release archive. Create a new directory,
   copy the file, e.g. build/dist/apache-forrest-0.7.tar.gz
   ensure that it unpacks okay, configure, and do the usual tests.

 - Understand how to sign releases and generate MD5 and PGP.
   Not going to try to explain, but here is some info:
    http://wiki.apache.org/incubator/SigningReleases
    http://forrest.apache.org/mirrors.cgi#verify
   Create the *.asc and *.md5 files. Here is one example:

   gpg --recv-key <myKey>
   gpg --output apache-forrest-0.7rc1.tar.gz.asc \
       --detach-sig --armor apache-forrest-0.7rc1.tar.gz
   gpg --verify crossley-apache-forrest-0.7.tar.gz.asc \
       apache-forrest-0.7rc1.tar.gz
   ... should say "Good signature from ..."

   openssl dgst -md5 -out apache-forrest-0.7.tar.gz.md5 \
       apache-forrest-0.7rc1.tar.gz
   md5sum apache-forrest-0.7rc1.tar.gz
   ... output should match that of the md5 file.

 - Create a maintenance branch in SVN with
    svn copy -m "Create the x.y release branch from r#####" \
    https://svn.apache.org/repos/asf/forrest/trunk \
    https://svn.apache.org/repos/asf/forrest/branches/forrest_xy_branch
   where 'xy' is a compact form of the version (e.g. 04, 041, 05)
   and 'r#####' is the SVN revision number that the branch was created from
   which was the revision that the release candidates were generated from.
   See http://svn.apache.org/repos/asf/forrest/branches/
   If someone has done a commit before you get to do it, then specify
   the revision number with -r

 - Test the actual distribution on various platforms.
   - Upload the release candidates and signatures to a committer's webspace.
     Use the .tar.gz from the UNIX machine and .zip from the Windows machine.
   - Ask all developers to test (command-line, run, and webapp).
     (See email template below.)
   - Follow the actual user instructions in the Forrest distribution
     at README.txt and index.html
   - Use it to build some difficult sites.
   - Ensure that the compressed archives will unpack correctly.

 - If necessary, build the second release candidate and ask people to test again.
 - Ask people to vote on the final release candidate.

 - If there have been changes to the trunk since the branch was created,
   then merge trunk to branch.

 - If everything looks okay, and after the Vote has finished, tag SVN with
    svn copy -m "Create tag forrest_xy from release branch" \
    https://svn.apache.org/repos/asf/forrest/branches/forrest_xy_branch \
    https://svn.apache.org/repos/asf/forrest/tags/forrest_xy
   where 'xy' is a compact form of the version (e.g. 04, 041, 05).
   See http://svn.apache.org/repos/asf/forrest/tags/

Upload and announcement
-----------------------

 - Upload the release: the *.tar.gz, the *.zip, the *.asc and *.md5 files,
   and the RELEASE-NOTES-x.y.txt
   to www.apache.org at /www/www.apache.org/ dist/forrest/
   Each PMC member has a server account and belongs to the forrest group.
   The process is documented at http://www.apache.org/~bodewig/mirror.html
   Ensure correct file permissions: chgrp forrest *; chmod 664 *
   Leave the previous dist there as well, until after the announcement.

   Note: The other files there (HEAD.html README.html LICENSE.txt KEYS)
   are all automatically updated from the SVN:forrest/dist/ repository.

 - If necessary, re-arrange stuff at the Archives site
   http://archive.apache.org/dist/forrest/
   You should not need to touch anything, the artifacts are automatically
   copied from the main /dist/forrest/

 - Wait for the various mirrors to pick up the new files.
   For some mirrors, this takes only a few hours. However others are slow.
   How long to wait is a tradeoff, e.g. 8 hours.
   See "Status of mirrors" http://www.apache.org/mirrors/
   When you see that a good proportion of the mirrors have updated,
   then do the announcement.

 - Edit the forrest/site-author/content/xdocs/mirrors.html
 - Edit the Forrest home page in the "News and events" section.
 - Rebuild and publish the Forrest website as normal.
FIXME: There is a bug (FOR-300) in the forrest build which generates
to main/site/mirrors.html instead of build/site/mirrors.html

 - On the server, remove the top-level files and "docs" and "howtwo"
   directories using 'svn rm', then checkout the new release docs, e.g.
   cd /www
   svn co http://svn.apache.org/repos/asf/forrest/site/0.7 forrest.apache.org
FIXME: that needs to change now. It will be a once off.

 - Update the xml.apache.org website
   Edit xml-site/src/documentation/content/xdocs/news.xml and record the
   announcement, and then commit the new HTML to xml-site/targets/forrest
   Note that they use forrest-0.6 to build their website.
   See http://xml.apache.org/guidelines.html#website-top

 - Send announcement email.  Typically this is sent as:
   To: dev@forrest.apache.org, user@forrest.apache.org, announce@apache.org,
       announcements@xml.apache.org
   Subject: [Announce] Apache Forrest X.Y.Z
     !! Always refer them to the mirror facility
     !! Never mention the URL www.apache.org/ dist/ in email.
   Use the template at etc/announcement.txt
   Use your spelling checker!
   Sign the email (e.g. GPG) if possible.

See previous announcements:
0.2   http://marc.theaimsgroup.com/?l=xml-apache-announce&m=103746673310573
0.3   http://marc.theaimsgroup.com/?l=xml-apache-announce&m=104399934113331
0.4   http://marc.theaimsgroup.com/?l=jakarta-announce&m=104510734501302
0.5   http://marc.theaimsgroup.com/?l=xml-apache-announce&m=106352706005681
0.5.1 http://marc.theaimsgroup.com/?l=xml-apache-announce&m=106541447606765
0.6   http://marc.theaimsgroup.com/?l=xml-apache-announce&m=109784461425740 

 - Do the Freshmeat announcement:
   http://freshmeat.net/projects/forrest/

Cleanups
--------

 - Edit build.xml, increment the version and add a -dev tag:
   around line 35:
   <property name="version" value="0.8-dev"/>  

 - Edit main/forrest.build.xml and update the version:

   around line 29:
   <property name="version" value="0.8-dev"/>  

    around line 52:
    <description>
    |                 Forrest Site Builder                  |
    |                        0.8-dev                        |

 - Remove old dist files from the /www/www.apache.org/dist/forrest/ directory.
   They have already been archived at archive.apache.org/dist/forrest/

 - Do some Jira administration (need to be in the jira-administrators group):
 - Tweak the "release" versions via "admin" interface at our Jira.
   0.7-dev is renamed 0.7 and 0.8 becomes 0.8-dev
 - Review the Issues for the old version and move any Incomplete ones up.
 - Change the "fixfor" attribute to the next verion for the
   "project.issues-rss-url" RSS feed in forrest.properties

All done!

Or perhaps not.. if you think of anything, please refine these instructions.

------------------------------------------------------------------------------
Email templates
---------------
Here are some email templates to base the announcements. Please tweak.

------------------------------------------------------------------------------
Release plan
   http://www.mail-archive.com/dev@forrest.apache.org/msg02310.html

------------------------------------------------------------------------------
Subject: [Important] code-freeze commenced

The code-freeze is now happening to allow us to pack the
release candidates and make them available for testing.

Code-freeze means *no* non-essential commits to the trunk
or to the new release branch. Other branches are free to
continue.

There should be no code enhancements or new functionality,
because that could introduce new bugs.

The main aim is to find and fix important bugs. Any minor
issues are delayed until after release (add to Jira).

Documentation corrections can happen because they will not
break anything. As long as we do test the documentation
building just prior to making the final release candidate.

However, if there are important code changes that are required
you can make a proposal to allow that commit. The PMC will
make a quick decision.

Next important milestones are:
* Create release candidate #2 if there have been changes
on Friday 2005-06-17 at 22:00 UTC [2]
[2] http://www.timeanddate.com/worldclock/meetingtime.html?day=18&month=06&year=2005&p1=48&p2=176&p3=240&p4=224&p5=213
* Actual release date is Sunday 2005-06-19 at 14:00 UTC [3]
[3] http://www.timeanddate.com/worldclock/meetingtime.html?day=20&month=06&year=2005&p1=48&p2=176&p3=240&p4=224&p5=213

Now we will go and build the releases which might take
some time. The next message will tell you where to get
the release candidates and describe how to test.

------------------------------------------------------------------------------
Subject: [Important] please test release candidate then vote

We need people to test the release candidate on your projects,
especially on different operating systems. Just send a short
reply to this thread that it works for you. See method below.

Download the release candidate and supporting files:
http://www.apache.org/~crossley/release-forrest-07/

For Windows get *.zip md5sum ################################
For UNIX get *.tar.gz md5sum ################################
Get the *.asc and *.md5 that match your chosen download.

It was packed from SVN revision ####
Java 1.4 or later is required.

If you want to verify the download, then follow:
http://forrest.apache.org/mirrors.cgi#verify

Otherwise just get on with testing.

Testing and vote period concludes Sunday 2005-06-19 14:00 UTC
Anyone can test and vote, not just PMC members.
However only the PMC votes are binding.

So we have approximately 6 days.

Here are some hints:

  * Ensure that the compressed archive will unpack properly.
  * Verfiy the release, especially if you are a committer.
  * Follow the README.txt and index.html
  * Set environment variables.
  * Don't worry too much about minor bugs. We are looking
     for blockers, such as it will not run. Many known issues
     are recorded at our Jira, perhaps you can add more.

* Make a fresh site ...
    cd my-new-dir
    forrest seed
    forrest run ... use the local jetty server.
    forrest ... build the whole site from the command-line.
    forrest war ... use your own full Jetty or Tomcat.

* Try it on the Forrest core docs ...
    cd site-author
    forrest run

* Forrest was already pre-built. Try building it again.
    cd main
    build clean
    build
    build test

* Try it on your own project, especially if you have
    a project sitemap and use some extra plugins.

------------------------------------------------------------------------------
