blob: c69c841d221e9601087a69edf7a812ae2979b443 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN"
"http://forrest.apache.org/dtd/document-v20.dtd" [
<!ENTITY c '0.8'>
<!ENTITY cd 'docs_0_80'>
<!ENTITY cp 'plugins_0_80'>
<!ENTITY cs '0.80'>
<!ENTITY cb '08'>
<!ENTITY d '0.9'>
<!ENTITY dd 'docs_0_90'>
<!ENTITY dp 'plugins_0_90'>
<!ENTITY ds '0.90'>
<!ENTITY db '09'>
<!ENTITY dt '0.9-dev'>
<!ENTITY n '0.10'>
<!ENTITY nd 'docs_0_100'>
<!ENTITY np 'plugins_0_100'>
<!ENTITY ns '0.100'>
<!ENTITY nb '010'>
<!ENTITY nt '0.10-dev'>
<!ENTITY p '0.7'>
<!ENTITY pd 'docs_0_70'>
<!ENTITY ps '0.70'>
<!ENTITY pb '07'>
<!ENTITY rdate '2011-02-07'>
]>
<!-- The entities above are for the current state,
i.e. preparing for the upcoming release (using 0.8 as the example):
&c; = current release version, e.g. 0.7
&cd; = current release version docs, e.g. docs_0_70
&cp; = current release version plugin docs, e.g. plugins_0_70
&cs; = current release version site URI, e.g. 0.70 (as in site:v0.70)
&cb; = current release version brief, e.g. 07 (as in forrest_07_branch)
&d; = development version, e.g. 0.8
&dd; = development version docs, e.g. docs_0_80
&dp; = development version plugin docs, e.g. plugins_0_80
&ds; = development version site URI, e.g. 0.80 (as in site:v0.80)
&db; = development version brief, e.g. 08 (as in forrest_08_branch)
&dt; = development version with -dev, e.g. 0.8-dev
&n; = next version, e.g. 0.9
&nd; = next version docs, e.g. docs_0_90
&np; = next version plugin docs, e.g. plugins_0_90
&ns; = next version site URI, e.g. 0.90 (as in site:v0.90)
&nb; = next version brief, e.g. 09
&nt; = next version with -dev, e.g. 0.9-dev
&p; = previous version, e.g. 0.6
&pd; = previous version docs, e.g. docs_0_60
&ps; = previous version site URI, e.g. 0.60 (as in site:v0.60)
&pb; = previous version brief, e.g. 06
&rdate; = anticipated release date
-->
<document>
<header>
<title>How to release Forrest</title>
<abstract>
This document provides guidelines for the steps that a Release Manager (RM) should follow when
doing a Forrest release.
</abstract>
</header>
<body>
<section id="About">
<title>About this document</title>
<warning>
This document is constantly being developed and some steps will need to be
re-arranged. There are some fixme notes that we will review after each
release. Do not take this document at face value - always try to visualise the
effect of each step.
</warning>
<p>
This document provides guidelines for the steps that a Release Manager (RM) should follow
when doing a Forrest release. Note that it might have mistakes - we seem
to discover something new each time and some steps might need to happen
in a different order. Fine tune these notes for next time. Do some
practice runs. Read through these notes often in the lead up to the
release to imagine the effect and order of some steps.
</p>
<p>
There are some steps that other committers, and even developers, can
assist with, especially in the areas of getting ready for the release
and the final testing. Many of the steps can be done only by the Release
Manager.
</p>
<p>
The lead-up to the release is a good opportunity to build the project community
and to draw in new developers. The steps in this process try to maximise that.
</p>
<fixme author="open">
Some of the complexity in this process is due to site-author docs accompanying
the release. That is a good thing because then they have local docs.
However it complicates this process because the documentation version numbers,
xdocs layout, site.xml navigation, etc. all need to be relevant for
packing with the release. Trunk needs to stay that way during testing of RCs.
Just before the release announcement, certain things need to be updated to
create and publish the website. Then following the release, updated to be
ready for the next develoment cycle. Much of that process in unavoidable, but
some could be simplified.
</fixme>
</section>
<section id="rm">
<title>Who is a Release Manager</title>
<p>
A Release Manager is a Forrest committer who does the work of the
release process to prepare a release candidate and sign release packages, co-ordinate
testing and voting, uploading to the dist area and ensuring mirrors, and
sending the announcement.
See the <a href="http://httpd.apache.org/dev/release.html">release guidelines</a>
of the HTTP Server project, which has useful notes about the RM role.
</p>
<p>
The project developers have the role of preparing the product to release
quality, testing, fixing issues, and voting for the release candidate.
The votes of the PMC will <a href="#vote">decide</a> whether the product is fit for release.
</p>
<p>
The RM makes all the <a href="#decisionRM">calls</a> regarding the actual preparations and the
doing of the release.
</p>
<p>
The RM could do the job alone, which enables speedy process. There are
not actually many tasks where assistants can help with the release
itself (other than with the pre-release tasks and testing).
However it is a good
idea to have an assistant so as to pass on the knowledge, to help
document the process, and to perceive potential flaws. More than one
assistant would probably hinder.
</p>
<p>
The RM needs to have an incredible amount of time and energy available,
especially to prepare the first release candidate and to finalise the release.
</p>
<p>
The RM should be comfortable with using SVN and be familiar
with the distribution mirror system, and with ASF release
procedures. Also need to be a quick decision-maker and able to find and solve
issues on the spot. It would be nice if others help to solve last minute
issues, but don't expect it.
</p>
<p>
The following notes are terse. If you don't understand, then
probably not ready to be an RM.
</p>
</section>
<section id="prep">
<title>Tasks to be done by the project before the release can start</title>
<p>
There are a number of things to be done by the project before the
release will start. Don't leave these until the last minute. It is not
the Release Manager's job to fix bugs nor address blocker issues. The RM
job begins after the project is ready to do the release.
</p>
<ul>
<li>The project updates the <a href="site:bugs/filters">Roadmap</a>
to schedule the realistic Issues.
Be brutal. If these issues have not been fixed by now, then it is
quite okay to re-schedule them to delay until the next development
version. See example emails from the lead-up to previous releases.
</li>
<li>The project made good progress towards fixing the Blockers
and applying the outstanding <a href="site:bugs/filters">patches</a>.
</li>
<li>The documentation content is ready.</li>
<li>Plugins have been reviewed and deployed as necessary. Some perhaps need to
go through a release process. This should happen independently of the core release process.
</li>
<li>Supporting products (e.g. Ant, Xerces) should have been updated well before this
stage. Do not attempt such upgrades too close to the release, as it
will distract attention from other issues and possibly introduce new problems.
</li>
<li>Add some issues to the Roadmap for the important general issues that need to
happen before the release.
Some examples from last time: FOR-911, FOR-868, FOR-865, FOR-855, FOR-644.
</li>
<li>
Relevant changes are listed in the site-author/status.xml and
contributors have been attributed. Other changes are listed in the
various plugins/status.xml files.
See <a href="https://issues.apache.org/jira/browse/FOR-865">FOR-865</a>
</li>
<li>Add relevant information to the
<a href="https://issues.apache.org/jira/browse/FOR-868">upgrading notes</a>.
</li>
<li><p>
Major changes are listed in the site-author/status.xml using the
"importance" attribute. This will be used to generate the list of
top changes for the Release Notes and Announcement text.
</p>
<p>
http://localhost:8888/releaseNotes_&dt;.html
</p></li>
<li>
Committers (as many as possible) have their up-to-date PGP keys
in the KEYS file in Forrest's root directory.
Instructions about how to add keys are included in that file.
See
<a href="http://www.apache.org/dev/release-signing.html#keys-policy">instructions</a>
about how to create and manage PGP keys, and see the notes about
encouraging a strong
<a href="http://www.apache.org/dev/release-signing.html#web-of-trust">web of trust</a>.
See these tools to ensure that signatures and keys are okay:
<a href="http://people.apache.org/~henkp/checker/sig.html">pgp signature checker</a>
</li>
<li>
Be familiar with our <a href="site:guidelines/voting">voting guidelines</a> and
<a href="site:guidelines/actions">release actions</a>.
</li>
</ul>
<fixme author="open">
Decide the content of the release. Previously we just packed everything
in trunk (see the "release-dist" target) and included a built
forrest.jar file. Now there is extra stuff that should not be included.
See <a href="http://issues.apache.org/jira/browse/FOR-911">FOR-911</a>.
</fixme>
</section>
<section id="PrepProject">
<title>Preparing the project for the release</title>
<p>
In this step the Release Manager starts the process to finalise the
outstanding blocker issues.
</p>
<ol>
<li><p>
Ensure the above preconditions are met.
</p>
<p>
If not, then the project is not yet ready for release. Remember that
it is not the RM's job to do this.
</p>
<p>
If so, then send an email to get the project to decide what to do
with the remaining issues. Propose to delay some issues to a future
release, encourage people to fix others. See
<a
href="http://issues.apache.org/jira/browse/FOR-853">FOR-853</a>.
Look at
<a
href="http://www.mail-archive.com/dev@forrest.apache.org/msg02310.html" rel="nofollow">msg02310.html</a>
for an example of such a message.
</p></li>
<li><p>
Start discussion on Java-Version to use for compiling and testing
the release. If necessary, alter the build.compiler.vm value in main/build.xml and plugins/build.xml and in various other files.
Conduct a text search for the old version.
</p></li>
</ol>
</section>
<section id="PrepRM">
<title>Preparations for the Release Manager</title>
<p>
Particularly the Release Manager, but also anyone assisting, needs to be
familiar with standard procedures and Apache terminology. This is
crucial for a successful release.
</p>
<ul>
<li><p>
If you have never done a release before or need to refresh your
memory, read all about Apache releases in general at
<a href="http://www.apache.org/dev/#releases">http://www.apache.org/dev/#releases</a>
and
<a href="http://incubator.apache.org/guides/releasemanagement.html">Apache Incubator</a>.
Note that these documents change often. Make sure any assistants
have read and understood this as well.
</p></li>
<li>As discussed above, be sure that you have plenty of time and energy.
You will need to be persistent throughout the process.
</li>
<li><p>
Be familiar with the process of signing release packages and generating MD5
and PGP. Some more info is at
<a href="http://www.apache.org/dev/release-signing.html">Signing
Releases</a> and our download notes for the
<a href="http://forrest.apache.org/mirrors.cgi#verify">Verification</a>.
</p></li>
<li>Practice signing email in readiness for the announcement.</li>
<li>Investigate the release procedure notes of other ASF projects.</li>
<li>
Make sure that the network connection is reliable and efficient.
</li>
<li><p>
Install the Java-Version that has been agreed for compiling the
release. Do this well ahead of time to avoid delays, and ensure that
Forrest works for you.
</p></li>
<li>Get a printout of this document to scribble notes as you go.</li>
<li>Use a text file to prepare/record your svn merge commands.</li>
<li>Browse the dev mail list to see what happened around the previous release.
Some mails will be useful to glean words to re-use.
</li>
</ul>
</section>
<section id="PrepRelPlan">
<title>Preparing the Release Plan</title>
<p>
Prepare the Release Plan to define the corner stones of the coming
release. Deciding the dates and timing that suits everybody might be
difficult. Try to be careful about holiday periods and try to
find timing that is good to attract the most people to help.
</p>
<p>
Some items are:
</p>
<ul>
<li>Java-Version to test this release</li>
<li>The Release Manager</li>
<li>Date for end of vote on release plan</li>
<li>Date for create release candidate and start of testing period</li>
<li>Optional creation of release candidate #2 (when there are bugs)</li>
<li>Date for end of vote on the final release candidate</li>
<li>Scheduled release date</li>
</ul>
<p>
Remind people about our <a href="site:guidelines/voting">voting guidelines</a> and
<a href="site:guidelines/actions">release actions</a>.
</p>
<p>
See past release plans as examples:
<!--
<a href="http://s.apache.org/jI?action=display">0.8</a>
-->
<a href="http://s.apache.org/x5">0.9</a>
|
<a href="http://s.apache.org/jI">0.8</a>
|
<a href="http://s.apache.org/VL5">0.7</a>
</p>
<note>
There are various reasons for voting on the Release Plan, e.g.
draws attention to the release process; encourages people to get
involved; prompts people get their changes committed; ensures that the
date is suitable and
people will be around to test and then vote on the actual release. This
ensures that it is the PMC as a whole that prepares and issues the
release, rather than an individual. Such procedures give us the
protection accorded by the ASF being a corporation. See a good
discussion on the cocoon-dev list:
<a href="http://marc.theaimsgroup.com/?t=114296877800003" rel="nofollow">Re: Voting on releases?</a>
</note>
</section>
<section id="PrepCodeBase">
<title>Preparing the code base</title>
<p>
Anyone can help with this phase.
</p>
<ol>
<li><p>
Ensure that there are no license issues. The committers and PMC
would have been continually monitoring this. There are some tools to
assist with scanning for issues. See
<a href="site:tasks/legal-monitoring">further information</a>.
</p></li>
<li><p>
Ensure that the line-endings and svn:eol-style property are correct
for all files. See
<a href="site:tasks/subversion-monitoring">further
information</a>.
</p></li>
<li>
Ensure that documentation structure and content is ready.
</li>
<li>Ensure that the documentation is building properly, do 'cd site-author; forrest'. Fix any linking errors.</li>
<li>
Create a new file, etc/RELEASE-NOTES-&d;.txt, where x.y is the version currently being released.
In this file, insert the list of important changes which is obtained by doing:
http://localhost:8888/releaseNotes_&dt;.txt
<fixme author="">
move this step to later, emphasise preparing it now, e.g. in today's
there are no "important" for "docs" category.
</fixme>
<fixme author="">
Needed to hand tweak some "Link:" ... some have local URLS. Manually
removed Table of Contents.
</fixme></li>
<li>
Prepare the announcement text. Create a file admin/announcement-x.txt
(by 'svn move' the old one) and list the major new features, e.g. locationmap.
The admin directory is not included in the release package so editing can continue.
</li>
<li><p>
Ensure that each plugin that uses the locationmap has its "release
version" set to 0.8 or more.
</p>
<p>
If a plugin has a locationmap.xml file or uses "lm:" references in
its *.xmap, then it is using locationmap. See
<a href="site:buildPlugin">How to Build a Plugin</a>.
</p></li>
<li>
Ensure that plugins descriptors in both core and whiteboard are up-to-date.
</li>
<li><p>
Ensure that all relevant plugins have been deployed to plugins/&d;/
(see other notes at <a href="site:buildPlugin/release">How to Build a Plugin</a>).
</p>
<fixme author="open">
Check and integrate the documents referenced in that howto.
</fixme></li>
</ol>
</section>
<section id="PrepTrunk">
<title>Preparing your working copy of SVN trunk</title>
<fixme author="fso">
We need to discuss order from here on. My idea is to adjust docs before
we enter code freeze to save time later. But if the rc fails and release
is postponed might need to roll back changes easily and - if possible -
roll them forward later. So creating an svn branch for the rc seems to
make sense to me. Probably easiest would be to create an rc branch here
and co that. wdyt?
</fixme>
<p>
In this step you make absolutely sure that your working copy of SVN
trunk has no local modifications, or additional files that you have been
fiddling with, and especially files that might be hidden by svn:ignore
settings.
</p>
<p>
There are two ways to do this. Either do a complete new svn checkout, or
use the 'svn status --no-ignore' command on your existing working copy.
</p>
<ol>
<li><p>
In a new empty directory do <code>'svn co
https://svn.apache.org/repos/asf/forrest/trunk'</code>
</p></li>
</ol>
<p>
Alternative Approach
</p>
<ol>
<li> Do 'svn update -r HEAD' to ensure that you are up-to-date. </li>
<li> Run 'svn status --no-ignore' </li>
<li><p>
Delete any extra files you might have added/changed in your local
copy. Delete any "build" directories in plugins, etc. <strong>Extra
files must not be packed with the release.</strong> It must be a
pristine copy of the current trunk.
</p></li>
</ol>
</section>
<section id="PrepDistSvn">
<title>Preparing the "dist" SVN</title>
<p>
The SVN at
<a href="https://dist.apache.org/repos/dist/release/forrest/">https://dist.apache.org/repos/dist/release/forrest/</a>
holds some html files for the header and footer of the mirrors, and the other files that form the distribution.
This is automatically reflected by
<a href="http://www.apache.org/dev/cms.html#svnpubsub">SvnPubSub</a> on the server to
/www/www.apache.org/dist/forrest directory, which is our public distribution space.
</p>
<p>
Ensure that the KEYS file is synchronised with the copy in Forrest svn
trunk and commit the changes.
</p>
<p>
Ensure that our "dist/dev" SVN area at
<a href="https://dist.apache.org/repos/dist/dev/forrest/">https://dist.apache.org/repos/dist/dev/forrest/</a>
is ready to hold the release candidate for voting.
</p>
</section>
<section id="adjustDocs">
<title>Preparing docs for next release cycle</title>
<p>
In this phase we get the docs ready for the release. You will commit
these changes after the code-freeze, but do not publish to the website
until after the release.
</p>
<fixme author="open">
We definitely need to use automated version number strings where possible.
It is too easy to miss some, as we did with 0.8 release.
We have a set of core xml entities available.
Also see the source xml for this document, which utilises entities to
manage the version numbers between releases.
</fixme>
<ol>
<li><p>
Edit site.xml as follows:
</p>
<ol>
<li><p>
Move all version numbers one line down so that the existing:
</p>
<source>
&lt;versions tab="docs">
&lt;overview label="Overview" href="versions/index.html"/>
&lt;v&d; label="&dt;" href="site:index"/>
&lt;v&c; label="&c; (current)" href="site:v&cs;//index"/>
&lt;v&p; label="&p;" href="site:v&ps;//index"/>
&lt;versions></source>
<p>
becomes:
</p>
<source>
&lt;versions tab="docs">
&lt;overview label="Overview" href="versions/index.html"/>
&lt;v&n; label="&nt;" href="site:index"/>
&lt;v&d; label="&d; (current)" href="site:v&ds;//index"/>
&lt;v&c; label="&c;" href="site:v&cs;//index"/>
&lt;versions></source>
<p>
Similarly for <code>&lt;pluginVersions</code>
</p>
</li>
</ol></li>
<li>Similarly edit tabs.xml</li>
<li><p>
Further edit site.xml to configure the menu labels. See an example site.xml
from a past release. Basically do this ...
</p>
<ol>
<li>Add section &lt;v&ns;> with minimal content above the &lt;v&ds;> section.</li>
<li>Edit the label@ and description@ attributes for each of the three sections.
&lt;v&ns;> and &lt;v&ds;> and &lt;v&cs;></li>
<li>Remove the label@ attribute for the &lt;v&cs;> section. This prevents
it from appearing in the <a href="site:linkmap">linkmap ToC</a>.</li>
<li>Remove the whole section &lt;v&ps;> of the past docs.</li>
</ol></li>
<li>Edit version numbers in xdocs/versions/index.xml</li>
<li>Edit version numbers in xdocs/pluginDocs/index.xml</li>
<li>Edit version numbers in tools/forrestbar/</li>
<li>Edit version numbers in MOTD section of site-author/skinconf.xml</li>
<li>Edit version numbers in main/fresh-site/..../site.xml and tabs.xml</li>
<li><p>
Copy the past "Upgrading" notes from the past version.
Do: <code>svn cp site-author/content/xdocs/&pd;/upgrading_&pb;.xml site-author/content/xdocs/trash/</code>
</p></li>
<li><p>
Remove the past versions (&p;) docs directory. Do:
<code>svn rm site-author/content/xdocs/&pd;</code>
</p></li>
<li><p>
Edit site-author/conf/cli.xconf where it excludes old docs from
being generated (a trick to speed up). Adjust the version numbers.
</p></li>
<li>
Change the "fixfor" attribute to the next version for the
"project.issues-rss-url" RSS feed in the <code>site-author/forrest.properties</code> file.
Find the version number via the "Road Map" link at our Jira front page.
Verify localhost:8888/forrest-issues.html
</li>
<li><p>
Edit site-author/status.xml to
Remove the "-dev" from the current &lt;release&gt; tag, and set
the anticipated release date. Remove the "-dev" from the text intro.
</p></li>
<li>Validate status.xml (e.g. with <code>'xmllint'</code> or with <code>'forrest validate-status'</code>).</li>
<li>
<p>
Create a new directory as a stub for the next section of development docs.
Create a placeholder index page and upgrading notes. See a past release
for example. Do this ...
</p>
<source>
svn mkdir &nd;
svn copy &dd;/index.xml &nd;
svn copy &dd;/upgrading_&db;.xml &nd;/upgrading_&nb;.xml
... edit those docs to suit. Emphasise developers and encourage svn.</source>
</li>
<li>
Start the next set of development pluginDocs. Do:
<code>svn cp pluginDocs/&dp; pluginDocs/&np;</code>
</li>
<li>Remove the "dev" note from <code>&dd;/index.xml</code> and <code>&dd;/upgrading_&db;.xml</code></li>
<li><p>
Edit the Forrest home page in the "News and events" section and add
a text like:
</p>
<source>
Apache Forrest &d; was released on ## YYYY-MM-DD ##.
[### Add some important new features ###]</source></li>
<li>
Edit version numbers in the top-level quickstart <code>$FORREST_HOME/index.html</code>
</li>
<li>
Undo the exclusions of &cd; etc. in <code>site-author/conf/cli.xconf</code>
</li>
<li>Ensure that the documentation is building properly, do 'cd site-author; forrest'.
Fix any linking errors. Review changes.html to ensure section numbering.</li>
<li>Edit the site-author/content/doap.xml to add the new release date.
Note that we have copies <a href="https://issues.apache.org/jira/browse/FOR-1210">FOR-1210</a>.
</li>
<li><p>
Edit the forrest/site-author/content/xdocs/mirrors.html and adjust
all version-specific content.
In the "Verify" section near the end, add the name of the Release Manager
and the PGP key Id used to sign the release.
</p></li>
<li>
Check that the download page looks correct. Can get an idea with
<code>localhost:8888/mirrors.html</code>
</li>
<li>Search (e.g. with find and grep) to ensure that no version numbers
have been missed. Sometimes people add more hard-coded version numbers
since the last release. If you find any, then add them to the list
above (or better still, automate them).
</li>
<li>
Edit <code>site-author/conf/cli.xconf</code>
to ensure that only the old &cd; are excluded.
</li>
<li>Commit all of the above changes after the code-freeze has started
in the next section.
However do not build-and-deploy until after the release.
</li>
</ol>
<fixme author="">
Not sure what will happen with the forrestbot on our zone during this
phase. If the steps in this Release Process are correct, then such users
of live trunk should get a smooth upgrade. We will see.
</fixme>
</section>
<section id="BuildDist">
<title>Building the release candidate packages</title>
<p>
In this phase the Release Manager builds the release candidate to be
tested.
</p>
<note>
You can practice the following steps (as far as creating the branch)
without committing anything even before code-freeze. This ensures a good
release candidate.
</note>
<ol>
<li>Announce that the code-freeze has now commenced.
Use the template <a href="announce_code_freeze.txt">announce_code_freeze.txt</a>
to send email to dev list.
The meaning of "code-freeze" is defined in that template.
</li>
<li><p>
Update your SVN working copy to include any last minute changes.
Keep an eye on the svn@ mail list.
</p></li>
<li>Do any final work, such as license header checks and xml code cleanup.
</li>
<li><p>
Ensure that your Java version is the lowest specified of our
supported versions.
</p>
<note>
Set the environment variable JAVA_HOME to the path of the Java
version. Note for Windows: If you change the setting in system
properties, you need to logout and login again for the changes to
become effective.
</note></li>
<li><p>
Update the version numbers at various places:
</p>
<ol>
<li><p>
Edit main/build.xml and remove the "-dev" text around line 48:
</p>
<source>
&lt;property name="forrest.version" value="&dt;"/>
to:
&lt;property name="forrest.version" value="&d;"/>
</source></li>
<li>
Similarly in main/forrest.build.xml around line 28.
</li>
<li><p>
Edit plugins/build.xml to increase the docs version number to
the next major release. Around line 23:
</p>
<source>
&lt;property name="forrest.version" value="&d;"/>
to:
&lt;property name="forrest.version" value="&n;"/>
</source>
<note>
This is deliberately a major version up. It is assumed that new
plugins will be developed against the next version of Forrest.
Individual plugins can override this property in their own build
files.
</note></li>
</ol>
<fixme author="">
There are probably other areas which have version numbers. How can
we improve this? Possibly with XML Entities, possibly with Ant
properties.
</fixme></li>
<li><p>
Run the following quick tests from the command line of your system
to ensure that all is well:
</p>
<ul>
<li><p>
Change to the main directory and run <code>build test</code>.
The build should conclude without errors from both seed builds.
</p></li>
<li><p>
Change to the site-author directory and run 'forrest'. The docs
should build without errors.
</p></li>
</ul>
<p>
If there are any problems, focus on problems that prevent building
and invite other commiters to help you solve the problems.
</p>
<note>
It is not your job to fix bugs and code freeze should not commence
with a broken trunk.
</note>
<p>
If there are bugs with the build system that cannot be easily fixed,
then call a halt to the release process and start a discussion on
rescheduling options on the dev-list with the template
<a
href="rc_did_not_build_what_now.txt">rc_did_not_build_what_now.txt</a>
</p></li>
<li><p>
Remove the build directories from core and plugins. Do <code>svn st
--no-ignore</code> in the root directory of your release candidate
directory to be sure that all files created by the test build have
been removed and no other files have been changed. The status
command should report no changes.
</p></li>
<li>
Edit 3 files in tools/forrestbar to update the version number to match the new release:
<source>
xpi/install.rdf, line 23: &lt;em:version>&d;&lt;em:version>
xpi/install.js, line 19: var err = initInstall("ForrestBar", "forrestbar", "&d;");
xpi/chrome/content/contents.rdf, line 25: chrome:displayName="ForrestBar &d;"/>
</source></li>
<li>Build the forrestbar and replace site-author/content/xdocs/tools/forrestbar.xpi
</li>
<li>
Update the etc/RELEASE-NOTES-&d;.txt as described above.
</li>
<li>Commit all of the above changes.</li>
<li>Do 'svn up'</li>
<li><p>
Take note of the SVN revision number of your trunk by running
<code>svn info</code> from the command line in the Release
Candidate's root dir and look at the "Last Changed Rev: ######".
This will be used later for the svn log message when the branch is
created. Also it is helpful for ensuring that no new commits have
been made, i.e. people forgetting the code freeze. From here on
carefully watch the svn@ list.
</p></li>
<li><p>Cleanup your working copy to remove any extra files.</p>
<source>
cd $FORREST_HOME
find . -name build | xargs rm -rf
svn status --no-ignore</source>
</li>
<li><p>
Now we will build the release candidate packages for Windows and
Unix.
</p>
<ul>
<li>
Change to directory $FORREST_HOME/main and run <code>'build release-dist'</code>
to generate the release candidate packages.
</li>
</ul></li>
<li>
<p>Tag SVN trunk for the release candidate:</p>
<source>svn copy -r ####### -m "Create tag forrest_&db;_rc# from trunk r#######" \
https://svn.apache.org/repos/asf/forrest/trunk \
https://svn.apache.org/repos/asf/forrest/tags/forrest_&db;_rc#</source>
<p>
where 'rc#' is the release candidate number (e.g. rc1, rc2).
</p>
<p>
See
<a href="http://svn.apache.org/repos/asf/forrest/tags/">http://svn.apache.org/repos/asf/forrest/tags/</a>
for examples of past tags.
</p>
</li>
<li>Unpack and test the relevant archive in a fresh new directory.
No point getting people to test if it is broken. You need this for your own testing and vote anyway.
Be sure to set FORREST_HOME and PATH properly for this release candidate location
i.e. ensure that you are not using your trunk working copy.
</li>
<li><p id="signing">
Sign the Release Candidate packages and create the *.asc and *.md5
files.
</p>
<p>
Here is one example when using gpg and openssl from the command
line.
</p>
<source>
gpg --output apache-forrest-&d;.tar.gz.asc \
--detach-sig --armor apache-forrest-&d;.tar.gz
gpg --verify apache-forrest-&d;.tar.gz.asc \
apache-forrest-&d;.tar.gz</source>
<p>
... should say "Good signature from ..."
</p>
<source>
openssl dgst -md5 -out apache-forrest-&d;.tar.gz.md5 \
apache-forrest-&d;.tar.gz
md5sum apache-forrest-&d;.tar.gz</source>
<p>
... output should match that of the md5 file.
</p></li>
<li><p>
Create a maintenance branch in SVN. This command can be run from
anywhere because it uses full URLs.
</p>
<source>
svn copy -r ##### -m "Create the &d; release branch from r#####" \
https://svn.apache.org/repos/asf/forrest/trunk \
https://svn.apache.org/repos/asf/forrest/branches/forrest_&db;_branch
where
'#####' is the SVN revision number that the branch was created from,
which was the revision that the release candidate packages were generated from.
(Remember that you recorded this number earlier.)
</source>
<p>
See
<a href="http://svn.apache.org/repos/asf/forrest/branches/">http://svn.apache.org/repos/asf/forrest/branches/</a>
for examples of past branches, e.g. forrest_&cb;_branch
</p></li>
</ol>
</section>
<section id="vote">
<title>Testing the release candidate and voting</title>
<p>
Get Forrest developers to test the actual packges on various platforms.
</p>
<ol>
<li>
Upload the release candidate packages and signatures to the dist/dev/forrest SVN.
See <a href="#PrepDistSvn">notes</a>.
</li>
<li><p>
Use template
<a href="test_and_vote_on_rel_cand.txt">test_and_vote_on_rel_cand.txt</a>
for an email to the dev-list asking all developers to test and vote.
Don't forget to modify the template, to specify the md5sums etc.
People need to tell you the md5sum to be sure that they have tested
and voted on the correct release candidate. This is especially
important if there has been more than one release candidate.
</p></li>
<li><p>
During this testing phase, the Release Manager should:
</p>
<ul>
<li>Make sure that people are reporting that the packages unpack on different systems without problems.</li>
<li>Make sure that people have followed the actual user instructions in the Forrest
distribution at README.txt and index.html</li>
<li>Encourage people to build some difficult sites.</li>
<li>Occasionally remind people about how much time remains for testing.</li>
</ul></li>
<li id="decisionRM">
If substantial problems are revealed (not just minor glitches) then co-ordinate their
fixing by other developers. Doing the fixing of issues is not the Release Manager's job.
Deciding what constitutes a "substantial" issue is entirely the RM's call.
Remember that there is still a code freeze, so don't let people be tempted to fix other
minor stuff or add some pet new feature that they have neglected. That can easily
introduce new problems.
Of course be as accommodating as possible.
</li>
<li>If necessary start again with <a href="#BuildDist">Building the packages</a> and build another
release candidate. Remember to do 'svn update' first and to record the
new SVN revision number.</li>
<li>Tally the votes and report the result to the dev list.</li>
</ol>
<note>
It is vitally important that people review and vote against the actual
final source release candidate source packages (and not just against their SVN working copy).
</note>
</section>
<section id="FinalRel">
<title>Finalizing the release</title>
<p>
When a good release candidate has been achieved and affirmed by the
vote, we'll finalize the release.
</p>
<ol>
<li><p>
If there have been changes to the trunk since the branch was
created, then merge trunk to branch. Remember to use a proper commit message
which includes the revision number used for the merge (see the SVN Book).
</p>
<fixme author="fso">
What is the purpose of this step? It doesn't seem to be right
because trunk may already contain parts of the next version. What we
should do is do all fixing of RC-problems in the rc-branch (same as
changing docs) then, on release, merge branch back into trunk to
integrate fixes and doc-changes back into trunk. wdyt?
</fixme>
<fixme author="dc">
It should not contain new functionality because we are in a code
freeze
</fixme></li>
<li><p>
Tag SVN by doing:
</p>
<source>svn copy -m "Create tag forrest_&db;_release from release branch" \
https://svn.apache.org/repos/asf/forrest/branches/forrest_&db;_branch \
https://svn.apache.org/repos/asf/forrest/tags/forrest_&db;_release</source>
<p>
See
<a href="http://svn.apache.org/repos/asf/forrest/tags/">http://svn.apache.org/repos/asf/forrest/tags/</a>
for examples of past tags, e.g. forrest_&cb;_release
</p>
<fixme author="fso">
If we change procedure to create an rc-branch this will become a
merge changes from trunk then rename rc-branch to final release
branch. right?
</fixme></li>
<li><p>
Tag the "site" SVN by doing:
</p>
<source>svn copy -m "Create tag forrest_&db;_release_site from site" \
https://svn.apache.org/repos/asf/forrest/site \
https://svn.apache.org/repos/asf/forrest/tags/forrest_&db;_release_site</source>
</li>
<li><p>
Announce the end of the code-freeze by sending the email-template
<a
href="announce_end_of_code_freeze.txt">announce_end_of_code_freeze.txt</a>
to the dev list.
</p></li>
</ol>
</section>
<section id="prepSite">
<title>Prepare the site-author docs for next development phase</title>
<note>
Before doing anything, skip to the next section to get the upload commenced.
</note>
<p>
While waiting for the mirrors to catch up, you will copy the docs set for the
next development, then call off the code-freeze. Do this ...
</p>
<ul>
<li>Create a copy of current dev-docs in trunk for the next development phase ...
<source>
cd site-author/content/xdocs
svn rm &nd;/index.xml
svn copy &dd;/* &nd;
svn copy pluginDocs/&dp; &np;</source>
</li>
<li>Edit site.xml and add a copy of the most current versioned section (e.g. &lt;v&ds;&gt;) above it.
Increment the first decimal of the section's name to reflect the next planned release (e.g. &lt;v&ns;&gt;).
Note that some of this was already done above.
</li>
<li><p>Edit site-author/status.xml to add a new <code>
<![CDATA[<release>]]>
</code> section above it for development on the next version.
Add one placeholder action for the next "upgrading" doc.
Do the same in the release branch for a possible x.y.1
</p>
<source>
&lt;release version="&nt;" date="not yet released">
&lt;introduction>
...
&lt;/release>
&lt;release version="&d;" date="&rdate;">
&lt;action
...</source></li>
<li>Return the "dev" note to &nd;/index.xml and to &nd;/upgrading_&nb;.xml
and add some of the orginal
general points that still apply.</li>
<li>Edit site-author/conf/cli.xconf to exclude the old docs again.</li>
<li>Add new plugins directories to the "forrest/site" SVN ...
<source>
svn mkdir pluginDocs/&np;
svn mkdir plugins/&n;</source></li>
<li><p>
Edit main/build.xml, increment the version and add a -dev tag:
around line 48: &lt;property name="version" value="&nt;"/>
</p></li>
<li><p>
Edit main/forrest.build.xml and update the version: around line 28:
</p>
<source>&lt;property name="version" value="&nt;"/></source></li>
<li>Edit version numbers in plugins/build.xml</li>
<li>Edit version numbers in tools/forrestbar</li>
<li>Increment the version numbers in the head of the xml source of this
"How_to_release" document. These are xml entities which display the
various version numbers in this document.</li>
<li><p>
Update the .htaccess file to redirect /docs/dev/ to the next
version, and do other changes noted in the .htaccess file. See
site-author/content/.htaccess
</p>
<fixme author="fso">
Need to go through .htaccess and clean up.
</fixme></li>
<li>
Update the release version number and release date in xdocs/index.xml
and site-author/content/doap.xml files.
Note that we have copies <a href="https://issues.apache.org/jira/browse/FOR-1210">FOR-1210</a>.
</li>
<li>
Commit all of the above changes.
</li>
<li>Remember do not publish the website yet.</li>
<li>Send email to the dev list to remind people about the new docs set &nd;
and that we don't update &pd; set. Also remind about the new release branch
of svn. See example email from the previous release.</li>
</ul>
</section>
<section id="UploadAndAnnounce">
<title>Upload and announcement</title>
<p>
In this phase we'll upload the new Release, wait for it to be available
on most mirror sites, publish the new website, then announce the release.
</p>
<p>
The reason for waiting, is because when you send the announcement, most of
the mirrors need to be up-to-date or your audience will grumble.
See various notes below, explaining the delays.
</p>
<note>
During this phase there is a lot of waiting. While things are happening
you can be doing some of the other tasks in this Upload section and in
the <a href="#cleanup">Cleanup</a> section.
</note>
<ol>
<li>
The signatures that were provided by people who voted +1
for the release may be appended to the *.asc file.
</li>
<li><p>
Use 'svn move' to upload the release: i.e. move the *.tar.gz, the *.zip, the *.asc
and *.md5 files, and the RELEASE-NOTES-&d;.txt from dist/dev/forrest SVN to dist/release/forrest SVN.
Note that SvnPubSub will automatically publish the release.
</p>
<p>
Leave the previous distribution there as well as the new one, until after
the announcement (because mirrors.html cannot be updated until most
mirrors have received the release).
</p>
<p>
See these tools to ensure that signatures and keys are okay:
<a href="http://people.apache.org/~henkp/checker/sig.html">pgp signature checker</a>
</p>
<p>
The process is documented at
<a href="http://people.apache.org/~bodewig/mirror.html"
>http://www.apache.org/~bodewig/mirror.html</a>
and
<a
href="http://www.apache.org/dev/#releases">http://www.apache.org/dev/#releases</a>
</p>
</li>
<li>
Wait for the various mirrors to pick up the new files.
</li>
<li>
Now that the propagation is underway, return to the previous
<a href="#prepSite">section</a> to continue with documentation preparation.
</li>
<li><p>
Wait for the various mirrors to pick up the new files.
</p>
<p>
For some mirrors, this takes only a few hours. However others are
slow. How long to wait is a tradeoff, e.g. 8 hours has been the norm.
</p>
<p>
See <a href="http://www.apache.org/mirrors/">Status of mirrors</a>.
It is a very useful service and fun to watch. See the "age histogram"
near the bottom.
</p>
<p>
Take note of the time that the eu.apache.org mirror is updated, then
compare each "mirror age" to that.
</p>
<p>
When you see that a good proportion of the mirrors have received the
release, then update the website, then send the announcement.
</p></li>
<li>Ensure that docs are *not* being excluded via site-author/conf/cli.xconf
as we need to re-build the whole site.</li>
<li>Before re-building and deploying the new website, check the time.
Remember that an 'svn up' happens our on server just after the hour, then
a bit later the rsync happens and the site is live about 20 minutes past.
This site deployment will take some time, mostly because you are actually
doing a fresh installation of a local forrestbot (it does 'svn co forrest/site').
</li>
<li><p>
Re-build and publish the Forrest website as normal. Be
sure to use the new version of trunk for building the docs. Refer to
<a href="site:howToPublishDocs">Publishing Forrest Documentation</a>
for details. Beware, there is a forrestbot bug whereby with a brand new
forrest installation, the first deploy only does the added files.
So do the "build and deploy" again.
</p></li>
<li>
Use the proxy trick to do a quick review before the publishing rsync
happens (see <a href="http://apache.org/dev/project-site.html">infra notes</a>).
There might still be a chance to re-deploy.
</li>
<li>After rsync, test the new Forrest <a href="http://forrest.apache.org/">website</a>
and the redirects
<a href="http://forrest.apache.org/docs/">f.a.o/docs/</a> and
<a href="http://forrest.apache.org/docs/dev/">f.a.o/docs/dev/</a> and the
<a href="http://forrest.apache.org/mirrors.cgi">download</a> page.
</li>
<li><p>
Send <a href="announce_release.txt">announce_release.txt</a> as email to
the Forrest user and dev list and the ASF-wide announce lists.
Sign the email (e.g. PGP).
</p>
<p>
See previous announcements for examples:
<a href="http://marc.info/?l=apache-announce&amp;m=129716364828886" rel="nofollow">0.9</a>
|
<a href="http://marc.info/?l=apache-announce&amp;m=117688881228702" rel="nofollow">0.8</a>
|
<a href="http://marc.info/?l=xml-apache-announce&amp;m=111960678028211" rel="nofollow">0.7</a>
|
<a href="http://marc.info/?l=xml-apache-announce&amp;m=109784461425740" rel="nofollow">0.6</a>
|
<a href="http://marc.info/?l=xml-apache-announce&amp;m=106541447606765" rel="nofollow">0.5.1</a>
|
<a href="http://marc.info/?l=xml-apache-announce&amp;m=106352706005681" rel="nofollow">0.5</a>
|
<a href="http://marc.info/?l=jakarta-announce&amp;m=104510734501302" rel="nofollow">0.4</a>
|
<a href="http://marc.info/?l=xml-apache-announce&amp;m=104399934113331" rel="nofollow">0.3</a>
|
<a href="http://marc.info/?l=xml-apache-announce&amp;m=103746673310573" rel="nofollow">0.2</a>
</p>
</li>
<li><p>
Do the Freshmeat announcement:
<a href="http://freshmeat.net/projects/forrest/" rel="nofollow">http://freshmeat.net/projects/forrest/</a>
</p></li>
<li>
Update the release information at our
<a href="http://en.wikipedia.org/wiki/Apache_Forrest" rel="nofollow">Wikipedia</a> page.
</li>
</ol>
</section>
<section id="cleanup">
<title>Cleanup</title>
<ol>
<li>Remove the old generated docs from SVN forrest/site/&pd;
which removes them from the website.
</li>
<li><p>
One day later, remove old distribution files from the dist/release/forrest SVN.
They have already been automatically archived at
archive.apache.org/dist/forrest/
</p>
<p>
Tidy the archive area, being very careful.
</p>
<p>
See Henk's cleanup
<a href="http://people.apache.org/~henkp/tlps/">notes</a>.
</p></li>
<li>Tidy up any "site:v&c;" references. These will refer to old documentation
that will be removed at the next release. Especially status.xml file will
have such. Generalise as many as possible.
</li>
<li><p>
Do some Jira administration (need to be in the jira-administrators
group)
</p>
<ol>
<li><p>
Tweak the "release" versions via "admin" interface at our Jira.
Do this ...
</p></li>
<li><p>
Re-name the VersionIds using "Manage Versions" then "Edit
details": e.g. &dt; is renamed to &d; and &n; becomes &nt;
</p></li>
<li><p>
Mark &d; as released using "Manage Versions".
Review the Issues for the old version.
</p></li>
<li><p>
Edit the filter "FOR-roadmap-dev" to refer to the new "&n;-dev" version.
</p></li>
</ol></li>
<li>Deploy the Forrest site again.
</li>
<li>
Review Henk's
<a href="http://people.apache.org/~henkp/">pgp checks and md5 checks</a>.
</li>
</ol>
</section>
<section id="conclusion">
<title>Conclusion</title>
<p>
All done!
</p>
<p>
Or perhaps not.. if you think of anything, please refine these
instructions.
</p>
</section>
</body>
</document>