You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2020/10/04 07:50:44 UTC

[struts-site] branch master updated: Contributors guide (#147)

This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts-site.git


The following commit(s) were added to refs/heads/master by this push:
     new 192213d  Contributors guide (#147)
192213d is described below

commit 192213dc05bbd0eec83dc935ec690d17927c840d
Author: Lukasz Lenart <lu...@apache.org>
AuthorDate: Sun Oct 4 09:50:34 2020 +0200

    Contributors guide (#147)
    
    * Creates Contributors Guide starting page
    
    * Drops WIP
    
    * Adds how to build
    
    * Adds Contributors Guide to the menu
    
    * Adding section how create a release
    
    * Uses the latest Maven summary
    
    * Adds One time steps page
    
    * Adds Sample Announcements page
    
    * Converts new pages related to creating distro
    
    * Uses proper back navigation
    
    * Converts release guidelines
    
    * Small updates
    
    * Adds missing pages
---
 source/_includes/header.html                       |   1 +
 source/contributors/building-fast-track-release.md |  48 +++++
 source/contributors/building-normal-release.md     | 229 +++++++++++++++++++++
 source/contributors/building-struts-annotations.md |  46 +++++
 source/contributors/building-struts-master.md      | 112 ++++++++++
 .../building-the-framework-from-source.md          |  70 +++++++
 source/contributors/building-with-maven.md         | 189 +++++++++++++++++
 .../creating-and-signing-a-distribution.md         |  37 ++++
 source/contributors/documentation-style-guide.md   | 214 +++++++++++++++++++
 source/contributors/editing-the-documentation.md   |  51 +++++
 source/contributors/index.md                       |  36 ++++
 source/contributors/obtaining-an-idea-license.md   |  29 +++
 source/contributors/one-time-steps.md              | 128 ++++++++++++
 source/contributors/precise-error-reporting.md     |  31 +++
 source/contributors/sample-announcements.md        | 196 ++++++++++++++++++
 source/core-developers/index.md                    |   2 +-
 source/updating-website.md                         |   6 +-
 17 files changed, 1421 insertions(+), 4 deletions(-)

diff --git a/source/_includes/header.html b/source/_includes/header.html
index 53cb691..25b579f 100644
--- a/source/_includes/header.html
+++ b/source/_includes/header.html
@@ -79,6 +79,7 @@
                 <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>
diff --git a/source/contributors/building-fast-track-release.md b/source/contributors/building-fast-track-release.md
new file mode 100644
index 0000000..7983c9d
--- /dev/null
+++ b/source/contributors/building-fast-track-release.md
@@ -0,0 +1,48 @@
+---
+layout: default
+title: Building Fast Track Release
+parent:
+  title: Creating and Signing a Distribution
+  url: creating-and-signing-a-distribution
+---
+
+# Building fast track release
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## Getting ready
+
+Follow the same steps as for [Normal Release](building-normal-release)
+
+Please be aware you should create a new Security Bulletin in secret, you should assign only `struts-committers` group 
+to be visible for. If the release will fix a - hopefully yet undisclosed - security issue, you must update 
+the [Security Bulletins](https://cwiki.apache.org/confluence/display/WW/Security+Bulletins) page. It also needs to be 
+accessible only by members of the `struts-committers` group.
+
+## Apply security patch
+
+Apply and commit security patch.
+
+## Next steps
+
+Follow the same steps as for [Normal Release](building-normal-release)
+
+- Prepare release
+- Perform the release
+- Jira stuff
+- Vote on it
+  - Post a release/quality vote to the dev list (and **only** the dev list). The example mail is on [Sample announcements](sample-announcements)
+    page. Include the term "fast-track" in the subject, as: [VOTE] Struts 2.0.9.1 quality (fast track).
+    Please be aware this vote should be open only 24h! 
+- Copy files
+- Promote release
+- Clean up old releases
+- Wait for rsync
+- Update site
+- Post announcements
+  - Announce the release and the vulnerability. Typically, this will be sent to the reporter, the project's users list 
+    (user@struts.a.o), the project's dev list (dev@struts.a.o), the project's announce list (announcements@struts.a.o), 
+    security@apache.org, full-disclosure@lists.grok.org.uk and bugtraq@securityfocus.com.
+    Samples are available at [Sample announcements](sample-announcements) page.
diff --git a/source/contributors/building-normal-release.md b/source/contributors/building-normal-release.md
new file mode 100644
index 0000000..c154b18
--- /dev/null
+++ b/source/contributors/building-normal-release.md
@@ -0,0 +1,229 @@
+---
+layout: default
+title: Building Normal Release
+parent:
+  title: Creating and Signing a Distribution
+  url: creating-and-signing-a-distribution
+---
+
+# Building Normal Release
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## Getting ready
+
+1. Ensure that the master POM and Struts Annotations have current releases
+2. Review JIRA for any issues without a fix version set, and for any issues that should be resolved for the pending release.
+3. Ensure that there are no `repositories` or `pluginRepositories` listed in the poms.
+4. Release the upcoming version in JIRA (under Administration/Manage Releases) and tag the release date
+5. Add next milestone version to the JIRA roadmap
+6. Create DONE and TODO filters for the new version, share with all, and remove obsolete TODO filter
+7. Create a new Version Notes page in Confluence, link from [Migration Guide](https://cwiki.apache.org/confluence/display/WW/Migration+Guide),
+  and link to prior release page and JIRA DONE filters of the version to release
+
+> Please remember to keep BOM subproject in sync - <struts-version.version>X.X.X</struts-version.version> - must be 
+> the same as the parent pom. The latest Maven version handles this case very well, but it's worth checking if the bits 
+> are in sync.
+
+> If needed, you can use [Versions Maven Plugin](http://mojo.codehaus.org/versions-maven-plugin/) to set -SNAPSHOT version
+> in all poms, like below:
+> `mvn versions:set -DnewVersion=2.3.16.1-SNAPSHOT -DgenerateBackupPoms=false`
+
+## Prepare release
+
+Tag the release by using the "release:prepare" goal of Maven:
+
+```
+mvn release:prepare -DautoVersionSubmodules=true
+```
+
+For a [dry run](http://maven.apache.org/plugins/maven-release-plugin/usage.html), add `-DdryRun=true`. If you do a dry 
+run, use `mvn release:clean` to clean up after you have looked at the output.
+
+When prompted for the SCM tag name, follow this pattern: `STRUTS_2_5_[PATCH_VERSION]`
+
+> If you get an error message, try to re-run `mvn release:prepare -DautoVersionSubmodules=true` command again,
+> -Dresume flag is set to true by default and the plugin will resume the release process from where it failed before.
+
+Follow the link to get [more information](http://maven.apache.org/plugins/maven-release-plugin/examples/prepare-release.html)
+about performed operation by release plugin.
+
+## Perform the release
+
+```
+mvn release:perform -DretryFailedDeploymentCount=10
+```
+
+Follow the link to get [more information](http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html)
+about performed operation by release plugin. After this step the artifacts will be hosted by [Nexus](http://repository.apache.org/).
+ 
+The `-DretryFailedDeploymentCount=10` is needed when there are problems with network connection (used just in case).
+
+If you need to run perform again, (or in a different box), do:
+
+```
+git checkout STRUTS_2_5_[PATCH_VERSION]
+mvn javadoc:javadoc deploy --no-plugin-updates -DperformRelease=true -Papache-release
+```
+
+Next, log in to [Nexus](http://repository.apache.org/) and **close** staging repository.
+
+> Repository is identified by user name and public IP address, so if in meantime your IP changed, a new staging repository 
+> will be created, so you must drop the old one (check the dates!) - if IP is the same, artifacts will be uploaded 
+> to the same repository as first attempt.
+
+## Move the assemblies
+
+To simplify testing, the assemblies have to be moved to the `https://dist.apache.org/repos/dist/dev/struts/$VERSION` dir.
+
+After closing repository in Nexus, check if the release files are available from staging repository as bellow:
+
+```
+https://repository.apache.org/content/groups/staging/org/apache/struts/struts2-assembly/$VERSION/
+```
+
+In order to move the assemblies login to people.apache.org and execute the following code:
+
+```
+#!/bin/sh
+
+#create the destination directory
+echo "Creating working dir $VERSION"
+mkdir $VERSION
+cd $VERSION
+
+# get the distro
+echo "Getting distro $VERSION"
+wget -erobots=off -nv  -l 1 --accept=jar,zip,md5,sha1,asc -r --no-check-certificate -nd -nH https://repository.apache.org/content/groups/staging/org/apache/struts/struts2-assembly/$VERSION
+
+# rename files
+echo "Renaming files"
+for f in *2-assembly*.zip*
+do
+ mv $f `echo $f | sed s/2-assembly//g`
+done
+
+# remove unneeded files
+echo "Removing uneeded files"
+for f in struts2-assembly-*.pom*
+do
+ rm $f
+done
+
+# remove uneeded hashes
+echo "Removing uneeded files"
+rm *.md5
+rm *.sha1
+
+# generates sha signatures
+echo "Generating SHA signatures"
+for f in *.zip
+do
+  shasum -a 256 $f > $f.sha256
+  shasum -a 512 $f > $f.sha512
+done
+
+cd ..
+
+# checking out repo
+echo "Publishing artifacts for test"
+svn --no-auth-cache co --depth empty https://dist.apache.org/repos/dist/dev/struts/ struts-dev
+mv $VERSION struts-dev/
+cd struts-dev
+svn add --force ./
+svn --no-auth-cache commit -m "Updates test release $VERSION"
+
+cd ..
+rm -r struts-dev
+
+echo "Done!"
+```
+
+After this step artifacts are available for test here [https://dist.apache.org/repos/dist/dev/struts/](https://dist.apache.org/repos/dist/dev/struts/)
+
+## Announce availability
+
+Send a short e-mail to `dev@struts.a.o` informing about the new packages and to give people enough time to test 
+the distribution (actual bits). Wait around a week before posting Vote. If no show-stoppers reported, start a vote thread 
+for build quality designation.
+
+## Push changes
+
+Do not forget to push your local changes to the Apache repo
+
+```
+git push
+```
+
+## Vote on it
+
+Post a release/quality vote to the dev list (and **only** the dev list). The example mail is on [Sample announcements](sample-announcements)
+page. If the vote result is for an ASF release (i.e. not test build), update site, announce. If the vote result is for GA, 
+push to central.
+
+## Copy files
+
+After the vote, if the distribution is being mirrored (there was a favourable release vote) move all the artefacts from 
+`dev` folder into `release` folder:
+
+```
+svn mv https://dist.apache.org/repos/dist/dev/struts/$VERSION/ https://dist.apache.org/repos/dist/release/struts/  
+```
+
+## Promote release
+
+Log in again to [Nexus](http://repository.apache.org/) and **release** the repository, it will be automatically 
+replicated across Maven Repositories. See [Releasing a Maven-based project](http://maven.apache.org/developers/release/apache-release.html)
+for further details.
+
+## Clean up old releases
+
+Remove the old files from under [https://dist.apache.org/repos/dist/release/struts/](https://dist.apache.org/repos/dist/release/struts/)
+to synchronise only the latest version with peers. All the files from [https://dist.apache.org/repos/dist/release/struts/](https://dist.apache.org/repos/dist/release/struts/)
+are always mirrored to [http://archive.apache.org/dist/struts/](http://archive.apache.org/dist/struts/). You can use the below command:
+
+```
+svn del https://dist.apache.org/repos/dist/release/struts/2.3.x/
+```
+
+where `x` is the previous version to remove (or one more previous to keep current and one version back).
+
+## Wait for rsync
+
+Wait 2-4 hours before proceeding.
+
+## Update site
+
+Make sure you have linked your Apache and Github account in Apache GitBox (Dual Master Git allowing you to directly 
+push to GitHub), see [https://gitbox.apache.org/setup/](https://gitbox.apache.org/setup/)
+
+Please follow [the guideline](../updating-website) how to update the website, below are additional steps that should be performed:
+
+- If a new DTD was defined, add it to `source/dtds`
+- Update current version and release date in `struts-site/_config.yml`
+- Update page source files
+  - `struts-site/source/announce.md` (if applicable, refer also to corresponding security bulletin)
+  - `struts-site/source/downloads.html` (Prior Releases section)
+  - `struts-site/source/index.html` (some parts will updated automatically with values defined in `_config.yml`)
+- You can generate the website locally with Docker Jekyll image
+  - you must have Docker installed and running
+  - if you are doing this the first time, download the official Struts image to build the site from 
+    [https://hub.docker.com/r/theapachestruts/struts-site-jekyll/](https://hub.docker.com/r/theapachestruts/struts-site-jekyll/)
+  - now you can use one of the bash scripts already provided in the `struts-site`:
+    - `docker-run.sh` - used with Bash
+    - `docker-run.fish` - to use with Fish Shell (via `fish docker-run.fish`)
+  - now you can check the generated site at http://localhost:4000
+
+Please remember about updating JavaDocs using a dedicated Jenkins job as described in [the guideline](../updating-website).
+
+## Post announcements
+
+We leave this as the last step, once the artifacts have had time to sync up on the mirrors. Target it to: 
+
+ - user@struts.a.o
+  - announcements@struts.a.o
+  - announce@a.o
+   
+samples are available at [Sample announcements](sample-announcements) page.
diff --git a/source/contributors/building-struts-annotations.md b/source/contributors/building-struts-annotations.md
new file mode 100644
index 0000000..50da0e7
--- /dev/null
+++ b/source/contributors/building-struts-annotations.md
@@ -0,0 +1,46 @@
+---
+layout: default
+title: Building Struts Master
+parent:
+  title: Creating and Signing a Distribution
+  url: creating-and-signing-a-distribution
+---
+
+# Building Struts Annotations
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## Obtain a fresh check out of struts annotations
+
+```
+git clons https://gitbox.apache.org/repos/asf/struts-annotations.git
+```
+
+or you can just fetch & pull the latest changes
+
+## Prepare release
+
+```
+mvn release:prepare
+```
+
+Use the following pattern for the tag name: `STRUTS_ANNOTATIONS_[VERSION]`
+
+## Perform release
+
+```
+mvn release:perform
+```
+
+Log in to [Nexus](http://repository.apache.org/) and **close** the staging repository.
+
+## Send a VOTE email
+
+A sample template is at [Sample announcements](sample-announcements) page (and DO wait for the 72 hours period)
+
+## Promote release
+
+If the Vote passed log in again to [Nexus](http://repository.apache.org/) and **promote** the repository - it will be 
+automatically synced with Maven Central Repository.
diff --git a/source/contributors/building-struts-master.md b/source/contributors/building-struts-master.md
new file mode 100644
index 0000000..fcf4548
--- /dev/null
+++ b/source/contributors/building-struts-master.md
@@ -0,0 +1,112 @@
+---
+layout: default
+title: Building Struts Master
+parent:
+  title: Creating and Signing a Distribution
+  url: creating-and-signing-a-distribution
+---
+
+# Building Struts Master
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## Building Steps (Struts)
+
+### Obtain a fresh checkout
+
+```
+git clone https://gitbox.apache.org/repos/asf/struts-master.git
+```
+
+### Change site target
+
+Apply needed changes, in most cases it will be upgrade to the latest Apache Parent POM, eg. from 9 to 10,
+commit the change.
+
+### Prepare release
+
+Tag the release by using the "release:prepare" goal of Maven: 
+
+```
+mvn release:prepare -DautoVersionSubmodules=true
+```
+
+For a [dry run](http://maven.apache.org/plugins/maven-release-plugin/usage.html), add `-DdryRun=true`. If you do a dry run,
+use `mvn release:clean` to clean up after you have looked at the output. 
+
+When prompted for the SCM tag name, follow this pattern: `STRUTS_MASTER_[PATCH_VERSION]`
+
+If for some reason, the release plugin might fail to tag the release, if it fails, run:
+
+```
+mvn release:prepare -Dresume 
+```
+
+This step will ([more information](http://maven.apache.org/plugins/maven-release-plugin/examples/prepare-release.html)):
+
+- Check that there are no uncommitted changes in the sources
+- Check that there are no SNAPSHOT dependencies
+- Change the version in the poms from x-SNAPSHOT to a new version (you will be prompted for the versions to use)
+- Transform the SCM information in the POM to include the final destination of the tag
+- Run the project tests against the modified POMs to confirm everything is in working order
+- Commit the modified POMs
+- Tag the code in the SCM with a version name (this will be prompted for)
+- Bump the version in the POMs to a new value y-SNAPSHOT (these values will also be prompted for)
+- Commit the modified POMs
+
+### Perform the release
+
+```
+mvn release:perform
+```
+
+This step will ([more information](http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html)):
+
+- Checkout from an SCM URL with optional tag
+- Run the predefined Maven goals to release the project (by default, deploy site-deploy)
+
+After this step the artifacts will be hosted by [Nexus](http://repository.apache.org/)
+
+If you need to run perform again, (or in a different box), do:
+
+```
+git co tags/$VERSION
+mvn deploy site-deploy --no-plugin-updates -DperformRelease=true 
+```
+
+Next, log in to [Nexus](http://repository.apache.org/) and **close** staging repository.
+
+### Announce availability
+
+Send a short e-mail to `dev@struts.a.o` informing about the new packages and to give people enough time to test 
+the distribution (actual bits). Wait around a week before posting Vote. If no show-stoppers reported, start a vote 
+thread for build quality designation.
+
+The new build is available from staging repository: `https://repository.apache.org/content/groups/staging/org/apache/struts/struts-master/[PATCH_VERSION]/`
+
+### Vote on it
+
+Post a release/quality vote to the dev list (and **only** the dev list). The example mail is on [Sample Announcements](sample-announcements) page. 
+
+If the vote result is for an ASF release (i.e. not test build), update site, announce. If the vote result is for GA, push to central.
+
+### Promote release
+
+Log in again to [Nexus](http://repository.apache.org/) and **release** the repository, it will be automatically replicated across Maven Repositories
+
+See [Releasing a Maven-based project](http://maven.apache.org/developers/release/apache-release.html) for further details.
+
+### Wait for rsync
+
+Wait 2-6 hours before proceeding. 
+
+### Post announcements
+
+We leave this as the last step, once the artifacts have had time to sync up on the mirrors. Target it to:
+
+- user@struts.a.o
+- announcements@struts.a.o
+ 
+samples are available at [Sample announcements](sample-announcements) page.
diff --git a/source/contributors/building-the-framework-from-source.md b/source/contributors/building-the-framework-from-source.md
new file mode 100644
index 0000000..0f1fe95
--- /dev/null
+++ b/source/contributors/building-the-framework-from-source.md
@@ -0,0 +1,70 @@
+---
+layout: default
+title: Building the Framework from Source
+parent:
+    title: Contributors Guide
+    url: index.html
+---
+
+# Building the Framework from Source
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## Why Build?
+
+Most developers will never need to build the framework from source. The distribution package contains everything 
+a developer needs to get started and become productive with the framework. For more on how to go to work with 
+the distributed binaries right away, see _Ready, Set, Go\!_ . However, there are situations when someone will want 
+to build the framework from scratch. You may want to try out new tweaks and patches, or you might want to try writing 
+your own tweak or patch.
+
+> If you just want to use the latest development build, perhaps because a patch you need has been applied, you can 
+> also [download a nightly build](http://ci.apache.org/projects/struts/nightlies/).
+
+## Getting the Sources
+
+The source code for the framework is available as a distribution you can download directly and from the source code repository.
+
+## Distribution
+
+The distributions of the framework contain all sources, as well as all needed libraries for building JARs and running. 
+Distributions can be downloaded from the [Apache Struts project](../../downloads)
+
+## Repository (Git)
+
+Use [Git](https://git-scm.com/) to checkout the source code.
+
+```
+> cd Projects\Apache\
+> git clone https://gitbox.apache.org/repos/asf/struts.git 
+```
+
+## Building with Maven
+
+The default build environment is Maven. You can either install Maven 3 or use Maven Wrapper delivered with the source code.
+Change to your framework home directory: 
+
+```
+cd Projects\Apache\struts
+```
+
+and run Maven
+
+```
+mvn clean install
+```
+
+or run using Maven Wrapper
+
+```
+./mvnw clean install
+```
+
+That will take care of the basic maven build. There is a bunch more that you can do. Checkout out [Building with Maven](building-with-maven) 
+for more information.
+
+## JDK/JRE Compatibility
+
+The framework requires JDK 1.8 to build.
diff --git a/source/contributors/building-with-maven.md b/source/contributors/building-with-maven.md
new file mode 100644
index 0000000..7dc408c
--- /dev/null
+++ b/source/contributors/building-with-maven.md
@@ -0,0 +1,189 @@
+---
+layout: default
+title: Building with Maven
+parent:
+  title: Contributors Guide
+  url: index.html
+---
+
+# Building with Maven
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+[Maven 3.0.0 or later](http://maven.apache.org) is required to build Struts 2
+
+First, let's review some Maven basics. Maven uses the notion of a build _life-cycle_ to which plugins can attach. 
+Plugins are similar to Ant tasks. When a Maven build is invoked, we specify a point in the life-cycle up to which 
+the build _should_ proceed. The _compile_ phase comes before _test_ , and _test_ comes before _package_ , and _package_ 
+comes before _install_ . Once we have Maven setup, we can invoke the Struts build, and specify which phase the build should use.
+
+## Installing
+
+The _install_ phase builds up the project ("package"), and installs any JARs it needs into your local repository, e.g.: 
+
+```
+~/.m2/repository
+```
+
+Once installed, the JARs can be used by any other Maven project you build.  The _install_ phase is the **default** phase 
+if none is specified.
+
+To run a basic install, change to the root of the source distribution, and enter
+
+```
+mvn
+```
+
+That's it! Maven will download any dependencies the build needs; run all unit tests; package up the JARs; then install th
+e new JARs locally. For your convenience, copies of the JARs can be found in the _target_ directories of each module. 
+For example, after the build, the main JAR can found at 
+
+```
+core/target/struts2-core-2.0-SNAPSHOT.jar
+```
+
+> Sometimes, licensing restrictions prevent Maven from downloading all the JARs that a build might need. For example, 
+> JavaMail and Activation, can only be downloaded from Sun. When this happens, Maven will display a helpful message 
+> that explains how to install these JARs manually. After downloading the required JAR, follow the instructions 
+> to install it to the your local repository. Once installed, the JAR is available to all your Maven builds, not just Struts.
+
+**Initial Build Successful**
+
+```
+[INFO] ------------------------------------------------------------------------
+[INFO] Reactor Summary:
+[INFO]
+[INFO] Struts 2 Bill of Materials ......................... SUCCESS [  1.188 s]
+[INFO] Struts 2 2.5.24-SNAPSHOT ........................... SUCCESS [  2.249 s]
+[INFO] Struts 2 Core ...................................... SUCCESS [01:13 min]
+[INFO] Struts Plugins ..................................... SUCCESS [  0.232 s]
+[INFO] Struts 2 Configuration Browser Plugin .............. SUCCESS [  1.374 s]
+[INFO] Struts 2 Sitemesh Plugin ........................... SUCCESS [  1.429 s]
+[INFO] Struts 2 Tiles Plugin .............................. SUCCESS [  2.303 s]
+[INFO] Struts 2 DWR Plugin ................................ SUCCESS [  0.905 s]
+[INFO] Struts 2 Spring Plugin ............................. SUCCESS [  2.232 s]
+[INFO] Struts 2 Convention Plugin ......................... SUCCESS [  4.540 s]
+[INFO] Struts 2 JUnit Plugin .............................. SUCCESS [  4.297 s]
+[INFO] Struts 2 JSON Plugin ............................... SUCCESS [  5.384 s]
+[INFO] Struts 2 Bean Validation Plugin .................... SUCCESS [  3.345 s]
+[INFO] Struts 2 Webapps ................................... SUCCESS [  0.391 s]
+[INFO] Struts 2 Showcase Webapp ........................... SUCCESS [  6.104 s]
+[INFO] Struts 2 REST Plugin ............................... SUCCESS [  4.058 s]
+[INFO] Struts 2 Rest Showcase Webapp ...................... SUCCESS [  1.524 s]
+[INFO] Struts 2 CDI Plugin ................................ SUCCESS [  2.758 s]
+[INFO] Struts 2 Embedded JSP Plugin ....................... SUCCESS [  8.111 s]
+[INFO] Struts 2 GXP Plugin ................................ SUCCESS [  1.137 s]
+[INFO] Struts 2 Jasper Reports Plugin ..................... SUCCESS [  4.392 s]
+[INFO] Struts 2 Java Templates Plugin ..................... SUCCESS [  2.666 s]
+[INFO] Struts 2 JFreeChart Plugin ......................... SUCCESS [  3.169 s]
+[INFO] Struts 2 OSGi Plugin ............................... SUCCESS [  3.209 s]
+[INFO] Struts 2 OVal Plugin ............................... SUCCESS [  3.113 s]
+[INFO] Struts 2 Pell Multipart Plugin ..................... SUCCESS [  0.842 s]
+[INFO] Struts 2 Plexus Plugin ............................. SUCCESS [  1.003 s]
+[INFO] Struts 2 Portlet Plugin ............................ SUCCESS [  5.210 s]
+[INFO] Struts 2 Portlet Tiles Plugin ...................... SUCCESS [  0.999 s]
+[INFO] DEPRECATED: Struts 2 Sitegraph Plugin .............. SUCCESS [  2.634 s]
+[INFO] Struts 2 TestNG Plugin ............................. SUCCESS [  2.081 s]
+[INFO] Struts OSGi Bundles ................................ SUCCESS [  0.083 s]
+[INFO] Struts 2 OSGi Admin Bundle ......................... SUCCESS [  1.237 s]
+[INFO] Struts 2 OSGi Demo Bundle 2.5.24-SNAPSHOT .......... SUCCESS [  1.157 s]
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 02:39 min
+[INFO] Finished at: 2020-08-14T11:24:15+02:00
+[INFO] ------------------------------------------------------------------------
+```
+
+## Other phases
+
+There are other phases that can be useful when working with Maven. The _package_ phase will just JAR (or WAR) the modules. 
+The _test_ phase will only execute unit-tests. The _compile_ phase will only build the source-code (but not the test sources). 
+And the _clean_ phase will remove all artifacts, typically the entire _target_ directory.
+
+## Maven Tips
+
+A few helpful tips for using Maven are provided:
+
+### Skip exporting pages from Confluence
+
+The whole Struts2 documentation resists on Confluence and during normal build process is exported with SiteExporter tool 
+locally to html files. To perform that, you must have an account on Confluence. In most cases you don't need to export 
+the whole Confluence, so you can skip this, just type command:
+
+```
+mvn clean install -DskipWiki
+```
+
+### Skip creating assemblies
+
+During normal development cycle you don't need to create assembly packages which consist of all the libraries, 
+example apps and docs - you can skip them as well:
+
+```
+mvn clean install -DskipAssembly
+```
+
+### Offline mode
+
+If you are disconnected from the Internet or simply wish to make your build faster, pass in the **-o** argument 
+and Maven won't check for new modules to download.
+
+```
+mvn -o
+```
+
+### OutOfMemoryError
+
+If you get an OutOfMemoryError while running the tests:
+
+```
+// Bash
+export MAVEN_OPTS=-Xmx512m
+
+// Windows
+set MAVEN_OPTS=-Xmx512m
+```
+
+### Skipping test execution
+
+Although this shouldn't ever happen, sometimes tests do fail and you need to build the framework anyway. 
+If there's a problem, you can pass in the skip tests parameter.
+
+```
+mvn -Dmaven.test.skip=true
+```
+
+Of course, if you find tests are failing, please submit a patch to fix them!
+
+### Debugging build failures
+
+Struts 2 depends on the current snapshot artifact of XWork 2. Unfortunately, if XWork 2 is modified in a significant way, 
+the Struts build doesn't check for and retrieve a new version of the XWork snapshot jar, resulting in compilation or unit test failures.
+
+The solution is to clear out any stale XWork 2 jars in your local Maven repository, usually by removing the directory 
+
+```
+~/.m2/repository
+```
+
+This will force the Struts Maven build to pull down a fresh copy of XWork and hopefully resolve your problem.
+
+## First time building
+
+In some cases it has been seen that Maven will complain if a module doesn't exist, even though it is part of the current 
+build. Often, the missing module turns up when executing 
+
+```
+mvn package
+```
+
+A simple fix for this is to run 
+
+```
+mvn install
+```
+
+instead. If you have to do this, it will probably only be a one time thing.
diff --git a/source/contributors/creating-and-signing-a-distribution.md b/source/contributors/creating-and-signing-a-distribution.md
new file mode 100644
index 0000000..c0cf70f
--- /dev/null
+++ b/source/contributors/creating-and-signing-a-distribution.md
@@ -0,0 +1,37 @@
+---
+layout: default
+title: Creating and Signing a Distribution
+parent:
+  title: Contributors Guide
+  url: index.html
+---
+
+# Creating and Signing a Distribution
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## How to prepare a normal release ?
+
+- create a Version Notes page and start adding important changes to it
+- create a filter in JIRA with `Fix Version` pointing to the release version you want to prepare
+- review JIRA issues and re-organise them, move the `Fix Version` to the next release or `Future`, mark what should be 
+  solved in the release you're working on
+
+## How to prepare a fast track release ?
+
+- keep all the information confidential as possible, communicate throughout security@struts.a.o group
+- restrict access to all the related pages created in Confluence to struts-committers group only, they can be made 
+  public available after a fix or workaround has been released
+
+## What do you want to build ?
+
+Depends on what you want to achieve, please select topic from the list below:
+
+- [One time steps](one-time-steps) - before you start preparing a distribution
+- [Sample announcements](sample-announcements) - announcements used to communicate the achievement
+- [Building Struts Master](building-struts-master) - how to release Struts Master
+- [Building Struts Annotations](building-struts-annotations) - when you want to prepare a new distribution of Struts Annotations (if something changed)
+- [Building Struts 2 - Normal release](building-normal-release) - the most common used path
+- [Building Struts 2 - Fast track release](building-fast-track-release) - how to prepare a fast track release with important security patch
diff --git a/source/contributors/documentation-style-guide.md b/source/contributors/documentation-style-guide.md
new file mode 100644
index 0000000..f525854
--- /dev/null
+++ b/source/contributors/documentation-style-guide.md
@@ -0,0 +1,214 @@
+---
+layout: default
+title: Documentation Style Guide
+parent:
+  title: Contributors Guide
+  url: index.html
+---
+
+# Documentation Style Guide
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+It's well-known that a consistent user interface is easier to use. Consistency helps users focus on the task rather 
+than the user interface. Likewise, a consistent documentation style helps users focus on the information, rather 
+than the formatting.
+
+A related goal is to design the documentation so that it is easy to maintain, so that it tends to remain internally 
+consistent with the framework itself.
+
+## Do it now. Do it once. Do it well.
+
+Overall, there are three goals for the documentation system.
+
+- Say it all
+- Say it once
+- Say it well
+
+First, we want the documentation to be both complete and concise. This is job one! The documentation should also be a quick 
+but practical introduction to the framework, so newcomers can get started as easily as possible. To keep people coming back, 
+the documentation should also be a repository of the tips and tricks we use in our own applications, so that people can find 
+it here instead of asking over and over again on the list.  
+
+Second, the documentation should be easy to maintain. Ideally, we should cover the detail of each topic once, and draw 
+as much detail from the source code and examples as possible (using the _snippet macro_).
+
+Third, the documentation should be text-book quality; if not in the first draft, then in the next. Don't hesitate 
+to hack in a new page. Better that we have the page than we don't. (See Job One!) But, as time allows, we should try 
+to make each page the best that it can be. A great many people access the documentation, and it's worth the effort 
+to make the "documentation experience" productive and enjoyable.
+
+## Capitalization of common terms
+
+- Java
+- Javadoc
+- HTML
+- XML
+
+## General Punctuation and Grammar
+
+Good online resources for punctuation, grammar, and text style include
+
+- [Wikipedia Manual of Style](https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style)
+
+In print, two excellent (and inexpensive!) resources are
+
+- [The Elements of Style](https://www.amazon.com/exec/obidos/tg/detail/-/020530902X/apachesoftwar-20/)
+- [Associated Press Stylebook](https://www.amazon.com/exec/obidos/tg/detail/-/0465004881/apachesoftwar-20/)
+
+Also excellent, but more expensive: 
+
+- [Chicago Manual of Style](https://www.chicagomanualofstyle.org/)
+
+## Quick Tips
+
+- Use as few words as possible. Instead of "but there are some quirks about it" try "but there are quirks".
+- If a list of items includes both a term and an explanation, consider using a table instead of bullets.
+- Avoid using "This" by itself. Instead of "This lets us" try "This strategy lets us".
+  - Ask yourself: "This what?"
+- References to other wiki pages can be unqualified. For example: "See ."
+
+## Don't be smurfy!
+
+A lot of API members use the term "action". We have
+
+- action extensions on pages,
+- action attributes in forms,
+- action elements in configuration files, and
+- Action Java classes, some of which may implement the
+- Action interface.
+
+Here are some terms that can be used to help clarify which action is which.
+
+- Use "the framework" or "Struts 2" to refer to the codebase as a whole, including any frameworks we use internally, like OGNL.
+- Use "Action class" or "action handler" to refer to the Java class incorporated by the action element.
+- Use "action mapping" to refer to the object created by the action element.
+
+## Page Save Comment
+
+Try to include a brief description of a change when saving a page. The comments are included in the page's history. 
+The comments are also included on the daily change report. In a group environment, it's important to help each other follow along.
+
+## Parent Pages
+
+Use the Parent Page feature to create a hierarchy of pages. The parent pages are reflected in the "bread crumb" menu. 
+If properly used, parent pages can help browsers "visualize" the documentation as an outline. 
+
+The root of the documentation is the "Home" page, which is also the "Welcome" page. The documentation is ordered into 
+three main areas: Tutorials, FAQs, and Guides. Each area has a contents page, whose parent is Home. Other pages within 
+each section can also serve as parents, to help organize the documentation into a coherent outline. 
+
+## Labels
+
+Pages can be cross-indexed with the Label feature. Labels are not be used much yet, except for internal authoring. 
+
+| FIXME | A page that mentions a problem in the distribution that we intend to fix. Review these pages before tagging a distribution to see if the issue has been resolved. |
+|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| TODO | A page that is incomplete. Try to complete these pages before tagging a distribution |
+
+## Avoid skipping headers
+
+The headers form an outline for the page. When writing term papers, it is not a good practice to skip outline levels.
+When writing hypertext, it is not a good practice to skip heading levels either. Try not to skip from a `h2` to a `h4`.
+
+> If you find yourself writing too many h2 headings in a single page, consider breaking the page into child pages.
+
+## More on Text Effects
+
+Text effects like **strong**, _emphasis_ , and inserted can be used in the usual way to denote important parts of a sentence.
+
+`Monospaced` should be used to files, tags, and methods, like `struts.xml`, `<xmltag />`, and `execute`. 
+Class and Interface names may be left in normal face, like Action and Interceptor.
+
+A panel should be preferred to a block quote. The color fonts should be avoided or used only with great care. 
+Some people have difficulty seeing some colors, and the colors may not be apparent if the page is printed.
+
+## Text Breaks
+
+Text breaks should not be used to format blocks on the screen. If there is an issue with the way paragraphs or headings 
+are being rendered, we should customize the stylesheet.
+
+## Lists
+
+Unordered lists should be created only with the `-` notation.
+
+Ordered list should be used when numbering the items is important. Otherwise, prefer unordered lists.
+
+- This is an unordered list in star notation;
+- Items can have sub-items
+  - That can have sub-items
+    - That can have sub-items ...
+      - What is the limit?
+- Mixing ordered and unordered lists is possible:
+  1. One;
+  2. Two;
+  3. Three.
+
+## Images
+
+Avoid using external images for bullets or icons. Prefer the equivalents provided with Confluence.
+
+Images can be included by URL or annexing the binary to the page. Prefer annexing when possible, since URLs are subject to change.
+
+Always observe copyright issues. Do not annex images unless it an original or public domain work, or the author has donated the image to the foundation.
+
+Example: 
+
+![http://struts.apache.org/images/struts-power.gif](http://struts.apache.org/images/struts-power.gif)
+
+## Tables
+
+Prefer lists for single-value entries. Prefer tables for lists with multiple columns.
+
+Tables are very useful when lists just don't do it. Meaning: don't write a table when a list suffices. Tables are more 
+organized, because you can align the text in columns. Since the markup text for tables in Confluence is not easy to read, 
+complex and big tables can be hard to maintain.
+
+| File | Optional | Location (relative to webapp) | Purpose |
+|------|----------|-------------------------------|---------|
+|`web.xml` | no | /WEB-INF/ | Web deployment descriptor to include all necessary WebWork components |
+|`struts.xml` | no | /WEB-INF/classes/ | Main configuration, contains result/view types, action mappings, interceptors, and so forth |
+
+## Advanced Formatting
+
+Try to specify the language for \`\`\` ... \`\`\` blocks.
+
+**HelloWorld.java**
+
+```java
+/** Hello World class. */
+public class HelloWorld {
+  /** Main method. */
+  public static void main(String[] args) {
+    System.out.println("Hello, World!");
+  }
+}
+```
+
+Avoid tabs in code blocks, use two spaces instead. Long lines should be formatted to fit in a 800x600 resolution screen, 
+without resorting to horizontal scrolling.
+
+A typical example of "non-lang" block would be the command line statements to compile and run the code above.
+
+The terminal notation `$` should be used to represent a system prompt.
+
+**Compiling and Running Hello World**
+
+```
+$ javac HelloWorld.java
+
+$ java HelloWorld
+Hello, World!
+```
+
+## Change Happens
+
+Anyone who has worked with databases knows the value of normalizing the schema. Ideally, we want to store each fact 
+exactly once, and then use query system to retrieve that fact wherever it is needed. If we store a fact once, we only 
+need to update it once, and we avoid inconsistencies in our data set.
+
+To the extent possible, we want to "normalize" our technical documentation. Like a database, all technical documentation 
+is subject to change. When change happens, we want the documentation to be as easy to update as possible. One way to do 
+that is to try and minimize redundancy (without sacrificing ease of use).
diff --git a/source/contributors/editing-the-documentation.md b/source/contributors/editing-the-documentation.md
new file mode 100644
index 0000000..0120d17
--- /dev/null
+++ b/source/contributors/editing-the-documentation.md
@@ -0,0 +1,51 @@
+---
+layout: default
+title: Editing the Documentation
+parent:
+  title: Contributors Guide
+  url: index.html
+---
+
+# Editing the Documentation
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+Changes to the documentation can be requested to the [issue tracker](https://issues.apache.org/struts/secure/Dashboard.jspa), 
+or created via Pull Requests to the Github [repository](https://github.com/apache/struts-site). You can notice a button
+in the upper left corner labeled `Edit on GitHub` which helps you create changes to the docs. 
+
+The Struts 2 Documentation space is bundled with the Struts distribution, and, eventually, the content may be checked 
+into an ASF repository. Accordingly, all volunteers working to this space must have a CLA on file. 
+
+The project also hosts a second Confluence space, the [Struts 2 wiki](http://cwiki.apache.org/S2WIKI/home.html), 
+which can be edited by anyone who creates an account. 
+
+See also: [How to Help FAQ](../helping).
+
+## Documentation Workflow
+
+Since projects like Struts wear our code "on our sleeve", there's always a discussion over whether the website should 
+represent the latest documentation or the documentation for the "best available" release. Over the years, we've done it 
+one way and the another, and now we do it both ways  :-) 
+
+- [http://cwiki.apache.org/WW/home.html](http://cwiki.apache.org/WW/home.html)
+
+When we vote a test build to a release (of any flavor: alpha, beta, GA), we archive the HTML version of the documentation 
+for future reference. When a release is designated GA, we update the appropriate links on the main site to point 
+to the archival copy. 
+
+Since we bundle the HTML version of the documentation with the release, we require authors to file a CLA, to ensure that 
+we actually have distribution rights. 
+
+To cover all the bases, we also maintain a "community wiki", that is not bundled with the distribution. 
+
+- [http://cwiki.apache.org/S2WIKI/home.html](http://cwiki.apache.org/S2WIKI/home.html)
+
+It's open to anyone who signs up for an account on Confluence. Sometimes, we do move documentation from the community wiki 
+to the documentation wiki, if the author can a CLA. 
+
+Sadly, not everyone can file a CLA. Many organizations still use aggressive IP agreement that assign rights to our every 
+stray thought to the company, 24/7. In fact, some organizations grant a special dispensation for the ASF so that their 
+employees can file CLAs. 
diff --git a/source/contributors/index.md b/source/contributors/index.md
new file mode 100644
index 0000000..a8c1e75
--- /dev/null
+++ b/source/contributors/index.md
@@ -0,0 +1,36 @@
+---
+layout: default
+title: Contributors Guide
+---
+
+# Contributors Guide
+
+## Source
+
+- [Building the Framework from Source](building-the-framework-from-source)
+  - [Building with Maven](building-with-maven)
+- [Creating and Signing a Distribution](creating-and-signing-a-distribution) 
+- [Precise Error Reporting](precise-error-reporting)
+- [Obtaining an IDEA license](obtaining-an-idea-license)
+- [How to Write Doc Comments for the Javadoc Tool](https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html) (Oracle)
+
+## Documentation
+
+- [Editing the Documentation](editing-the-documentation)
+- [Documentation Style Guide](editing-the-documentation)
+
+## Licensing and Copyright
+
+- [Third Party Licensing Policy RFC](http://people.apache.org/~cliffs/3party.html)
+- [ASF Source Header and Copyright Notice Policy](http://www.apache.org/legal/src-headers.html)
+- [Author Tags](http://tinyurl.com/mw7t6)
+
+## Quick Links
+
+- [How to Help FAQ](../../helping)
+- [Project Charter](../../bylaws)
+- [Volunteers](../../volunteers)
+- [Release Guidelines](../../releases)
+- [Javadocs](http://people.apache.org/~mrdon/action2-api/)
+- [Source code repository](https://svn.apache.org/repos/asf/struts/action2)
+- [Our WebWork roots](http://today.java.net/pub/a//today/2005/02/25/opensymphony.html)
diff --git a/source/contributors/obtaining-an-idea-license.md b/source/contributors/obtaining-an-idea-license.md
new file mode 100644
index 0000000..539e661
--- /dev/null
+++ b/source/contributors/obtaining-an-idea-license.md
@@ -0,0 +1,29 @@
+---
+layout: default
+title: Obtaining an IDEA license
+parent:
+  title: Contributors Guide
+  url: index.html
+---
+
+# Obtaining an IDEA license
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## How do ASF Committers obtain an IDEA license?
+
+Please read the following blog post about JetBrains support for Apache - [JetBrains Supports the Apache Software Foundation](https://blog.jetbrains.com/blog/2019/05/30/jetbrains-supports-the-apache-software-foundation/) 
+
+### How do I get a apache.org email account to get the IDEA License?
+
+The Apache Software Foundation is an organization, and not a free web host. An ASF account is earned by making sustained 
+and welcome contributions to a project. For more, see:
+
+- [http://apache.org/foundation/faq.html#joining](http://apache.org/foundation/faq.html#joining)
+- [http://apache.org/foundation/how-it-works.html#meritocracy](http://apache.org/foundation/how-it-works.html#meritocracy)
+- [http://struts.apache.org/helping.html](http://struts.apache.org/helping.html)
+
+The reason JetBrains (among others) give committers licenses is because we have earned them by helping to create open 
+source products, many of which JetBrains uses internally.
diff --git a/source/contributors/one-time-steps.md b/source/contributors/one-time-steps.md
new file mode 100644
index 0000000..ce06b4c
--- /dev/null
+++ b/source/contributors/one-time-steps.md
@@ -0,0 +1,128 @@
+---
+layout: default
+title: One time steps
+parent:
+  title: Creating and Signing a Distribution
+  url: creating-and-signing-a-distribution
+---
+
+# One time steps
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## Keys and configuration
+
+### Create and install a SSH key
+
+> See [OpenSSH Public Key Authentication](http://sial.org/howto/openssh/publickey-auth/)
+
+If you get hung up during release:perform because Maven can't verify the authenticity of a host, then there could be 
+one of two  different problems. The first problem, which is an easy fix, is to go to the command line and use SSH 
+to log in to that host. You should receive a prompt to add the host to your known_hosts file. If you add the host 
+to your `known_hosts` file from the command line  SSH, then you should be able to try `release:perform` again 
+and have more success. There is a chance though that this won't fix maven.
+
+Maven doesn't appear to understand hashed `known_hosts` files. There is some information here - [known_hosts file Hashing](http://itso.iu.edu/Hashing_the_OpenSSH_known__hosts_File). 
+
+If your `known_hosts` file is hashed, you can solve this one of a few different ways. If you perform a `deploy:deploy` 
+instead of `release:perform`, then maven will leave a prompt open for you to type `yes` and have maven add the host 
+(in a way that Jsch, the library which provides Maven Wagon with the SSH/SCP functionality, understands) 
+to your `known_hosts` file. Another option is to remove your `known_hosts` file, update your SSH configuration so that 
+it does not hash the hostname in `known_hosts` and try to log in from the command line. 
+
+```
+mkdir ~/.ssh
+chmod 700 ~/.ssh
+ssh-keygen -q -f ~/.ssh/id_rsa -t rsa
+#Enter a passphrase
+chmod go-rwx ~/.ssh/*
+
+#copy the public key to people.apache.org
+scp ~/.ssh/id_rsa.pub people.apache.org:/home/$USERNAME
+
+# next, setup the public key on server
+ssh people.apache.org
+mkdir ~/.ssh
+chmod 700 ~/.ssh
+cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
+chmod 600 ~/.ssh/authorized_keys
+rm ~/id_rsa.pub
+```
+
+### Create a PGP key
+
+```
+svn co https://svn.apache.org/repos/asf/struts/maven/trunk/build struts-maven-build
+cd struts-maven-build
+(gpg --fingerprint --list-sigs <your name> && gpg --armor --export <your name>) >> KEYS
+scp KEYS people.apache.org:/www/www.apache.org/dist/struts
+svn commit KEYS -m "Add public key"
+```
+
+### Update Maven settings for our servers
+
+Create a `settings.xml` under `~/.m2` and follow below instructions:
+- create profile - [Releasing a Maven-based](http://maven.apache.org/developers/release/apache-release.html\#Prerequisites)
+- enable Apache servers [Committer Settings](http://maven.apache.org/developers/committer-settings.html)
+
+```xml
+<settings xmlns="http://maven.apache.org/POM/4.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <servers>
+    <!-- To publish a snapshot of some part of Maven -->
+    <server>
+      <id>apache.snapshots.https</id>
+      <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
+      <password> <!-- YOUR APACHE LDAP PASSWORD --> </password>
+    </server>
+    <!-- To stage a release of some part of Maven -->
+    <server>
+      <id>apache.releases.https</id>
+      <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
+      <password> <!-- YOUR APACHE LDAP PASSWORD --> </password>
+    </server>
+  </servers>
+  <profiles>
+    <profile>
+      <id>apache-release</id>
+      <properties>
+        <gpg.passphrase> <!-- YOUR KEY PASSPHRASE --> </gpg.passphrase>
+      </properties>
+    </profile>
+  </profiles>
+</settings>
+```
+
+### Increase Memory Settings for Maven
+
+To complete a full build and all the tests, it may be necessary to increase the amount of memory available to Maven. 
+The simplest thing is to set an environment variable.
+
+```
+MAVEN_OPTS=-Xmx512m
+```
+
+or even 
+
+```
+MAVEN_OPTS=-Xmx1024m
+```
+
+## Resources
+
+- Apache Struts [Release Guidelines](http://struts.apache.org/releases.html\#Releases)
+- [Struts Maintenance Guide for Maven ](http://wiki.apache.org/struts/StrutsMaintenanceMaven)
+- [Signing Releases](http://apache.org/dev/release-signing.html)
+- [Wendy's notes on Release Signing](http://wiki.wsmoak.net/cgi-bin/wiki.pl?ReleaseSigning)
+- Apache [Mirroring Guidelines](http://apache.org/dev/mirrors.html)
+
+## Retagging
+
+If a tagged build needs to be retagged, be sure to delete the old tag first.
+
+```
+git push --delete origin STRUTS_#_#_#
+```
diff --git a/source/contributors/precise-error-reporting.md b/source/contributors/precise-error-reporting.md
new file mode 100644
index 0000000..f505cc1
--- /dev/null
+++ b/source/contributors/precise-error-reporting.md
@@ -0,0 +1,31 @@
+---
+layout: default
+title: Precise Error Reporting
+parent:
+  title: Contributors Guide
+  url: index.html
+---
+
+# Precise Error Reporting
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+With the multiple levels of configuration, constant overrides, and bean selection, it can be confusing as to how 
+the framework is configured and how it got there. To assist debugging and provide the ability to continue to provide 
+more line-precise error reporting, the configuration loader remembers the location of not only XML elements, 
+but also Java Properties file properties.
+
+How it works is instead of storing configuration properties in a plain `java.util.Properties` object, we have a special 
+`LocatableProperties` class. This class leverages the location classes to store location information for the whole 
+properties file but also individual properties.  We use this to gather configuration properties during configuration loading. 
+This will allow us to display at any given point the location of each property setting. This capability should be very 
+useful when trying to determine what XML or Properties file overwrote what and when.
+
+Interestingly, in addition to remembering the URI and line number of Properties properties, the parser we "borrowed" 
+from Commons Configuration even gathers preceding comments, which are also stored in the Location object. This means 
+we can leverage the Properties comment-based documentation that we have in the o.a.s.default.properties file
+or the user's struts.properties file to further provide useful information in error reports.
+
+There are some very interesting possibilities here to increase the transparency of the framework in error and debugging conditions.
diff --git a/source/contributors/sample-announcements.md b/source/contributors/sample-announcements.md
new file mode 100644
index 0000000..8c8511a
--- /dev/null
+++ b/source/contributors/sample-announcements.md
@@ -0,0 +1,196 @@
+---
+layout: default
+title: Sample announcements
+parent:
+  title: Creating and Signing a Distribution
+  url: creating-and-signing-a-distribution
+---
+
+# Sample announcements
+{:.no_toc}
+
+* Will be replaced with the ToC, excluding a header
+{:toc}
+
+## Sample Struts Annotations Release/Quality Vote
+
+```
+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.
+```
+
+## Sample Test Build Announcement
+
+> 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.
+
+```
+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.
+```
+
+## Sample Release/Quality Vote
+
+```
+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
+```
+
+## Sample Release Announcement
+
+```
+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.
+```
+
+## Fast-Tracking an Important Security Release
+
+> 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.
+
+- If the patch first applies to some other dependency, implore the other group to do the same, to avoid side-effects 
+  from other changes.
+- 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
+  - Include the term "fast-track" in the subject, as in `[VOTE] Struts 2.0.9.1 quality (fast track)`
+  - In the vote message, specify voting terms like:
+
+```
+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 <download.cgi>, but to <downloads.html>, so that we can control use of the timestamp 
+parameter.
+
+[1] <[http://apache.org/dev/mirrors.html#use|http://apache.org/dev/mirrors.html#use]>
+
+- The Apache Struts group.
+```
+
+Please be sure to update [Security Bulletins](https://cwiki.apache.org/confluence/display/WW/Security+Bulletins) accordingly 
+as described above.
diff --git a/source/core-developers/index.md b/source/core-developers/index.md
index 6a8c396..fdd2b0c 100644
--- a/source/core-developers/index.md
+++ b/source/core-developers/index.md
@@ -1,6 +1,6 @@
 ---
 layout: default
-title: Core Developers Guide (WIP)
+title: Core Developers Guide
 ---
 
 # Core Developers Guide
diff --git a/source/updating-website.md b/source/updating-website.md
index d782c79..dc707b9 100644
--- a/source/updating-website.md
+++ b/source/updating-website.md
@@ -25,7 +25,7 @@ We are using Jekyll and mix of Markdown pages with raw Html pages, where Markdow
 The whole build of the website is orchestrated by [.asf.yaml](http://s.apache.org/asfyaml), please refer to the docs
 for more details. The main build of the website is performed by [a buildbot job](https://ci2.apache.org/#/builders/7),
 the staging site is build and deployed by 
-[a Jenkins job](https://builds.apache.org/view/S-Z/view/Struts/job/Struts-staged-site/) - buildbot doesn't support staging site deployment yet.  
+[a Jenkins job](https://ci-builds.apache.org/job/Struts/job/Struts-staged-site/) - buildbot doesn't support staging site deployment yet.  
 
 ## Applying a change
 
@@ -36,8 +36,8 @@ You can then review your changes before applying them to the `master` branch.
 
 ## Deploying JavaDocs
 
-There is a dedicated [Jenkins job](https://builds.apache.org/view/S-Z/view/Struts/job/Struts-site-javadocs/) which is
+There is a dedicated [Jenkins job](https://ci-builds.apache.org/job/Struts/job/Struts-site-javadocs/) which is
 used to update the JavaDocs based on the latest release. If you have a proper privileges you can start the job
-and provide a Git tag of the latest release, eg. `STRUTS_2_5_22`. Based on the tag Jenkins will generate a proper
+and provide a Git tag of the latest release, eg. `STRUTS_2_5_22`. Based on the tag, Jenkins will generate a proper
 JavaDocs and deploy them directly into the website. You can verify them by using this [link](https://struts.staged.apache.org/maven/struts2-core/apidocs/index.html).
   
\ No newline at end of file