| <?xml version="1.0"?> |
| <document url="./releases.xml"> |
| |
| <!-- |
| // ======================================================================== 78 |
| --> |
| |
| <properties> |
| <title>Release Guidelines - The Apache Struts Web Application Framework</title> |
| </properties> |
| |
| <body> |
| <section href="status" name="Release Guidelines"> |
| |
| <p> |
| This document describes the Struts <a href="#Releases">release process</a> and our <a href="#Coding">coding |
| conventions</a>. Both stable and development releases are <a href="acquiring.html">available for download</a>. |
| </p> |
| |
| </section> |
| |
| <section href="Releases" name="Release Guidelines"> |
| |
| <p> |
| A <a href="http://jakarta.apache.org/commons/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> |
| A fully-compatible point release does not always need a "preview" beta or milestone release. |
| If appropriate, a Release Candidate can be cut, uploaded to the Release Manager's home directory |
| on svn.apache.org (~/public_html), and voted to be released to the general public from there. |
| </p> |
| |
| <p> |
| Any release should follow the same general process used by the Jakarta Commons |
| and the Apache HTTP Server project. |
| </p> |
| |
| <ul> |
| <li> |
| <a href="http://jakarta.apache.org/commons/releases/">Releasing Common Components</a> |
| </li> |
| <li> |
| <a href="http://wiki.apache.org/incubator/SigningReleases">Signing a release version</a> |
| <ul> |
| <li> |
| <small>The MD5 tool is installed on daedalus, and you can create the digests for Struts releases |
| there.</small> |
| </li> |
| </ul> |
| </li> |
| <li> |
| <a href="http://httpd.apache.org/dev/release.html">Apache HTTPD Server Release Guidelines</a> |
| </li> |
| </ul> |
| |
| <p> |
| Additional remarks: |
| </p> |
| |
| <ul> |
| <li> |
| The release process can seem daunting when you review it for the first time. |
| But, essentially, it breaks down into three phases of just a few steps each: |
| <ul> |
| <li>Building - Bugzilla, dependencies, release notes, JAR manifest, licenses, copyrights, and build |
| (using the release target).</li> |
| <li>Testing - JUnit, Cactus, web apps (for all "supported" containers). </li> |
| <li>Distributing - Checksum, sign, mirror, release, update Struts site, update Jakarta site, |
| announce.</li> |
| </ul> |
| </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, |
| but should avoid a dependance on a nightly build. |
| Our release candidate can have a dependance on another RC, |
| but should not have a dependance on a beta (and certainly <strong>not</strong> a nightly build). |
| Our final release can only have dependencies on other final 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 do not need to quickly assembled them on the eve of a Release. |
| </li> |
| <li> |
| Test building the distribution under prior version of J2SE, if possible, |
| to ensure that we are still backwardly-compatible. |
| But, our Release distribution should be built using the <strong>latest release of J2SE</strong>, |
| to take advantage of all available compiler enhancements. |
| </li> |
| <li> |
| Before building the release, run the JUnit and Cactus tests using the same |
| configuration used that will be used to build the Release distribution. |
| </li> |
| <li> |
| There is a "release" target in the buildfile that will zip and tar the releases. |
| Before uploading the release, extract the sample web applications and deploy the WARs under |
| each of the "supported" containers. |
| Play test each application under each container to be sure they operate nominally. |
| </li> |
| <li> |
| Be sure to copy the pmc@jakarta.apache.org list on any release announcement. |
| </li> |
| <li> |
| Remember to update the <a href="status.html">Status section of the Roadmap page</a> |
| once a release is available. |
| </li> |
| <li> |
| By the way, the nightly builds are being created on a machine of Craig McClanahan's. |
| If there are problems with a nightly build that seem infrastructure related, |
| Craig is the one to contact. |
| </li> |
| </ul> |
| |
| </section> |
| |
| |
| <section href="Coding" name="Coding Conventions and Guidelines"> |
| |
| <p> |
| Source code and documentation contributed to the Struts repositories |
| should observe the: |
| </p> |
| |
| <ul> |
| |
| <li> |
| <a href="http://jakarta.apache.org/site/source.html">Jakarta project |
| guidelines</a>, |
| </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. |
| </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. |
| <code>:FIXME: we need to do this sometime (husted 2002-11-14)</code> |
| </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 <head-slap/>. |
| 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. |
| You do not need to change the copyright year unless you change the file. |
| Every source file should include the current Apache License and copyright. |
| </li> |
| |
| <li> |
| Provide high-level API compatibility for any changes made within the same |
| major release series (#.x). |
| Changes which adversely affect compatibility should be slotted for the |
| next major release series (++#.x). |
| </li> |
| |
| <li> |
| Our favorite books about programming are |
| <a href="http://www.amazon.com/exec/obidos/ISBN=0201633612/hitchhikeguidetoA/"> |
| Design Patterns</a> and |
| <a href="http://www.amazon.com/exec/obidos/ISBN=0201485672/hitchhikeguidetoA/"> |
| Refactoring</a>. |
| </li> |
| |
| <li> |
| Our favorite book about open source development is the |
| <a href="http://www.amazon.com/exec/obidos/ISBN=1565927249/hitchhikeguidetoA/"> |
| 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://www.tuxedo.org/~esr/jargon/html/entry/TANSTAAFL.html"> |
| TANSTAAFL</a>.<br /> |
| (Except on Friday, when we favor |
| <a href="http://carbon.cudenver.edu/~mstilman/zaphod/">Douglas |
| Adams</a>. |
| <a href="http://news.bbc.co.uk/1/hi/uk/1326657.stm"> |
| SLATFATF</a>.) |
| </li> |
| |
| </ul> |
| |
| </section> |
| |
| <section> |
| <p class="right"> |
| Next: <a href="news/index.html">News and Status</a> |
| </p> |
| </section> |
| |
| </body></document> |