<!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>Sample announcements</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-2021.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/contributors/sample-announcements.md" title="Edit this page on GitHub">Edit on GitHub</a>
    
    <a href="creating-and-signing-a-distribution" title="back to Creating and Signing a Distribution"><< back to Creating and Signing a Distribution</a>
    
    <h1 class="no_toc" id="sample-announcements">Sample announcements</h1>

<ul id="markdown-toc">
  <li><a href="#sample-struts-annotations-releasequality-vote" id="markdown-toc-sample-struts-annotations-releasequality-vote">Sample Struts Annotations Release/Quality Vote</a></li>
  <li><a href="#sample-test-build-announcement" id="markdown-toc-sample-test-build-announcement">Sample Test Build Announcement</a></li>
  <li><a href="#sample-releasequality-vote" id="markdown-toc-sample-releasequality-vote">Sample Release/Quality Vote</a></li>
  <li><a href="#sample-release-announcement" id="markdown-toc-sample-release-announcement">Sample Release Announcement</a></li>
  <li><a href="#fast-tracking-an-important-security-release" id="markdown-toc-fast-tracking-an-important-security-release">Fast-Tracking an Important Security Release</a></li>
</ul>

<h2 id="sample-struts-annotations-releasequality-vote">Sample Struts Annotations Release/Quality Vote</h2>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Subject: [VOTE] Struts Annotations 1.0.x Vote
The Struts Annotations 1.0.x test build is now available as a Maven
artifact. It is a dependency of Struts 2.x.y.

If you have had a chance to review the test build, please respond with
a vote on its quality:

[ ] Leave at test build
[ ] Alpha
[ ] Beta
[ ] General Availability (GA)

Everyone who has tested the build is invited to vote. Votes by PMC members are considered binding. A vote passes 
if there are at least three binding +1s and more +1s than -1s.

The vote will remain open for at least 72 hours, longer upon request.
</code></pre></div></div>

<h2 id="sample-test-build-announcement">Sample Test Build Announcement</h2>

<blockquote>
  <p>Test builds are only announced to the dev list. Announcements to the user list can only be made pursuant to a release 
vote with the consent of the PMC.</p>
</blockquote>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>The test build of Struts 2.0.3 is available.

No determination as to the quality ('alpha,' 'beta,' or 'GA') of Struts 2.0.3 has been made, and at this time it is 
simply a "test build".  We welcome any comments you may have, and will take all feedback into account if a quality vote 
is called for this build.

Release notes:
* [https://cwiki.apache.org/confluence/display/WW/Version+Notes+#.#.#]

Distribution:
* [https://dist.apache.org/repos/dist/dev/struts/#.#.#/]

Maven 2 staging repository:
* [https://repository.apache.org/content/groups/staging/]

We appreciate the time and effort everyone has put toward contributing code and documentation, posting to the mailing 
lists, and logging issues.
</code></pre></div></div>

<h2 id="sample-releasequality-vote">Sample Release/Quality Vote</h2>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Subject: [VOTE] Struts #.#.# Vote
The Struts #.#.# test build is now available.

Release notes:
* [https://cwiki.apache.org/confluence/display/WW/Version+Notes+#.#.#]

Distribution:
* [https://dist.apache.org/repos/dist/dev/struts/#.#.#/]

Maven 2 staging repository:
* [https://repository.apache.org/content/groups/staging/]

Once you have had a chance to review the test build, please respond with a vote on its quality:

[ ] Leave at test build
[ ] Alpha
[ ] Beta
[ ] General Availability (GA)

Everyone who has tested the build is invited to vote. Votes by PMC members are considered binding. A vote passes if 
there are at least three binding +1s and more +1s than -1s.

The vote will remain open for at least 72 hours, longer upon request. A vote can be amended at any time to upgrade 
or downgrade the quality of the release based on future experience. If an initial vote designates the build as "Beta", 
the release will be submitted for mirroring and announced to the user list. Once released as a public beta, subsequent 
quality votes on a build may be held on the user list.

As always, the act of voting carries certain obligations. A binding vote not only states an opinion, but means that 
the voter is agreeing to help do the work
</code></pre></div></div>

<h2 id="sample-release-announcement">Sample Release Announcement</h2>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Subject: [ANN] Struts #.#.# [GA | Beta] release available

The Apache Struts group is pleased to announce that Struts #.#.# is available as a "[Beta | General Availability]" 
release. [[The Beta designation indicates that we believe the distribution needs wider testing before being upgraded 
to a "General Availability" release. Your input is essential.] The GA designation is our highest quality grade.]

Apache Struts 2 is an elegant, extensible framework for creating enterprise-ready Java web applications. The framework 
is designed to streamline the full development cycle, from building, to deploying, to maintaining applications over time.

[This release includes one important security fix:]

All developers are strongly advised to update existing Struts 2 applications to Struts #.#.#.

Struts #.#.# is available in a full distribution, or as separate library, source, example and documentation distributions, 
from the releases page.
* http://struts.apache.org/download.cgi#struts###

The release is also available from the central Maven repository under Group ID "org.apache.struts".

The #.#.x series of the Apache Struts framework has a minimum requirement of the following specification versions:
* Java Servlet 2.4 and JavaServer Pages (JSP) 2.0
* Java 2 Standard Platform Edition (J2SE) 7

The release notes are available online at:
* https://cwiki.apache.org/confluence/display/WW/Version+Notes+#.#.#

Should any issues arise with your use of any version of the Struts framework, please post your comments to the user list,
and, if appropriate, file a tracking ticket.appropriate, file a tracking ticket:
* https://issues.apache.org/jira/browse/WW

- The Apache Struts group.
</code></pre></div></div>

<h2 id="fast-tracking-an-important-security-release">Fast-Tracking an Important Security Release</h2>

<blockquote>
  <p>When a serious security issue  arises, we should try to create a #.#.#.# branch from the last GA release, and apply 
to that branch only the security patch.</p>
</blockquote>

<ul>
  <li>If the patch first applies to some other dependency, implore the other group to do the same, to avoid side-effects 
from other changes.</li>
  <li>If the release manager would like to “fast track” a vote, so as to make a security fix available quickly, the preferred 
procedure is to
    <ul>
      <li>Include the term “fast-track” in the subject, as in <code class="highlighter-rouge">[VOTE] Struts 2.0.9.1 quality (fast track)</code></li>
      <li>In the vote message, specify voting terms like:</li>
    </ul>
  </li>
</ul>

<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>The Struts #.#.#.# test build is now available.

(optional (in case of the presence of security bulletin)
It includes the latest security patches which fix two possible vulnerabilities:
* ...
* ...

For details and the rationale behind these changes, please consult the
corresponding security bulletins:
* https://cwiki.apache.org/confluence/display/WW/S2-XXX
* https://cwiki.apache.org/confluence/display/WW/S2-XXX

Please note that currently these bulletins and the release notes are
only visible to logged-in users with the struts-committer role. This is
a needed requirement to control disclosure until the actual release is
announced.
(/optional)

Release notes:
* [https://cwiki.apache.org/confluence/display/WW/Version+Notes+#.#.#.#]

Distribution:
* [https://dist.apache.org/repos/dist/dev/struts/#.#.#.#/]

Maven 2 staging repository:
* [https://repository.apache.org/content/groups/staging/]

Once you have had a chance to review the test build, please respond with a vote on its quality:

[ ] Leave at test build
[ ] Alpha
[ ] Beta
[ ] General Availability (GA)

Everyone who has tested the build is invited to vote. Votes by PMC members are considered binding. A vote passes 
if there are at least three binding +1s and more +1s than -1s.

This is a "fast-track" release vote. If we have a positive vote after 24 hours (at least three binding +1s and more +1s 
than -1s), the release may be submitted for mirroring and announced to the usual channels.

The website download link will include the mirroring timestamp parameter [1], which limits the selection of mirrors 
to those that have been refreshed since the indicated time and date. (After 24 hours, we *must* remove the timestamp
parameter from the website link, to avoid unnecessary server load.) In the case of a fast-track release, the email 
announcement will not link directly to &lt;download.cgi&gt;, but to &lt;downloads.html&gt;, so that we can control use of the timestamp 
parameter.

[1] &lt;[http://apache.org/dev/mirrors.html#use|http://apache.org/dev/mirrors.html#use]&gt;

- The Apache Struts group.
</code></pre></div></div>

<p>Please be sure to update <a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a> accordingly 
as described above.</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>
