<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
  <meta http-equiv="Content-Language" content="en"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <title>Release Guidelines</title>

  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
  <link href="/css/main.css" rel="stylesheet">
  <link href="/css/custom.css" rel="stylesheet">
  <link href="/highlighter/github-theme.css" rel="stylesheet">

  <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
  <script type="text/javascript" src="/js/community.js"></script>
</head>
<body>

<a href="http://github.com/apache/struts" class="github-ribbon">
  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</a>

<header>
  <nav>
    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
            Menu
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
        </div>
        <div id="struts-menu" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Home<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/index.html">Welcome</a></li>
                <li><a href="/download.cgi">Download</a></li>
                <li><a href="/releases.html">Releases</a></li>
                <li><a href="/announce.html">Announcements</a></li>
                <li><a href="http://www.apache.org/licenses/">License</a></li>
                <li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
                <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Support<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/mail.html">User Mailing List</a></li>
                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
                <li><a href="/security.html">Reporting Security Issues</a></li>
                <li class="divider"></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
                <li class="divider"></li>
                <li><a href="/maven/project-info.html">Maven Project Info</a></li>
                <li><a href="/maven/struts2-core/dependencies.html">Struts Core Dependencies</a></li>
                <li><a href="/maven/struts2-plugins/modules.html">Plugin Dependencies</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Documentation<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/birdseye.html">Birds Eye</a></li>
                <li><a href="/primer.html">Key Technologies</a></li>
                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
                <li class="divider"></li>
                <li><a href="/getting-started/">Getting Started</a></li>
                <li><a href="/security/">Security Guide</a></li>
                <li><a href="/core-developers/">Core Developers Guide</a></li>
                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
                <li><a href="/plugins/">Plugins</a></li>
                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
                <li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Contributing<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/youatstruts.html">You at Struts</a></li>
                <li><a href="/helping.html">How to Help FAQ</a></li>
                <li><a href="/dev-mail.html">Development Lists</a></li>
                <li><a href="/contributors/">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/submitting-patches.html">Submitting patches</a></li>
                <li><a href="/builds.html">Source Code and Builds</a></li>
                <li><a href="/coding-standards.html">Coding standards</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Contributors+Guide">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/release-guidelines.html">Release Guidelines</a></li>
                <li><a href="/bylaws.html">PMC Charter</a></li>
                <li><a href="/volunteers.html">Volunteers</a></li>
                <li><a href="https://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
                <li><a href="/updating-website.html">Updating the website</a></li>
              </ul>
            </li>
            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
          </ul>
        </div>
      </div>
    </div>
  </nav>
</header>


<article class="container">
  <section class="col-md-12">
    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/release-guidelines.md" title="Edit this page on GitHub">Edit on GitHub</a>
    
    <h1 class="no_toc" id="release-guidelines">Release Guidelines</h1>

<ul id="markdown-toc">
  <li><a href="#release-process" id="markdown-toc-release-process">Release Process</a></li>
  <li><a href="#coding-conventions-and-guidelines" id="markdown-toc-coding-conventions-and-guidelines">Coding Conventions and Guidelines</a></li>
  <li><a href="#clarifications" id="markdown-toc-clarifications">Clarifications</a></li>
</ul>

<p>This document describes the Apache Struts release process and our <a href="#Coding">coding conventions</a>,
which are applicable to all subprojects. Both stable and development releases are
<a href="releases.html">available for download.</a></p>

<h2 id="release-process">Release Process</h2>

<p>A <a href="http://commons.apache.org/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 Apache 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>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> - Issues, 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 <strong>required</strong> 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 <strong>must</strong> be mirrored.</li>
  <li>After announcing a release, remember to update the Downloads 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="https://www.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>

<h2 id="coding-conventions-and-guidelines">Coding Conventions and Guidelines</h2>

<p>Source code and documentation contributed to the Struts repositories should observe the:</p>
<ul>
  <li>The <a href="http://www.oracle.com/technetwork/java/codeconvtoc-136057.html">“Code Conventions for the Java Programming Language”</a>,
as published by Oracle.</li>
</ul>

<h2 id="clarifications">Clarifications</h2>
<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 <em>.*</em>).</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 class="highlighter-rouge">FIXME:</code> and <code class="highlighter-rouge">TODO:</code> tokens to mark follow up notes in code. You may also
include your Apache username and the date.</li>
  <li>Omit <code class="highlighter-rouge">@author</code> tags.</li>
  <li><code class="highlighter-rouge">@since</code> to document changes between Struts versions, as in <code class="highlighter-rouge">@since Struts 2.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.</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 test case 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 <code class="highlighter-rouge">&lt;head-slap/&gt;</code></li>
  <li>As files are updated from year to year, the copyright on each file should be extended to include the current
year. <em>You do not need to change the copyright year unless you change the file.</em>  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></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>,
(Except on Friday, when we favor <a href="http://news.bbc.co.uk/1/hi/uk/1326657.stm">Douglas Adams</a>).</li>
</ul>

<p>Next: <a href="bylaws.html">PMC Charter</a></p>

  </section>
</article>


<footer class="container">
  <div class="col-md-12">
    Copyright &copy; 2000-2018 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
    All Rights Reserved.
  </div>
  <div class="col-md-12">
    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
    trademarks of The Apache Software Foundation.
  </div>
  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
</footer>

<script>!function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (!d.getElementById(id)) {
    js = d.createElement(s);
    js.id = id;
    js.src = "//platform.twitter.com/widgets.js";
    fjs.parentNode.insertBefore(js, fjs);
  }
}(document, "script", "twitter-wjs");</script>
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>

<div id="fb-root"></div>

<script>(function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s);
  js.id = id;
  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


</body>
</html>
