blob: dc05beaa2a6c3d147e4611b33953397f638074a8 [file] [log] [blame]
<?xml version="1.0"?>
<!--
Copyright 1999-2006 The Apache Software Foundation
Licensed 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.
-->
<!--
// ======================================================================== 78
-->
<document>
<properties>
<title>Release Guidelines</title>
</properties>
<body>
<a name="status"/>
<section name="Release Guidelines">
<p>This document describes the Apache Struts
<a href="#Releases">release process</a>
and our
<a href="#Coding">coding conventions</a>
,
which are applicable to all subprojects.
Both stable and development releases are
<a href="downloads.html">available for download</a>
.
</p>
<a name="Releasing"/>
<subsection name="Release Process">
<p>A
<a href="http://jakarta.apache.org/commons/releases/versioning.html">
point release</a>
should be made before and after any product change that is
not a "fully-compatible change" (see link). This includes
moving a dependency from an internal package to an
external product, including products distributed through
the Jakarta Commons. We should place any fully-compatible
changes in the hands of the community before starting on a
change that is only "interface" or "external-interface"
compatible.
</p>
<p>
Any release should follow the same general process used by
the
<a href="http://jakarta.apache.org/site/decisions.html">
Jakarta Tomcat</a>
team
and must observe the
<a href="http://apache.org/dev/mirrors.html">Apache
Mirroring guidelines</a>
.
See also
<a href="http://wiki.apache.org/incubator/SigningReleases">
Signing Releases</a>
.
</p>
<p>Additional remarks:</p>
<ul>
<li>Every committer is encouraged to participate in the
release process, either as the release manager or a
helper. Committers may also share the release manager
role.</li>
<li>The release process can seem daunting when you review
it for the first time. But, essentially, it breaks
down into four phases of just a few steps each:
<ul>
<li>
<strong>Rolling</strong>
- Bugzilla, dependencies, release notes, JAR
manifest, licenses, copyrights, and build
(using the release target).
</li>
<li>
<strong>Testing</strong>
- JUnit, Cactus, web apps (for all "supported"
containers).
</li>
<li>
<strong>Voting</strong>
- Upload test build to internal directory,
post majority vote on DEV list as to release
grade: Alpha, Beta, General Availability.
</li>
<li>
<strong>Distributing</strong>
- Checksum, sign, mirror, update download
page, announce.
</li>
</ul>
</li>
<li>Committers are
<b>required</b>
to post a release plan before tagging the repository
and should wait the traditional 72 hours before
proceeding.
</li>
<li>A checklist format can be used for the
<a href="http://wiki.apache.org/struts/StrutsReleasePlans">
release plan</a>
, to help step through the process. The plan may be
maintained in the repository or on the
<a href="http://wiki.apache.org/struts/">Struts
wiki</a>
.
</li>
<li>Our dependencies on external JARs (including Commons
JARs) should be in line with our own release status.
Our nightly build can be dependant on another nightly
build. Our beta can be dependant on another beta (or
"release candidate"), but should avoid a dependance on
a nightly build.
Our General Availability release may only have
dependencies on other GA, final, or stable
releases.</li>
<li>Use your own discretion as to detail needed by the
Release Notes. A high-level description of the changes
is more important than providing uninterpreted detail.
At a minimum, new features and deprecations should be
summarized, since these are commonly asked questions.
Ideally, the release notes should be maintained
continuously for the nightly build so that we they do
not need to be assembled at the last minute.</li>
<li>Try building the distribution under prior version of
J2SE, if possible, to ensure that we are still
backwardly-compatible. But, our distributions should
be built using the
<strong>latest production release of J2SE</strong>
, to take advantage of all available compiler
enhancements.
</li>
<li>If you have multiple J2SE versions configured, run the
JUnit and Cactus tests using the same configuration
that will be used to build the distribution.</li>
<li>There is a "release" target in the buildfile that will
zip and tar the distribution. Before uploading the
distribution, extract the sample web applications and
deploy the WARs under each of the "supported"
containers (if you can). Play test each application
under each container to be sure they operate
nominally.</li>
<li>The test build can be posted to the internal
distribution directory (svn.apache.org/struts/) and
announced to the Struts DEV and PMC lists (only!). Do
not announce a test build on any other Apache lists or
link to it from an Apache website.</li>
<li>If the test build is voted to Alpha, Beta, or GA
status, the release can announced to the User list and
linked from the website.</li>
<li>Any formal release may be submitted for mirroring. All
GA releases
<b>must</b>
be mirrored.
</li>
<li>After announcing a release, remember to update the
Acquiring and Announcements pages. If the release is
to be mirrored, wait at least 24 hours after submittal
before making public announcements (as stated in the
<a href="http://apache.org/dev/mirrors.html">Apache
Mirroring guidelines</a>
).
</li>
<li>If a serious flaw if found in a test build or release,
it may be withdrawn by a majority vote of the PMC and
removed from ASF distribution channels.</li>
</ul>
</subsection>
<a name="Coding"/>
<subsection name="Coding Conventions and Guidelines">
<p>Source code and documentation contributed to the Struts
repositories should observe the:</p>
<ul>
<li>
The
"
<a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">
Code Conventions for the Java Programming
Language</a>
",
as published by Sun.
</li>
<li>
<a href="http://www.ambysoft.com/elementsJavaStyle.html">
Elements of Java Style</a>
, and
</li>
<li>
<a href="http://java.sun.com/j2se/javadoc/writingdoccomments/">
How to write Doc Comments</a>
</li>
</ul>
<p>as core references regarding the formatting of code and
documentation.</p>
<p>
<strong>Clarifications</strong>
</p>
<ul>
<li>First, "Observe the style of the original". Resist the
temptation to make stylistic changes for their own
sake. But, if you must reformat code, commit style
changes separately from code changes. Either change
the style, commit, and then change the code, or vice-
versa.</li>
<li>Set editors to replace tabs with spaces and do not
trim trailing spaces. Tabs confound the version
control alerts. Trimming trailing spaces creates
unnecessary changes.</li>
<li>Specify imported classes (do not use
<code>.*</code>
).
</li>
<li>Write all if/else statements as full blocks with each
clause within braces, unless the entire statement fits
on the same line.</li>
<li>Use
<code>FIXME:</code>
and
<code>TODO:</code>
tokens to mark follow up notes in code. You may also
include your Apache username and the date.
</li>
<li>Omit
<code>@author</code>
tags.
</li>
<li>Use
<code>@since</code>
to document changes between Struts versions, as in
<code>@since Struts 1.1</code>
.
</li>
<li>Wrap lines of code and JavaDoc at column 78. You can
include a "comment rule" in the source to help with
this.
<br/>
<small>//
------------------------------------------------------------------------
78</small>
</li>
<li>Please do your best to provide high-quality Javadocs
for all source code elements. Package overviews (aka
"Developer Guides") are also encouraged.</li>
<li>When working on a bugfix, please first write a
<a href="http://www.junit.org">JUnit</a>
test that proves the bug exists, and then use the test
to prove the bug is fixed. =:0)
</li>
<li>When working on an enhancement, please feel free to
use test-driven design and write the test first &lt;head-slap/&gt;.
For more about TDD, see the
<a href="http://sourceforge.net/projects/mockobjects">
MockObjects project</a>
.
</li>
<li>As files are updated from year to year, the copyright
on each file should be extended to include the current
year.
<b>You do not need to change the copyright year unless
you change the file.</b>
Every source file should include the ASF copyright
notice and current Apache License and copyright.
</li>
<li>Provide high-level API compatibility for any changes
made within the same major release series (#.x.x).
Changes which adversely affect compatibility should be
slotted for the next major release series
(++#.x.x).</li>
<li>Our favorite books about programming are
<a href="http://www.amazon.com/exec/obidos/ISBN=0201633612/apachesoftwar-20/">
Design Patterns</a>
,
<a href="http://www.amazon.com/exec/obidos/ISBN=0201485672/apachesoftwar-20/">
Refactoring</a>
, and
<a href="http://www.amazon.com/exec/obidos/ISBN=0735619670/apachesoftwar-20/">
Code Complete</a>
(2d).
</li>
<li>Our favorite book about open source development is the
<a href="http://www.amazon.com/exec/obidos/ISBN=1565927249/apachesoftwar-20/">
The Cathedral and the Bazaar</a>
.
</li>
<li>Our favorite science fiction author is
<a href="http://www.nitrosyncretic.com/rah/">Robert
Heinlein</a>
.
<a href="http://jargon.net/jargonfile/t/TANSTAAFL.html">
TANSTAAFL</a>
.
<br/>
(Except on Friday, when we favor
<a href="http://news.bbc.co.uk/1/hi/uk/1326657.stm">
Douglas Adams</a>
).
</li>
</ul>
</subsection>
</section>
<section>
<p class="right">Next:
<a href="javadoc.html">Javadoc Index</a>
</p>
</section>
</body>
</document>