<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">

  <properties>
    <title>Release Process</title>
    <author email="dev@syncope.apache.org">Apache Syncope Documentation Team</author>
  </properties>

  <body>
    <div class="toc_container">
      <macro name="toc">
        <param name="class" value="toc"/>
      </macro>
    </div>

    <section name="Introduction">
      <p>The Syncope team uses the 
        <a href="https://repository.apache.org">Apache Nexus repository</a> for releasing SNAPSHOT and release artifacts.
        <br/>
        More details on
        <a href="http://www.apache.org/dev/publishing-maven-artifacts.html#maven">releasing Maven artifacts</a>
        at The Apache Software Foundation.
      </p>
    </section>
    
    <section name="Prerequisites">
      <subsection name="GIT">
        <p>Install GIT; 
          <a href="http://www.git-scm.com/downloads">binary packages</a> for various platforms are available.
        </p>
      </subsection>
      
      <subsection name="GPG">
        <p>Install/Configure GPG - The artifacts that are deployed to the ASF central repository need to
          be signed. To do this you will need to have a public and private keypair. There is a very good
          <a href="http://www.sonatype.com/people/2010/01/how-to-generate-pgp-signatures-with-maven/">guide</a> that 
          will walk you though this.</p>
      </subsection>

      <subsection name="Apache Maven">
        <p>Install Apache Maven 3.0.3 or higher; we strongly encourage our committers to install 
          the latest <a href="http://maven.apache.org/download.html">Apache Maven</a> version available.
        </p>
      
        <p>Maven allows you to encrypt your servers' passwords. We highly recommend that you follow this
          <a href="http://maven.apache.org/guides/mini/guide-encryption.html">guide</a> to set your master password and
          use it to encrypt your ASF password in the next section.
        </p>
      </subsection>

      <subsection name="ASF settings">
        <p>Using the instructions from the previous step encrypt your Apache Nexus repository password and add the 
          following servers to your 
          <code>~/.m2/settings.xml</code> file. You may already have other servers in this file, if not just create
          the file.
        </p>

        <source><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<settings>
  ...
  <servers>
    <server>
      <id>apache.snapshots.https</id>
      <username>{put your ASF username here}</username>
      <password>{put your encrypted password here}</password>
    </server>
    <server>
      <id>apache.releases.https</id>
      <username>{put your ASF username here}</username>
      <password>{put your encrypted password here}</password>
    </server>
  </servers>
  ...
  <profiles>
    <profile>
      <id>apache</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <mavenExecutorId>forked-path</mavenExecutorId>
        <gpg.keyname>your-gpg-keyname</gpg.keyname>
        <!-- optional -->
        <gpg.passphrase>your-gpg-passphrase</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  ...
</settings>]]></source>
      </subsection>
    </section>
    
    <section name="Release steps">
      
      <p>
        In the following, read
        <dl>
          <dt>
            <tt>$VERSION</tt>
          </dt>
          <dd>
            <p>the version being released</p>
          </dd>
          <dt>
            <tt>$SYNCOPE_RELEASE_DIR</tt>
          </dt>
          <dd>
            <p>
              the working directory containing the GIT clone repository for the branch under release
            </p>
          </dd>
          <dt>
            <tt>$SYNCOPE_SITE_DIR</tt>
          </dt>
          <dd>
            <p>
              the working directory containing the GIT clone repository for the branch for site management
            </p>
          </dd>
        </dl>
      </p>
      
      <subsection name="Verify DBMSes and Java EE containers">
        <p>
          This is an optional step.<br/>
          These verifications take some time and have quite strong environment requirements. However, it is of 
          fundamental importance to go through these at least once for every major release.
        </p>
        <p>
          For more information please take a look at <a href="building#fit.2Fcore-reference">build instructions</a>.
        </p>
      </subsection>
      
      <subsection name="Prepare the source for release">
        <ol>
          <li>Clean up JIRA so the <b>Fix Version</b> in issues resolved since the last
            release includes this release version correctly. Also, transition any
            <b>Resolved</b> issues to the <b>Closed</b> state.
          </li>
          <li>
            From <tt>$SYNCOPE_RELEASE_DIR</tt>, update the <tt>CHANGES</tt> file, 
            based on the text release reports from JIRA, then commit and push:
            <source><![CDATA[git commit -m "Updating CHANGES for release" CHANGES
git push]]></source>
          </li>
          <li>
            From <tt>$SYNCOPE_RELEASE_DIR</tt>, update
            <ol>
              <li>
                <tt>ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/META-INF/MANIFEST.MF</tt>
              </li>
              <li>
                <tt>ide/eclipse/bundles/org.apache.syncope.ide.eclipse.tests/META-INF/MANIFEST.MF</tt>
              </li>
              <li>
                <tt>ide/eclipse/releng/org.apache.syncope.ide.eclipse.site/category.xml</tt>
              </li>
            </ol>
            with <tt>$VERSION</tt>, then commit and push:
            <source><![CDATA[git commit -a -m "Updating Eclipse files for release"
git push]]></source>
          </li>
          <li>
            From <tt>$SYNCOPE_SITE_DIR</tt>, update the <tt>src/site/xdoc/downloads.xml</tt> 
            site page by changing the relevant URLs, then commit and push:
            <source><![CDATA[git commit -m "Updating downloads site page for release" src/site/xdoc/downloads.xml
git push]]></source>
          </li>
        </ol>
      </subsection>
      
      <subsection name="Prepare the release">
        <p>Perform the steps below from <tt>$SYNCOPE_RELEASE_DIR</tt>.</p>
        <ol>
          <li>
            Do a dry run of the <code>release:prepare</code> step.
            <source>mvn -P apache-release release:prepare -Darguments="-P all,docker -DbuildNumber=syncope-$VERSION" -DdryRun=true</source>

            The dry run will not commit any changes and gives you the opportunity to verify that the 
            release process will complete as expected.
          
            <p>
              <em>If you cancel a 
                <code>release:prepare</code> before it updates the pom.xml versions, then use the 
                <code>release:clean</code> goal to just remove the extra files that were created.
              </em>
            </p>
          </li>
          <li>
            Verify that the release process completed as expected:
            <ol>
              <li>The release plugin will create <code>pom.xml.tag</code> files which contain the changes that would 
                have been committed. The only differences between <code>pom.xml.tag</code> and its corresponding 
                <code>pom.xml</code> file should be the version number.
              </li>
              <li>
                If other formatting changes have been made you should review the changes and then commit them:
                <source>git commit -a -m "Fixing formatting for release"</source>
              </li>
              <li>
                Assuming the <code>.tag</code> files look OK you may proceed and do any other validation you feel 
                necessary. The following list may be helpful:
                <ol>
                  <li>Check <code>release.properties</code> and make sure that the scm properties have the
                    right version. Sometimes the scm location can be the previous version not the next version.
                  </li>
                  <li>
                    Verify signatures: On Un*x platforms the following command can be executed:
                    <source><![CDATA[
for file in `find . -type f -iname '*.asc'`
do
  gpg --verify ${file} 
done]]></source>
                    You'll need to look at the output to ensure it contains only good signatures:
                    <source><![CDATA[
gpg: Good signature from ...
gpg: Signature made ...]]></source>
                  </li>
                </ol>
              </li>
              <li>
                Once any failures or required updates have been committed to GIT, rollback the release prepare files:
                <source>mvn -P apache-release release:rollback</source>
              </li>
            </ol>
          </li>
          <li>
            Run the <code>release:prepare</code> step for real this time. You'll be prompted for the same version 
            information and optionally your GPG passphrase again.
            <source>mvn -P apache-release release:prepare -Darguments="-P all,docker -DbuildNumber=syncope-$VERSION"</source>
          </li>
          <li>
            Backup (zip or tar) your local release candidate directory in case you need to rollback the release after 
            the next step is performed.
            <source><![CDATA[
cd ..
tar -czf $VERSION.tar.gz $VERSION/
cd $VERSION]]></source>
          </li>
        </ol>
      </subsection>
      
      <subsection name="Perform the release">
        <ol>
          <li>
            <b>Staging artifacts</b>
            <source><![CDATA[
svn co https://dist.apache.org/repos/dist/dev/syncope syncope-dist-dev
cd syncope-dist-dev              
mkdir $VERSION                  
cd $VERSION
                                    
cp $SYNCOPE_RELEASE_DIR/target/syncope-*-source-release.zip .
cp $SYNCOPE_RELEASE_DIR/target/syncope-*-source-release.zip.asc .
cp $SYNCOPE_RELEASE_DIR/standalone/target/syncope-standalone-*-distribution.zip .
cp $SYNCOPE_RELEASE_DIR/standalone/target/syncope-standalone-*-distribution.zip.asc .
cp $SYNCOPE_RELEASE_DIR/installer/target/syncope-installer-*-uber.jar .
cp $SYNCOPE_RELEASE_DIR/installer/target/syncope-installer-*-uber.jar.asc .
cp $SYNCOPE_RELEASE_DIR/deb/core/target/apache-syncope-*.deb .           
cp $SYNCOPE_RELEASE_DIR/deb/core/target/apache-syncope-*.deb.asc .
cp $SYNCOPE_RELEASE_DIR/deb/console/target/apache-syncope-console-*.deb .
cp $SYNCOPE_RELEASE_DIR/deb/console/target/apache-syncope-console-*.deb.asc .
cp $SYNCOPE_RELEASE_DIR/deb/enduser/target/apache-syncope-enduser-*.deb .
cp $SYNCOPE_RELEASE_DIR/deb/enduser/target/apache-syncope-enduser-*.deb.asc .
cp $SYNCOPE_RELEASE_DIR/client/cli/target/syncope-client-cli-*.zip .
cp $SYNCOPE_RELEASE_DIR/client/cli/target/syncope-client-cli-*.zip.asc .
cp $SYNCOPE_RELEASE_DIR/ide/eclipse/releng/org.apache.syncope.ide.eclipse.site/target/org.apache.syncope.ide.eclipse.site-*.zip .
cp $SYNCOPE_RELEASE_DIR/ide/eclipse/releng/org.apache.syncope.ide.eclipse.site/target/org.apache.syncope.ide.eclipse.site-*.zip.asc .
cp $SYNCOPE_RELEASE_DIR/ide/netbeans/target/syncope-ide-netbeans-*.nbm .
cp $SYNCOPE_RELEASE_DIR/ide/netbeans/target/syncope-ide-netbeans-*.nbm.asc .
# only for 2_1_X
cp $SYNCOPE_RELEASE_DIR/core/upgrade/target/syncope-core-upgrade-*.zip .
cp $SYNCOPE_RELEASE_DIR/core/upgrade/target/syncope-core-upgrade-*.zip.asc .
              
for file in `find . -type f -iname '*.asc'`
do
  gpg --verify ${file} 
done
          
for file in `find . -name '*.deb' -or -name '*.jar' -or -name '*.zip' -or -name '*.nbm'`; do
 openssl sha512 $file | sed 's/.*= //' > $file.sha512
done

cd ..
svn add $VERSION
svn commit -m "Staging artifacts for $VERSION vote"]]></source>
          </li>
          <li>
            <b>Staging site</b>
            <source><![CDATA[
unzip $SYNCOPE_RELEASE_DIR/target/syncope-$VERSION-source-release.zip
cd syncope-$VERSION        
mvn -PskipTests,all

cd standalone/target/standalone/apache-tomcat-* && chmod 755 bin/*.sh && ./bin/startup.sh

curl -o /tmp/syncope.wadl http://localhost:9080/syncope/syncope.wadl

curl -o /tmp/index.html http://localhost:9080/syncope/index.html
sed -i 's/\/syncope\/webjars\/jquery\/3.3.1-1\/jquery.min.js/https:\/\/code.jquery.com\/jquery-3.3.1.min.js/' /tmp/index.html 
sed -i 's/\/syncope\/webjars\/jquery-ui\/1.12.1\/jquery-ui.min.js/http:\/\/code.jquery.com\/ui\/1.12.1\/jquery-ui.min.js/' /tmp/index.html               
sed -i 's/\/syncope\/webjars\/jquery-ui-themes\/1.12.1\/smoothness\/jquery-ui.min.css/https:\/\/code.jquery.com\/ui\/1.12.1\/themes\/smoothness\/jquery-ui.css/' /tmp/index.html 

# if releasing from 2_0_X
curl -o /tmp/schema_1_syncope2.html http://localhost:9080/syncope/schema_1_syncope2.html
sed -i 's/\/syncope\/webjars\/highlightjs\/9.15.10\/styles\/default.min.css/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.15.10\/styles\/default.min.css/' /tmp/schema_1_syncope2.html 
sed -i 's/\/syncope\/webjars\/highlightjs\/9.15.10\/highlight.min.js/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.15.10\/highlight.min.js/' /tmp/schema_1_syncope2.html 

# else if releasing from 2_1_X
curl -o /tmp/schema_1_syncope21.html http://localhost:9080/syncope/schema_1_syncope21.html
sed -i 's/\/syncope\/webjars\/highlightjs\/9.15.10\/styles\/default.min.css/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.15.10\/styles\/default.min.css/' /tmp/schema_1_syncope21.html 
sed -i 's/\/syncope\/webjars\/highlightjs\/9.15.10\/highlight.min.js/http:\/\/cdnjs.cloudflare.com\/ajax\/libs\/highlight.js\/9.15.10\/highlight.min.js/' /tmp/schema_1_syncope21.html 

./bin/shutdown.sh && cd - 
              
svn checkout https://svn.apache.org/repos/asf/syncope/site/ site

cd $SYNCOPE_SITE_DIR
mvn -P site -Dsite.deploymentBaseUrl=file:///<absolute path to/site>/$VERSION

cd <absolute path to/site>/$VERSION

# if releasing from 2_0_X
mkdir -p rest/2.0
mv /tmp/index.html rest/2.0
mv /tmp/schema_1_syncope2.html rest/2.0
mv /tmp/syncope.wadl rest/2.0
cp $SYNCOPE_SITE_DIR/target/generated-docs/getting-started.* docs/2.0/
cp $SYNCOPE_SITE_DIR/target/generated-docs/reference-guide.* docs/2.0/
cp -r $SYNCOPE_SITE_DIR/target/generated-docs/images docs/2.0/
cd docs
ln -s 2.1/reference-guide.html .
ln -s 2.1/getting-started.html .
ln -s 2.1/images/ .
cd ../..
svn add $VERSION
svn copy apidocs/2.1 $VERSION/apidocs/
svn copy rest/2.1 $VERSION/rest/
svn copy docs/2.1/ $VERSION/docs/

# else if releasing from 2_1_X
mkdir -p rest/2.1
mv /tmp/index.html rest/2.1
mv /tmp/schema_1_syncope21.html rest/2.1
mv /tmp/syncope.wadl rest/2.1
cp $SYNCOPE_SITE_DIR/target/generated-docs/getting-started.* docs/2.1/
cp $SYNCOPE_SITE_DIR/target/generated-docs/reference-guide.* docs/2.1/
cp -r $SYNCOPE_SITE_DIR/target/generated-docs/images docs/2.1/
cd docs
ln -s 2.1/reference-guide.html .
ln -s 2.1/getting-started.html .
ln -s 2.1/images/ .
cd ../..
svn add $VERSION
svn copy apidocs/2.0 $VERSION/apidocs/
svn copy rest/2.0 $VERSION/rest/
svn copy docs/2.0/ $VERSION/docs/

svn commit -m "Staging site for release"]]></source>
          </li>
          <li>
            From <code>$SYNCOPE_RELEASE_DIR</code> execute (this step will create a maven staging repository):
            <source>mvn -P apache-release release:perform -Darguments="-P all,docker -DbuildNumber=syncope-$VERSION" [-Duser.name=&lt;your_apache_uid&gt;]</source>
        
            <p>
              <em>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.
              </em>
            </p>
            
            <ol>
              <li>Verify the staged artifacts in the Nexus repository:
                <ol>
                  <li>
                    <a href="https://repository.apache.org/index.html">https://repository.apache.org/index.html</a>
                  </li>
                  <li>
                    <strong>Enterprise --&gt; Staging</strong>
                  </li>
                  <li>
                    <strong>Staging tab --&gt; Name column --&gt; org.apache.syncope</strong>
                  </li>
                  <li>Navigate through the artifact tree and make sure that all binary, 
                    <code>javadoc</code>,
                    <code>sources</code>, and 
                    <code>tests</code> jars, as well as 
                    <code>poms</code>s, ... have 
                    <code>.asc</code> (GPG signature) and 
                    files
                    <br/>
                    The <code>syncope-$VERSION-source-release.zip</code> 
                    should likewise have signature and checksum files.
                  </li>
                </ol>
              </li>
              <li>Close the Nexus staging repo:
                <ol>
                  <li>
                    <a href="https://repository.apache.org/index.html">https://repository.apache.org/index.html</a>
                  </li>
                  <li>
                    <strong>Enterprise --&gt; Staging</strong>
                  </li>
                  <li>
                    <strong>Staging tab --&gt; Name column --&gt; org.apache.syncope</strong>
                  </li>
                  <li>Right click on the open 
                    <code>org.apache.syncope-XXX</code> staging repo
                    and select 
                    <strong>Close</strong>.
                  </li>
                </ol>
              </li>
            </ol>
          </li>
          <li>
            Set the updated version for next development iteration (as provided above to <tt>release:prepare</tt>) in
            <ol>
              <li>
                <tt>ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/META-INF/MANIFEST.MF</tt>
              </li>
              <li>
                <tt>ide/eclipse/bundles/org.apache.syncope.ide.eclipse.tests/META-INF/MANIFEST.MF</tt>
              </li>
              <li>
                <tt>ide/eclipse/releng/org.apache.syncope.ide.eclipse.site/category.xml</tt>
              </li>
              <li>
                <tt>ide/eclipse/bundles/org.apache.syncope.ide.eclipse.tests/pom.xml</tt>
              </li>
            </ol>
            then commit and push:
            <source><![CDATA[git commit -a -m "Updating Eclipse files for next development iteration"
git push]]></source>            
          </li>
        </ol>
      </subsection>
      
      <subsection name="Vote the release">
        <ol>
          <li>
            Create a 
            <code>VOTE</code> email thread on 
            <a href="mailto:dev@syncope.apache.org">syncope-dev</a> to record votes as replies, e.g.:
            <pre><![CDATA[
To: dev@syncope.apache.org
Subject: [VOTE] Apache Syncope $VERSION

I've created a $VERSION release, with the following artifacts up for a vote:

GIT source tag (XXXXXXXXXXXXXXXX):
https://gitbox.apache.org/repos/asf?p=syncope.git;a=tag;h=XXXXXXXXXXXXXXXX

List of changes:
https://gitbox.apache.org/repos/asf?p=syncope.git;a=blob_plain;f=CHANGES;h=XXXXXXXXXXXXXXXX;hb=YYYYYYYYYYYYYYYYYYYYY              

Staging artifacts:
https://dist.apache.org/repos/dist/dev/syncope/$VERSION

Maven staging repo:
https://repository.apache.org/content/repositories/orgapachesyncope-ZZZZ/

Staging site:
http://syncope.apache.org/$VERSION/

PGP release keys (signed using ABCDEFG):
https://downloads.apache.org/syncope/KEYS

Vote will be open for 72 hours.

[ ] +1  approve
[ ] +0  no opinion
[ ] -1  disapprove (and reason why)]]></pre>
          </li>
          <li>
            Perform a review of the release and cast your vote; more details on
            <a href="http://www.apache.org/dev/release.html">Apache releases</a>.
          </li>
          <li>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 (see <a href="#Recovering_from_a_vetoed_release">&quot;Recovering from a vetoed release&quot;</a>).
          </li>
          <li>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:
            <pre><![CDATA[
To: dev@syncope.apache.org
Subject: [RESULT] [VOTE] Apache Syncope $VERSION

Hi all,
after 72 hours, the vote for Syncope $VERSION [1] *passes*
with ... PMC + ... non-PMC votes.

+1 (PMC / binding)
* ...

+1 (non binding)
* ... (or <none>)

0
* ... (or <none>)

-1
* ... (or <none>)

Thanks to everyone participating.

I will now copy this release to Syncope' dist directory and promote the artifacts to the central Maven repository.

Best regards.

[1] <link to syncope-dev ML archives for the related [VOTE] thread>]]></pre>
          </li>
        </ol>
      </subsection>
      
      <subsection name="Finalize the release">
        <ol>
          <li>Promote the staged Nexus artifacts:
            <ol>
              <li>
                <a href="https://repository.apache.org/index.html">https://repository.apache.org/index.html</a>
              </li>
              <li>
                <strong>Enterprise --&gt; Staging</strong>
              </li>
              <li>
                <strong>Staging tab --&gt; Name column --&gt; org.apache.syncope</strong>
              </li>
              <li>Right click on the closed 
                <code>org.apache.syncope-XXX</code> staging repo and select 
                <strong>Release</strong>.
              </li>
            </ol>
          </li>
          <li>
            Add the distribution artifacts to the distribution area
            <source><![CDATA[
svn mv -m "Moving the voted release artifacts to dist/release" \
https://dist.apache.org/repos/dist/dev/syncope/$VERSION
https://dist.apache.org/repos/dist/release/syncope/

svn co https://dist.apache.org/repos/dist/release/syncope syncope-dist-release
cd syncope-dist-release
svn rm <any older release artifact (if present)>
svn commit -m "Cleaning up older releases"]]></source>
          </li>
          <li>
            Add appropriate release notes to
            <a href="https://cwiki.apache.org/confluence/display/SYNCOPE/Releases">Releases</a>
            wiki page based on the HTML release reports from JIRA
          </li>
          <li>
            Update the <a href="https://issues.apache.org/jira/plugins/servlet/project-config/SYNCOPE/versions">JIRA 
              versions</a> page to mark the version as <strong>Released</strong>, 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.
          </li>
          <li>
            Promote the staging site
            <source><![CDATA[
svn co https://svn.apache.org/repos/asf/syncope/site/
cd site
svn rm *.html apidocs rest css images img js fonts docs
svn mv $VERSION/* .
svn rm $VERSION
svn commit -m "Promoting the staging site"]]></source>
          </li>
          <li>
            Deploy the updated Docker images to <a href="https://hub.docker.com/">DockerHub</a> by adjusting the GIT tag
            name then running the <a href="https://builds.apache.org/job/Syncope-Release-Docker">dedicated Jenkins job</a>.
          </li>
        </ol>
      </subsection>
      
      <subsection name="Announce the release">
        After the mirrors have had time to update (24 hours to be on the safe side), make an announcement about the release on the
        <a href="mailto:user@syncope.apache.org">user</a>,
        <a href="mailto:dev@syncope.apache.org">dev</a>, and
        <a href="mailto:announce@apache.org">announce@apache.org</a> lists as per
        <a href="http://www.apache.org/foundation/mailinglists.html#foundation-announce">the Apache Announcement Mailing Lists page</a>
      </subsection>
    </section>
    
    <section name="Recovering from a vetoed release">
      <ol>
        <li>
          <p>Reply to the initial vote email prepending 
            <code>[CANCELED]</code> to the original subject.
          </p>
        </li>
        <li>
          <p>Rollback the version upgrades in trunk by 
            <em>either</em>:
          </p>
          <ol>
            <li>
              restore the $VERSION.tar.gz and run
              <source>mvn -P apache-release release:rollback</source> 
            </li>
            <li>             
              <em>or</em>
              manually revert the version numbers in the branch under release to the prior version and commit
            </li>
          </ol>
        </li>
        <li>
          <p>Delete the GIT tag created by the 
            <code>release:perform</code> step:
          </p>
          <source>git tag -d $VERSION &amp;&amp; git push origin</source>
        </li>
        <li>
          <p>Delete the staging site:
          </p>
          <source>svn remove https://svn.apache.org/repos/asf/syncope/site/$VERSION -m "Deleting staging site from rolled back release"</source>
        </li>
        <li>
          <p>Drop the Nexus staging repo:</p>
          <ol>
            <li>
              <a href="https://repository.apache.org/index.html">https://repository.apache.org/index.html</a>
            </li>
            <li>
              <strong>Enterprise --&gt; Staging</strong>
            </li>
            <li>
              <strong>Staging tab --&gt; Name column --&gt; org.apache.syncope</strong>
            </li>
            <li>Right click on the closed 
              <code>org.apache.syncope-XXX</code> staging repo and select 
              <strong>Drop</strong>.
            </li>
          </ol>
        </li>
        <li>
          Make the required updates that caused the vote to be canceled.
        </li>
        <li>Spin another release attempt!</li>
      </ol>
    </section>
  </body>
</document>
