# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

==========================================
Environment setup for releasing artifacts
==========================================
Since 3.0.0

1. Environmental Setup
	* Increase the default Java heap available to Maven
	* export MAVEN_OPTS="-Xmx256m -XX:MaxPermSize=128m"
	* Use the JDK 1.8.
	* Use Maven 3.3.1 or higher
	* edit $HOME/.m2/settings.xml, make sure your Apache account credentials are setup in the servers section:
        <servers>
            <server>
              <id>apache.snapshots.https</id>
              <username>your-apache-username</username>
              <password>your-apache-password</password>
            </server>

            <server>
              <id>apache.releases.https</id>
              <username>your-apache-username</username>
              <password>your-apache-password</password>
            </server>
    * submit your public key to an authorized Public Key server such as http://pgp.mit.edu/
      see instructions here:
        http://blog.sonatype.com/2010/01/how-to-generate-pgp-signatures-with-maven/

2. Prepare the source for release
	* Cleanup JIRA so the Fix Version in issues resolved since the last release includes this release version correctly.
	* Create a JIRA issue for release maintenance for example see
		https://issues.apache.org/jira/browse/PLUTO-777
	* Checkout a clean copy of the trunk (on the specific branch if needed) to release using command line git.
	    cd ~/apache/releases
	    git clone https://github.com/apache/portals-pluto

	* Do not use Eclipse to do the checkout. The extra dot (.) files created by Eclipse throws off the rat:check processing.

3. Verify the source has the required license headers before trying to release.

    mvn -P rat apache-rat:check

4. DRY RUN
	Do a dry run of the release:prepare step:

		$ mvn -P apache-release,pluto -DrunOnlyAtExecutionRoot=true release:prepare -DdryRun=true

	The dry run will not commit any changes back to Git and gives you the opportunity to verify that the release process will complete as expected.
	You will be prompted for the following information :

		Release version - take the default or use semvar like 3.1.0
		SCM release tag - review the default naming and compare it with the existing git tag structure; change it if needed.
		New development version - take the default
		Have your GPG Passphrase ready

	If you cancel a release:prepare before it updates the pom.xml versions, then use the release:clean goal to just remove the extra files that were created.
	The Maven release plugin checks for SNAPSHOT dependencies in pom's. It will not complete the prepare goal until all SNAPSHOT dependencies are resolved.

5. VERIFY RELEASE
	Verify that the release process completed as expected

	The release plugin will create pom.xml.tag files which contain the changes that would have been committed to Git.
	The only differences between pom.xml.tag and it's corresponding pom.xml file should be the version number(s) and git location(s) (e.g., /trunk vs /tags).

	Check release.properties and make sure that the scm properties have the right version. Sometimes the scm location can be the previous version not the next version.

	Verify signatures (Verifying release signatures)
        gpg --verify target/pluto-3.1.0-SNAPSHOT-source-release.zip.asc target/pluto-3.1.0-SNAPSHOT-source-release.zip

6. CLEANUP AND START OVER
	Cleanup the release prepare files again:

	$ mvn -P apache-release,pluto release:clean

7. PERFORM THE RELEASE

	a. OPTIONAL: Release the Portlet API (It has its own version scheme and release schedule)

	$ cd portals-pluto/portlet-api
	$ mvn -P apache-release release:prepare -DrunOnlyAtExecutionRoot=true
	$ mvn -P apache-release release:perform -Duser.name=[your_apache_uid]
	$ cd ..
	$ vi pom.xml # Update the version in the <portals.portlet-api.version/> property
	$ git commit -m "Upgraded to portlet-api-x.y.z"

	b. REQUIRED: Release the main Apache Pluto software modules

	$ cd portals-pluto
	$ mvn -P apache-release,pluto release:prepare -DrunOnlyAtExecutionRoot=true
	$ mvn -P apache-release,pluto release:perform -Duser.name=[your_apache_uid]
	$ vi portlet-tck_3.0/pom.xml # Update the parent <version/> and also the version in the <pluto.test.version/> property
	$ git commit -a -m "PLUTO-716 Upgraded the TCK to Pluto test version 3.1.0"

	If your local OS userid doesn't match your Apache userid, then you'll have to also override the value provided
	by the OS to Maven for the site-deploy step to work. This is known to work for Linux, but not for Mac and unknown for Windows.

	c. OPTIONAL: Release the Portlet TCK (It has its own version scheme and release schedule)

	NOTE: The portlet-tck_3.0/pom.xml descriptor has <skip>true</skip> for the maven-deploy-plugin and the maven-gpg-plugin
	      so there are no binary artifacts that get published to the Nexus staging repository. The main purpose of running
	      the maven-release-plugin for the TCK is to have it apply a Git tag to auto-increment the <version/> element in
	      the portlet-tck_3.0/pom.xml and TCK sub-module POM descriptors.

	$ cd portals-pluto/portlet-tck_3.0
	$ mvn -P apache-release,pluto release:prepare -DrunOnlyAtExecutionRoot=true
	$ mvn -P apache-release,pluto release:perform -Duser.name=[your_apache_uid]

	d. OPTIONAL: Release the Archetypes (Each has its own version scheme and release schedule)

	$ cd portals-pluto/maven-archetypes/bean-portlet-archetype
	$ mvn -P apache-release release:prepare -Duser.name=[your_apache_uid]
	$ mvn -P apache-release release:perform -Duser.name=[your_apache_uid]

	$ cd portals-pluto/maven-archetypes/generic-portlet-archetype
	$ mvn -P apache-release release:prepare -Duser.name=[your_apache_uid]
	$ mvn -P apache-release release:perform -Duser.name=[your_apache_uid]

	$ cd portals-pluto/maven-archetypes/mvcbean-jsp-portlet-archetype
	$ mvn -P apache-release release:prepare -Duser.name=[your_apache_uid]
	$ mvn -P apache-release release:perform -Duser.name=[your_apache_uid]

	$ cd portals-pluto/maven-archetypes/mvcbean-thymeleaf-portlet-archetype
	
	#	
	# NOTE: You might need to get rid of a "-SNAPSHOT" from the following POM descriptor first!
	#

	$ vi src/main/resources/archetype-resources/pom.xml # Change "3.1.0-SNAPSHOT" to "3.1.0" 
	$ git commit -a -m "PLUTO-716 Upgraded to version 3.1.0"

	$ mvn -P apache-release release:prepare -Duser.name=[your_apache_uid]
	$ mvn -P apache-release release:perform -Duser.name=[your_apache_uid]

8. VERIFY THE RELEASE
	a. Verify signatures (Verifying release signatures)

	$ gpg --verify target/pluto-3.1.0-source-release.zip.asc target/pluto-3.1.0-source-release.zip

    b. Verify the Nexus release artifacts

    Verify the staged artifacts in the nexus repo
        https://repository.apache.org/index.html
    Staging repositories (under Build Promotion) --> Name column --> org.apache.portals-XXX
    Navigate through the artifact tree and make sure that all javadoc, sources, tests, jars, ... have
        .asc (GPG signature)
        .md5 files
    See http://people.apache.org/~henkp/repo/faq.html and http://www.apache.org/dev/release-signing.html#openpgp-ascii-detach-sig

9. Push the commits upstream but do NOT yet push any tags (commits can be reverted if necessary)

	$ git push upstream master

10. Checkout the new tag, since the repository will be set to a later commit

    $ git checkout pluto-3.1.0

11. Create a Distribution Bundle

    NOTE: If the Portlet API was released, then execute:

        ant -f dist-build.xml -DpackagePortletAPI=true -DincludeDemos=true -DpackageOnly=true -DnoClean=true

    OTHERWISE, execute:

        ant -f dist-build.xml -DincludeDemos=true -DpackageOnly=true -DnoClean=true

12. Release the bundle Zip file

	a. Use Maven command-line to release pluto-3.1.0-bundle.zip

        #
        # NOTE: This will release a file with the following identification:
        #		 <groupId>org.apache.portals.pluto</groupId>
        #		 <artifactId>pluto-bundle</artifactId>
        #		 <version>3.1.0</version>
        #
        #  And the download filename will be pluto-bundle-3.1.0.zip
        #
        mvn -Papache-release,pluto \
          gpg:sign-and-deploy-file \
          -Dfile=target/dist/pluto-3.1.0-bundle.zip \
          -DgroupId=org.apache.portals.pluto \
          -DartifactId=pluto-bundle \
          -Dversion=3.1.0 \
          -Durl=https://repository.apache.org/service/local/staging/deploy/maven2 \
          -DrepositoryId=apache.releases.https

    b. Close the nexus staging repo

        https://repository.apache.org/index.html
        Staging repositories (under Build Promotion) --> Name column --> org.apache.portals-XXX
        Click checkbox for the open staging repo (org.apache.portals-XXX) and press Close in the menu bar.

    c. Create a temporary directory for working with Apache's Subversion repository (svnpubsub) for release artifacts:

        $ mkdir ~/asf-svn
        $ cd ~/asf-svn

    d. Checkout the "dev" folder for Apache Pluto:

        $ mkdir dev
        $ cd dev
        $ svn co https://dist.apache.org/repos/dist/dev/portals/pluto
        $ cd pluto

    e. Edit and then execute the following script in order to download the release artifacts from Nexus and
       commit them to Subversion:

    #!/bin/sh
    #
    # NOTE: Set user name to your Apache ID
    #
    USER_NAME=asfgriff
    #
    # NOTE: Set base URL to the Nexus staging repository
    #
    BASE_URL="https://repository.apache.org/service/local/repositories/orgapacheportals-1025/content"
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto/3.1.0/pluto-3.1.0-source-release.zip
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto/3.1.0/pluto-3.1.0-source-release.zip.asc
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto/3.1.0/pluto-3.1.0-source-release.zip.md5
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto/3.1.0/pluto-3.1.0-source-release.zip.sha1
    # Generate the SHA-512 checksum for the source release
    /usr/bin/shasum -a 512 pluto-3.1.0-source-release.zip > pluto-3.1.0-source-release.zip.sha512
    # Linux: sha512sum -a 512 pluto-3.1.0-source-release.zip > pluto-3.1.0-source-release.zip.sha512

    svn add pluto-3.1.0-source-release*
    #
    # NOTE: If the Portlet API was released, then un-comment the following:
    #
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-sources.jar
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-sources.jar.asc
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-sources.jar.md5
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-sources.jar.sha1
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-javadoc.jar
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-javadoc.jar.asc
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-javadoc.jar.md5
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2-javadoc.jar.sha1
    # svn add portlet-api-3.0.2*
    # svn commit -m "PLUTO-716 Committing Source Release for portlet-api-3.0.2" --username $USER_NAME
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2.jar
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2.jar.asc
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2.jar.md5
    # wget --no-check-certificate $BASE_URL/javax/portlet/portlet-api/3.0.2/portlet-api-3.0.2.jar.sha1
    # Generate the SHA-512 checksum for the portlet-api release
    /usr/bin/shasum -a 512 portlet-api-3.0.2.jar > portlet-api-3.0.2.jar.sha512
    # Linux: sha512sum -a 512 portlet-api-3.0.2.jar > portlet-api-3.0.2.jar.sha512
    # svn add portlet-api-3.0.2.jar*

    # svn commit -m "PLUTO-716 Committing Binary Release for portlet-api-3.0.2" --username $USER_NAME
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto-bundle/3.1.0/pluto-bundle-3.1.0.zip
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto-bundle/3.1.0/pluto-bundle-3.1.0.zip.asc
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto-bundle/3.1.0/pluto-bundle-3.1.0.zip.md5
    wget --no-check-certificate $BASE_URL/org/apache/portals/pluto/pluto-bundle/3.1.0/pluto-bundle-3.1.0.zip.sha1
    # Generate the SHA-512 checksum for the binary release
    /usr/bin/shasum -a 512 pluto-bundle-3.1.0.zip > pluto-bundle-3.1.0.zip.sha512
    # Linux: sha512sum -a 512 pluto-bundle-3.1.0.zip > pluto-bundle-3.1.0.zip.sha512
    svn add pluto-bundle-3.1.0.zip*
    svn commit -m "PLUTO-716 Committing Binary Release for Pluto 3.1.0" --username $USER_NAME

13. PUT THE RELEASE CANDIDATE UP FOR A VOTE

    a. Create a VOTE email thread on dev@ to record votes as replies. (See Example VOTE e-mail message)
    b. Perform a review of the release and cast your vote. See the following for more details on Apache releases

        http://www.apache.org/dev/release.html

    c. A -1 vote does not necessarily mean that the vote must be redone, however it is usually a good idea to rollback the release if a -1 vote is received.
    If you want to recover it from a vetoed release, refer to the OpenJPA documentation, Recovering from a vetoed release.

    d. After the vote has been open for at least 72 hours, has at least three +1 PMC votes and no -1 votes, then post the results to the vote thread by
       reply to the initial email and prepend to the original subject "[RESULT]" (See Example RESULT e-mail message)
       Include a list of everyone who voted +1, 0 or -1.

       References:
            Apache Voting Process http://www.apache.org/foundation/voting.html
            Who We Are (Apache Portals Project) http://portals.apache.org/whoweare.html

14. FINALIZE THE RELEASE

    a. Promote the staged nexus artifacts
        https://repository.apache.org/index.html
        Staging repositories (under Build Promotion) --> Name column --> org.apache.portals
        Click checkbox of the closed staging repo (org.apache.portals-XXX) and select Release.

    b. Move the source/binary artifacts over to the distribution area
       Command line examples to distribute artifacts (pluto-3.1.0-source-release.zip as an example below.):

        $ cd ~/asf/svn
        $ mkdir release
        $ cd release
        $ svn co https://dist.apache.org/repos/dist/release/portals/pluto
        $ cd pluto
        $ mv ../../dev/pluto/pluto-3.1.0-source-release* .
        $ svn add pluto-3.1.0-source-release*
        $ svn commit -m "PLUTO-716 Committing Source Release for pluto-3.1.0" --username $USER_NAME

    c. If the Portlet API was released, then move the source/binary artifacts over to the distribution area
        $ mv ../../dev/portals/pluto/portlet-api-3.0.2* .
        $ svn add portlet-api-3.0.2*
        $ svn commit -m "PLUTO-716 Committing Binary Release for portlet-api-3.0.2" --username $USER_NAME

    d. Move the bundle artifacts over to the distribution area
        $ mv ../../dev/pluto/pluto-bundle-3.1.0.zip* .
        $ svn add pluto-bundle-3.1.0.zip*
        $ svn commit -m "PLUTO-716 Committing Binary Release for Pluto 3.1.0" --username $USER_NAME
        $ cd ../../dev/pluto
        $ FILES=`svn status | grep pluto | awk '{print $2}'`
        $ svn rm $FILES
        $ svn commit -m "PLUTO-716 Promoted artifacts from dev to release for Pluto 3.1.0" --username $USER_NAME

    e. Push the tags upstream
        $ git push upstream pluto-3.1.0
        $ git push upstream portlet-tck-3.0.2
        $ git push upstream bean-portlet-archetype-3.1.0
        $ git push upstream generic-portlet-archetype-3.1.0
        $ git push upstream mvcbean-jsp-portlet-archetype-3.1.0
        $ git push upstream mvcbean-thymeleaf-portlet-archetype-3.1.0

    WAIT 24hrs after committing releases for mirrors to replicate before announcing release

15. UPDATE JIRA
    Update the JIRA versions page to close all issues, mark the version as "released", and set the date to the date
    that the release was approved. You may also need to make a new release entry for the next release.

    Generate the Release Notes from the Version page

16. UPDATE SITE DOCS

    a. Copy the previous xdoc version folder to a new one which matches the release version, for example:
        $ cd ~/asf/svn
        $ svn checkout https://svn.apache.org/repos/asf/portals/site/
        $ cd site
        $ cp -r pluto/src/site/xdoc/v301 pluto/src/site/xdoc/v310

    b. Edit the following files, replacing "3.0.1" with "3.1.0":
        pluto/src/site/xdoc/v310/*

        NOTE: For pluto/src/site/xdoc/v310/getting-started.xml you should only replace the version numbers if
              the archetypes were released! Also, are there new archetypes to add?

        NOTE: For pluto/src/site/xdoc/v310/tck.html you should take care with substitution of version numbers
              since the TCK has its won version scheme and release schedule.

    c. Edit the following files, replacing "v301" with "v310" and "3.0.1" with "3.1.0":
        pluto/src/site/fml/faq.fml
        pluto/src/site/site.xml <-- If applicable, instead of replacing version numbers, add a new <menu name="Pluto 3.1"> section
        pluto/src/site/xdoc/download.xml
        pluto/src/site/xdoc/index.xml
        pluto/src/site/xdoc/news.xml <-- Also add a news item detailing the release.
        pluto/src/site/xdoc/security.xml <-- Also add descriptions of any CVE issues that were fixed.
        pluto/src/site/xdoc/status.xml <-- If applicable, add a description of the new major or minor version.
                                           Also, replace "Pluto 3.0" with "Pluto 3.1" where appropriate.

    d. Edit site/pluto/src/site/xdoc/v31/release-notes.xml
        include generated release notes from step 15

    e. Generate the site:
        $ cd ~/asf/svn/site
        $ mvn site # Only needed to update the Apache Portals news page
        $ cd pluto
        $ mvn clean site

    f. Publish the docs to LIVE SITE

    Commit changes into the SVN location of Apache Portals Maven Site documentation:
        https://svn.apache.org/repos/asf/portals/site/

        $ svn add src/site/xdoc/v310/*
        $ svn commit -m "PLUTO-716 Committing site changes associated with the Pluto 3.1.0 release" --username $USER_NAME

    Copy the generated html and resources into the workspace folder of the following svnpubsub SVN location:
        https://svn.apache.org/repos/asf/portals/site-live/
    Commit your changes to site-live, they will publish automatically

    	$ cd ~/asf/svn
    	$ svn checkout https://svn.apache.org/repos/asf/portals/site-live

    	# Copy the generated html and resources to site-live

        $ svn commit -m "PLUTO-716 Committing site changes associated with the Pluto 3.1.0 release" --username $USER_NAME

17. ANNOUNCE THE RELEASE

    Make an announcement about the release on the

        general@portals.apache.org
        pluto-user@portals.apache.org

        announce@apache.org list

        as per the Apache Announcement Mailing Lists page) (See Example ANNOUNCE e-mail message)
        NOTE: Because announce@apache.org list allows message posting only to senders having '@apache.org' e-mail address.
        Therefore, be sure that you send the announce message by your apache e-mail address.
        See Committer e-mail configuration for detail.
        NOTE: When sending announce message to multiple lists together from your @apache.org e-mail address,
        be careful because your message can be rejected if your @apache.org e-mail address didn't susbscribe user mailinglist
         (portalapps-user@portals.apache.org, in this case.) You can either subscribe it first from your @apache.org
         e-mail address or send the announce message twice separately.

        NOTE: It is not required but it is better to digitally sign the announce e-mail message by using your PGP key.

                - go to G-mail settings page
                - Select 'Accounts and Import' tab
                - In 'Send mail as' field,
                 - click on 'Add another email address you own'
                 - type your name and apache e-mail address in the popup
                 - enter 'mail-relay.apache.org' in SMTP Server field and choose 465 as port number
                 - enter your apache account username and password
                 - select 'Secured connection using SSL (recommended)' (default)
                 - click on 'Add Account'
                 - ...
                - You can change the default send email address if want there.
                - When sending e-mail, check the sender address is @apache.org.

------------------------------------ Release Candidate Email Template ------------------------------------------------------------
To: pluto-dev list
cc: pluto-user list, portals-pmc list
Subject: [VOTE] Release Apache Portals Pluto 3.1.0

Dear Apache Portals Pluto Team and community,

I've staged a release candidate for the new Apache Portals Pluto 3.1.0 release.

This release candidate includes:

* Fully compliant Reference Implementation of the new Portlet 3.0 Specification per JCR-362
      https://www.jcp.org/en/jsr/detail?id=362
* Fully completed TCK (Test Compatibility Kit) for Portlet Spec 3.0

Please review the release candidate for this project which is found in the following maven staging repository:
https://repository.apache.org/content/repositories/orgapacheportals-****/

The source and other artifacts have been made available at the /dist/dev directory:
https://dist.apache.org/repos/dist/dev/portals/pluto/

(These files will be promoted to /dist/release if the vote passes)

The Release Notes are available here:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=****&version=******

The KEYS file to verify the release artifacts signature can be found here:
https://dist.apache.org/repos/dist/release/portals/pluto/KEYS

Please review the release candidates and vote on releasing Apache Portals Pluto 3.1.0

REMINDER: According to the following policy:
http://www.apache.org/legal/release-policy.html#release-approval
   "Before casting +1 binding votes, individuals are REQUIRED to download all
    signed source code packages onto their own hardware, verify that they meet
    all requirements of ASF policy on releases as described below, validate all
    cryptographic signatures, compile as provided, and test the result on their
    own platform."

Please review the release candidates and vote on releasing Apache Portals Pluto 3.1.0

This vote is open for the next 72 hours.

Please cast your vote:

[ ] +1 for Release
[ ]  0  for Don't care
[ ] -1 Don't release (do provide a reason then)

Regards,

(your name)

------------------------------------ Result/Vote Email Template ------------------------------------------------------------

Respond to last email
Subject: [RESULT][VOTE] Release Apache Portals Pluto 3.1.0

Apache Portals Team and community,

This release is accepted with the following votes:

 +1 Randy Watler
 +1 Woonsan Ko
 +1 David S Taylor

Thank you all for voting!

We will promote the release candidates to the Maven Central Repository and upload the source and binary distributions to the official download area.

An announcement about the new release will be send out as soon as the Pluto website is updated and the source and binary distributions have been mirrored.

Regards,

(your name)

------------------------------------ Release Email -------------------------------------------------
To      announce@apache.org
        general@portals.apache.org
        pluto-user@portals.apache.org
        jetspeed-user@portals.apache.org

Subject: [ANNOUNCE] Apache Portals Pluto 3.1.0 release

The Apache Portals team is pleased to announce the General Availability of
Apache Pluto version 3.1.0.

Additional Resources:

The Java Community Process JSR 362 page will allow you to access the complete
specification for full details:
http://jcp.org/en/jsr/detail?id=362

The Portlet API Version 3.0 page documents the portlet programming interface:
http://portals.apache.org/pluto/portlet-3.0-apidocs/index.html

For a full overview of all the Pluto features, see the online documentation.
To get up and running quickly, download the bundle which comes with a bundled
latest Tomcat 8 ready to run.

Features:
http://portals.apache.org/pluto/v310/v3Features.html

Release Notes:
http://portals.apache.org/pluto/v310/release-notes.html

Website Documentation:
http://portals.apache.org/pluto

Downloads:
https://portals.apache.org/pluto/download.html

--
David S Taylor
On behalf of the Apache Portals PMC
