<!--
 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.
-->

<project name="release" basedir="..">

  <description>
    This an Ant build file to automate the release process of
    Apache Slider (incubating).

    It wraps the core maven build and package commands with the
    operations needed to actually publish the artifacts, generate
    email announcements, etc.

    Requirements
    -all the various build tools are installed and on the path
    -you have git installed

    properties to set in ../release.properties

    slider.release.version=0.91.0
    slider.develop.version=0.92-SNAPSHOT
    release.jira=SLIDER-1014
    release.rc.suffix=-RC1

    # needed for announcements
    release.jira.version
    staging.repository

    #optional
    mvn.extra.args  : anything for maven
    git-check-unmodified.disabled : set this property to skip checking for unmodified
      files and halting the build if so (primarily for developing the release.xml build)
    git.version : the checksum to use in email announcements. Will need to be manually set
      if the git show-ref command is returning multiple checksums

  </description>

  <target name="init">
    <property file="build.properties" />
    <property name="release.properties" location="../release.properties" />
    <loadproperties srcfile="${release.properties}"/>
    <!-- Create the time stamp -->
    <tstamp/>

    <macrodef name="require">
      <attribute name="property" />
      <attribute name="text" default="" />
      <sequential>
        <fail unless="@{property}">
          @{text}
          Unset property: @{property}
        </fail>
      </sequential>
    </macrodef>

    <require property="slider.release.version" />
    <require property="slider.develop.version" />
    <require property="release.jira" />
    <require property="release.rc.suffix" />

    <property name="mvn.skiptests" value="-DskipTests" />
    <property name="mvn.profile" value=" -Papache-release -Pazure" />
    <property name="mvn.extra.args" value="" />

    <property name="release.name" value="slider-${slider.release.version}" />
    <property name="rc.name" value="${slider.release.version}${release.rc.suffix}" />
    <property name="asf.user" value="${user.name}" />
    <property name="upload.keyfile" location="${user.home}/.ssh/id_dsa" />
    <property name="expanded.tar" location="slider-assembly/target/${release.name}-all/" />
    <property name="source.archive.name" value="apache-${release.name}-source-release" />
    <property name="target.source.tar.gz"
      location="target/${source.archive.name}.tar.gz" />
    <property name="target.source.zip"
      location="target/${source.archive.name}.zip" />

    <property name="target.svn.publish.dir" location="target/publish" />

    <property name="application.dir" location="${expanded.tar}/${release.name}/" />


    <!-- nexus -->
    <property name="nexus.staging.repository" value="(unset nexus.staging.repository)" />
    <property name="nexus.base.url" value="https://repository.apache.org/content/repositories/" />
    <property name="nexus.staging.url" value="${nexus.base.url}${nexus.staging.repository}/" />

    <!-- SVN properties-->
    <property name="incubator.svn.url"
      value="https://dist.apache.org/repos/dist/dev/incubator" />
    
    <!-- RC release properties-->
    <property name="svn.rc.dir" value="${svn.publish.dir}/${rc.name}" />
    <property name="svn.rc.url" value="${incubator.svn.url}/slider/${rc.name}" />
    <property name="svn.rc.source.tar.gz"
      value="${svn.rc.url}/${source.archive.name}.tar.gz" />
    <property name="svn.rc.source.zip"
      value="${svn.rc.url}/${source.archive.name}.zip" />

    <!-- final release properies-->
    <property name="svn.release.dir" value="${svn.publish.dir}/${slider.release.version}" />
    <property name="svn.release.url" value="${incubator.svn.url}/slider/${slider.release.version}" />
    <property name="svn.release.source.tar.gz"
      value="${svn.release.url}/${source.archive.name}.tar.gz" />
    <property name="svn.release.source.zip"
      value="${svn.release.url}/${source.archive.name}.zip" />
    <property name="nexus.release.repository"
      value="https://repository.apache.org/service/local/repo_groups/public/content/" />
    <!-- URL to the ASF artifacts, which will be synced with maven central later -->
    <!-- https://repository.apache.org/service/local/repo_groups/public/content/org/apache/slider/slider/0.81.1-incubating/slider-0.81.1-incubating.pom-->
    <property name="nexus.release.slider.pom"
      value="${nexus.release.repository}/org/apache/slider/slider/${slider.release.version}/slider-${slider.release.version}.pom" />
    <property name="maven.central.slider.pom"
      value="http://repo1.maven.org/maven2/org/apache/slider/slider/${slider.release.version}/slider-${slider.release.version}.pom" />

    <property name="svn.commit.message"
      value="[${release.jira}] Releasing ${rc.name}" />
    <property name="git.commit.message"
      value="${svn.commit.message}" />

    
    <!-- Git properties-->
    <property name="git.remote.repository" value="origin" />
    <require property="git.release.branch" />
    <property name="git.commit.text" value="building ${rc.name}" />
    <property name="git.commit.message"
      value="[${release.jira}] ${git.commit.text}" />
    <property name="git.base.url"
      value="https://git-wip-us.apache.org/repos/asf?p=incubator-slider.git" />

    <property name="pgp.url"
      value="http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=${asf.user}@apache.org"/>

    <property name="get.dir" location="target/get" />
    <delete dir="${get.dir}" />
    <mkdir dir="${get.dir}" />
    <property name="slider.vote.file" location="target/vote.txt" />
    <property name="slider.vote.results.file" location="target/vote-results.txt" />
    <property name="slider.vote.incubator.file" location="target/vote-incubator.txt" />
    <property name="slider.vote.announcement.file" location="target/announcement.txt" />

    <property name="general" value="general@incubator.apache.org" />
    <property name="dev@slider" value="dev@slider.incubator.apache.org" />
    <echo>
      Releasing Apache Slider (incubating)
      ====================================

      slider.release.version: ${slider.release.version}
      slider.develop.version: ${slider.develop.version}
      release.rc.suffix:      ${release.rc.suffix}
      release.jira:           ${release.jira}
      slider.conf.dir:        ${slider.conf.dir}

      git
      ---
      git.remote.repository:  ${git.remote.repository}
      git.release.branch:     ${git.release.branch}
      git.version:            ${git.version}  (auto-derived if unset)


      svn publishing
      --------------
      svn.publish.dir:     ${svn.publish.dir}
      svn.commit.message: "${svn.commit.message}"
      asf.user:            ${asf.user} (for commits and PGP)

      For announcements
      -----------------
      release.jira.version: ${release.jira.version}
      staging.repository:   ${staging.repository}

      -- misc --
      mvn.extra.args:         "${mvn.extra.args}"
      git-check-unmodified.disabled: ${git-check-unmodified.disabled}

    </echo>


    <macrodef name="must-be-zero">
      <attribute name="value" />
      <attribute name="text" default="" />
      <sequential>
        <fail>
          <condition>
            <not>
              <equals arg1="0" arg2="@{value}" />
            </not>
          </condition>
          @{text}
          "@{value}" != 0
        </fail>
      </sequential>
    </macrodef>

    <macrodef name="must-exist">
      <attribute name="file" />
      <attribute name="text" default=""/>
      <sequential>
        <fail>
          <condition>
            <not><available file="@{file}"/></not>
          </condition>
          @{text}
          File not found: @{file}
        </fail>
      </sequential>
    </macrodef>
    <macrodef name="must-exist-with-checksums">
      <attribute name="file" />
      <attribute name="text" default=""/>
      <sequential>
        <fail>
          <condition>
            <or>
              <not><available file="@{file}"/></not>
              <not><available file="@{file}.sha1"/></not>
              <not><available file="@{file}.md5"/></not>
              <not><available file="@{file}.asc"/></not>
            </or>
          </condition>
          @{text}
          File or checksums not found: @{file}
        </fail>
      </sequential>
    </macrodef>


    <!-- template exec with the failonerror flag set-->
    <presetdef name="ex">
      <exec failonerror="true">
      </exec>
    </presetdef>

    <!-- maven command. the value of ${mvn.extra.args} is appended-->
    <macrodef name="mvn">
      <attribute name="command"/>
      <attribute name="tests" default="${mvn.skiptests}" />
      <attribute name="profile" default="${mvn.profile}" />
      <attribute name="dir" default="." />
      <sequential>
        <echo>maven : @{command}</echo>
        <ex executable="mvn" dir="@{dir}">
          <arg line="@{command} @{tests} @{profile} ${mvn.extra.args}"/>
        </ex>
      </sequential>
    </macrodef>

    <!--
    run maven and don't fail even if it does. Instead the property "property"
    is set to the return code
    -->
    <macrodef name="mvn-nofail">
      <attribute name="command" />
      <attribute name="property"/>
      <attribute name="tests" default="${mvn.skiptests}"/>
      <attribute name="profile" default="${mvn.profile}"/>
      <sequential>
        <echo>maven : @{command}</echo>
        <exec executable="mvn" failonerror="false" resultproperty="@{property}">
          <arg line="@{command} @{tests} @{profile} ${mvn.extra.args}" />
        </exec>
      </sequential>
    </macrodef>

    <!-- set the poms to a new version -->
    <macrodef name="mvn-setversion">
      <attribute name="version" />
      <sequential>
        <mvn command="versions:set -DnewVersion=@{version}" />
        <delete dir="." includes="**/pom.xml.versionsBackup" />
      </sequential>
    </macrodef>

    <!-- Run a git command-->
    <macrodef name="git">
      <attribute name="command"/>
      <sequential>
        <echo>git @{command}</echo>
        <ex executable="git" >
          <arg line="@{command}"/>
        </ex>
      </sequential>
    </macrodef>

    <presetdef name="svn">
      <ex executable="svn" />
    </presetdef>

    <macrodef name="gpg2">
      <attribute name="command"/>
      <sequential>
        <echo>gpg2 @{command}</echo>
        <ex executable="gpg2" >
          <arg line="@{command}"/>
        </ex>
      </sequential>
    </macrodef>

    <!-- lifted straight from Ant's manual -->
    <macrodef name="get-and-checksum">
      <attribute name="url" />
      <attribute name="dest" />
      <sequential>
        <local name="destdir" />
        <dirname property="destdir" file="@{dest}" />
        <get dest="${destdir}">
          <url url="@{url}" />
          <url url="@{url}.sha1" />
          <firstmatchmapper>
            <globmapper from="@{url}.sha1" to="@{dest}.sha1" />
            <globmapper from="@{url}" to="@{dest}" />
          </firstmatchmapper>
        </get>
        <local name="checksum.matches" />
        <local name="checksum.matches.fail" />
        <checksum file="@{dest}" algorithm="sha" fileext=".sha1"
          verifyproperty="checksum.matches" />
        <condition property="checksum.matches.fail">
          <equals arg1="${checksum.matches}" arg2="false" />
        </condition>
        <fail if="checksum.matches.fail">Checksum error</fail>
      </sequential>
    </macrodef>

  </target>

  <target name="clean" depends="init">
    <mvn command="clean -Pall-modules" />
    <!-- rm all .pyc files -->
    <delete dir="." includes="**/*.pyc" />
    <delete dir="." includes="*/target" />
  </target>

  <target name="install" depends="init, rat">
    <mvn command="install" />
  </target>

  <target name="test" depends="init">
    <mvn command="test" />
  </target>

  <target name="deploy" depends="init">
    <mvn command="deploy" />
  </target>

  <target name="package" depends="init">
    <mvn command="site:site package" />
  </target>

  <target name="mvnstage" depends="init">
    <mvn command="site:stage" />
  </target>

  <target name="integration-test" depends="init">
    <require property="slider.conf.dir" />
    <must-exist file="${slider.conf.dir}" />
    <mvn command="integration-test -Dslider.conf.dir=${slider.conf.dir} " />
  </target>

  <target name="rat" depends="init, clean"
    description="Execute the RAT scan, print the results and fail if there is a problem">
    <mvn-nofail command="apache-rat:check -Prat" property="rat.result"/>
    <loadfile property="rat.txt" srcfile="target/rat.txt" />
    <echo> return code =${rat.result}</echo>
    <must-be-zero value="${rat.result}" text="${rat.txt}"/>
  </target>

  <target name="license-check" depends="install">
    <mvn command="license:add-third-party -Dlicense.useMissingFile"/>
    <mvn dir="slider-assembly" command="license:aggregate-add-third-party  -Dlicense.useMissingFile" />
    <mvn dir="slider-agent" command="license:aggregate-add-third-party  -Dlicense.useMissingFile" />
  </target>

  <target name="set-to-release-version" depends="init"
    description="Set the POM version to slider.release.version ">
    <mvn-setversion version="${slider.release.version}" />
  </target>

  <target name="set-to-new-develop-version" depends="init"
    description="Set the POM version to slider.develop.version ">
    <mvn-setversion version="${slider.develop.version}" />
  </target>

  <target name="validate-packaging" depends="init">
    <must-exist file="${expanded.tar}"/>
    <must-exist file="${application.dir}"/>
    <must-exist file="${application.dir}/lib/slider-agent.tar.gz"/>
    <must-exist file="${target.source.tar.gz}"/>
    <must-exist file="${target.source.zip}"/>
  </target>

  <target name="checksums" depends="validate-packaging">
    <checksum algorithm="md5" forceoverwrite="true" >
      <fileset file="${target.source.tar.gz}" />
      <fileset file="${target.source.zip}" />
    </checksum>
    <checksum algorithm="sha1" forceoverwrite="true">
      <fileset file="${target.source.tar.gz}" />
      <fileset file="${target.source.zip}" />
    </checksum>
  </target>

  <!-- tarball operations; no actual build/package of binaries-->
  <target name="tarball-no-package" depends="validate-packaging, checksums" />

  <!-- tarball with packaging. This doesn't stage-->
  <target name="tarball" depends="clean, rat, package, tarball-no-package" />

  <target name="clean-target-dir" depends="init">
    <delete>
      <fileset dir="target"
        includes="rat.txt,.plxarc,archive-tmp,maven-shared-archive-resources"/>
    </delete>
  </target>

  <target name="prepare-rc" depends="validate-packaging, checksums" >
    <delete dir="${target.svn.publish.dir}" />
    <mkdir dir="${target.svn.publish.dir}/" />
    <copy todir="${target.svn.publish.dir}" >
      <fileset dir="target" includes="${source.archive.name}.*/" />
    </copy>
    <ex command="ls"><arg line="-al ${target.svn.publish.dir}"/></ex>
  </target>

  <target name="git-version" depends="init"
    description="get for checksum of the source tree. Can be forced by setting git.version">
    <ex executable="git" outputproperty="git.version">
      <arg line="show-ref FETCH_HEAD --head --hash" />
    </ex>
    <echo>git.version=${git.version}</echo>
    <property name="git.release.url"
      value="${git.base.url};a=commit;h=${git.version}" />
  </target>

  <!-- make sure the repo is unmodified.
   There's a secret flag to disable this *purely for development of this release build*-->
  <target name="git-check-unmodified"
    description="make sure there are no modified files"
    depends="init"
    unless="git-check-unmodified.disabled">
    <git command="diff-index HEAD --exit-code --" />
  </target>

  <target name="git-tag" depends="init, git-check-unmodified"
    description="commit staged git files with a standard message">
    <require property="git.tag.name" />
    <git command='tag -a "${git.tag.name}" -m "${git.commit.message}" ' />
  </target>

  <target name="git-commit" depends="init"
    description="commit staged git files with a standard message">
    <git command='commit -m "${git.commit.message}" ' />
  </target>

  <target name="git-push" depends="init, git-check-unmodified"
    description="Push the current branch to ${git.remote.repository}">
    <git command='push ${git.remote.repository}' />
  </target>

  <target name="git-create-release-branch" depends="init, git-check-unmodified"
    description="Create ${git.release.branch} and push to ${git.remote.repository}">
    <git command='checkout -b ${git.release.branch} --track' />
    <git command='push ${git.remote.repository} ${git.release.branch}' />
  </target>

  <target name="git-switch-release-branch" depends="init, git-check-unmodified"
    description="Switch to the release branch">
    <git command='checkout -b ${git.release.branch}' />
  </target>

  <target name="git-switch-develop-branch" depends="init, git-check-unmodified"
    description="Switch to the release branch">
    <git command='checkout -b ${git.release.branch}' />
  </target>


  <!-- SVN operations to push out the RC artifacts -->
  <target name="svn-setup" depends="init">
    <require property="svn.publish.dir" />
  </target>

  <target name="copy-to-svn" depends="svn-setup, checksums, prepare-rc"
    description="copy the artifacts to the svn-managed directory">
    <delete dir="${svn.rc.dir}" />
    <mkdir dir="${svn.rc.dir}" />
    <copy todir="${svn.rc.dir}" >
      <fileset dir="${target.svn.publish.dir}" includes="**/*" />
    </copy>
    <ex command="ls">
      <arg line="-al ${svn.rc.dir}" />
    </ex>
    <must-exist-with-checksums file="${svn.rc.dir}/${source.archive.name}.tar.gz" />
    <must-exist-with-checksums file="${svn.rc.dir}/${source.archive.name}.zip" />
  </target>

  <target name="svn-commit" depends="svn-setup"
    description="commit the SVN repo. This publishes the source artifacts">
    <must-exist file="${svn.rc.dir}/${source.archive.name}.tar.gz" />

    <svn>
      <arg value="add"/>
      <arg file="${svn.rc.dir}" />
    </svn>
    <svn>
      <arg value="commit"/>
      <arg value="-m"/>
      <arg value="${svn.commit.message}"/>
      <arg file="${svn.rc.dir}" />
    </svn>
  </target>

  <target name="publish-via-svn" depends="copy-to-svn, svn-commit" />

  <target name="svn-delete-rc-artifacts" depends="svn-setup">
    <svn>
      <arg value="delete" />
      <arg file="${svn.rc.dir}" />
    </svn>
    <svn>
      <arg value="commit" />
      <arg value="-m" />
      <arg value="[${release.jira}] deleting slider RC artifacts ${rc.name}" />
      <arg file="${svn.publish.dir}" />
    </svn>
  </target>

  <target name="svn-rename-final-artifacts" depends="svn-setup">
    <svn>
      <arg value="rename" />
      <arg file="${svn.rc.dir}" />
      <arg file="${svn.release.dir}" />
    </svn>
  </target>

  <target name="svn-release-final-artifacts" depends="svn-setup, svn-rename-final-artifacts"
    description="release the final artifacts by renaming them and committing the change">
    <svn>
      <arg value="commit" />
      <arg value="-m" />
      <arg value="[${release.jira}] publishing slider RC artifacts ${rc.name} as release ${slider.release.version}" />
      <arg file="${svn.publish.dir}" />
    </svn>
  </target>

  <target name="check-base-urls" depends="init"
    description="check the base URLs which can be validated independent of release values">
    <property name="get.dir" location="target/get" />
    <delete dir="${get.dir}" />
    <mkdir dir="${get.dir}" />
    <get dest="${get.dir}" verbose="true">
      <url url="${git.base.url}" />
      <url url="${incubator.svn.url}/" />
      <url url="${incubator.svn.url}/slider/" />
      <url url="${pgp.url}" />
      <url url="${nexus.base.url}" />
    </get>
  </target>

  <target name="check-rc-urls" depends="check-base-urls, git-version"
    description="check the RC release URLs and artifacts">
    <get dest="${get.dir}" verbose="true">
      <url url="${git.release.url}" />
      <url url="${nexus.staging.url}" />
      <url url="${svn.rc.url}" />
      <url url="${svn.rc.source.tar.gz}" />
      <url url="${svn.rc.source.tar.gz}.asc" />
      <url url="${svn.rc.source.tar.gz}.md5" />
      <url url="${svn.rc.source.tar.gz}.sha1" />
      <url url="${svn.rc.source.zip}" />
      <url url="${svn.rc.source.zip}.asc" />
      <url url="${svn.rc.source.zip}.md5" />
      <url url="${svn.rc.source.zip}.sha1" />
    </get>
  </target>
  
  <target name="check-release-urls" depends="check-base-urls, git-version"
    description="check the final release URLs and artifacts">
    <get dest="${get.dir}" verbose="true">
      <url url="${git.release.url}" />
      <url url="${nexus.release.slider.pom}" />
      <url url="${nexus.release.slider.pom}.sha1" />
      <url url="${nexus.release.slider.pom}.md5" />
      <url url="${nexus.release.slider.pom}.asc" />
      <url url="${maven.central.slider.pom}" />
      <url url="${maven.central.slider.pom}.sha1" />
      <url url="${maven.central.slider.pom}.md5" />
      <url url="${maven.central.slider.pom}.asc" />
      <url url="${svn.release.url}" />
      <url url="${svn.release.source.tar.gz}" />
      <url url="${svn.release.source.tar.gz}.asc" />
      <url url="${svn.release.source.tar.gz}.md5" />
      <url url="${svn.release.source.tar.gz}.sha1" />
      <url url="${svn.release.source.zip}" />
      <url url="${svn.release.source.zip}.asc" />
      <url url="${svn.release.source.zip}.md5" />
      <url url="${svn.release.source.zip}.sha1" />
    </get>
  </target>

  <target name="print-nexus-instructions" depends="init" >
    <echo >
      The artifacts are now on the Apache Repository staging server.
      ==============================================================

      1. With your ASF username and LDAP password, Log in to
         https://repository.apache.org/index.html
      2. Go to "Staging Repositories":
         https://repository.apache.org/index.html#stagingRepositories
      3. Search for the `orgapacheslider` repository with the highest number
      4. Select it
      5. Browse the content, verify the version number is what you want.
      6. Hit the "close" button (top of list).
         This will fail if it doesn't meet the ASF criteria
      7. Wait for the close process to complete.
      8. Get the name of the closed staging repository (e.g. orgapacheslider-1010)
         set the property nexus.staging.repository to his value
      9. Execute:
           ant -f bin/release.xml generate-vote-text
    </echo>
  </target>

  <target name="prepare-release-links" depends="init,git-version" >
    <require property="release.jira.version" />
    <property name="release.jira.page"
      value="https://issues.apache.org/jira/browse/SLIDER/fixforversion/${release.jira.version}/" />
    <property name="release.jira.notes"
      value="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315422&amp;version=${release.jira.version}" />
    <property name="common.links">
Git source:
  ${git.release.url}

Git commit SHA1: ${git.version}

Issues fixed:
  ${release.jira.page}

Release Notes:
  ${release.jira.notes}

PGP key:
  http://pgp.mit.edu:11371/pks/lookup?op=vindex&amp;search=${asf.user}@apache.org</property>

    <property name="release.core.links">Source artifacts:
  ${svn.rc.url}

Staged artifacts:
  ${nexus.staging.url}
${common.links}</property>


    <echo level="verbose">${release.core.links}</echo>
  </target>

  <target name="echo-vote-text" depends="prepare-release-links"
    description="build and print the slider developer vote message">
    <echo file="${slider.vote.file}">

To: ${dev@slider}
Subject: [VOTE] Apache Slider (incubating) release ${rc.name}

Hello,

This is a call for a vote on the Apache Slider (incubating) release ${rc.name}

${release.core.links}

[ ] +1 Release Apache Slider (incubating) ${rc.name}
[ ] +0 No opinion
[ ] -1 Do not release Apache Slider (incubating) ${rc.name}

Voting lasts 72h,

    </echo>
    <loadfile property="slider.vote.text" srcfile="${slider.vote.file}" />
    <echo>
Voting text is in ${slider.vote.file}
-------------

${slider.vote.text}

-----------

Now send an email to ${dev@slider}
with the subject and body derived from  ${slider.vote.file}
    </echo>
  </target>

  <target name="generate-vote-text" depends="check-rc-urls, echo-vote-text"
    description="generate the vote text -after validating its links"
    />

  <target name="release-no-publish"
    depends="git-check-unmodified, clean, rat, deploy, tarball-no-package, copy-to-svn, print-nexus-instructions"
    description="Release to Nexus and copy to svn, but do not publish the RC via SVN">
    <echo>Artifacts staged on Nexus repository</echo>
  </target>

  <target name="release"
    depends="release-no-publish, publish-via-svn"
    description="Make the release and publish the artifacts to svn">
    <echo>Source artifacts committed on subversion</echo>
  </target>

  <target name="prepare-vote-results" depends="init, git-version, prepare-release-links">
    <require property="release.jira.page" />
    <require property="vote.result.positive.binding" />
    <require property="vote.result.zero.binding" />
    <require property="vote.result.negative.binding" />
    <property name="vote.result.positive" value="${vote.result.positive.binding}" />
    <property name="vote.result.zero" value="${vote.result.zero.binding}" />
    <property name="vote.result.negative" value="${vote.result.negative.binding}" />
    <property name="vote.result.comment" value="" />
    <condition property="vote.succeeded"
      value="succeeded -an incubator vote will now be started">
      <and>
        <equals arg1="0" arg2="${vote.result.negative.binding}" />
        <not>
          <or>
            <equals arg1="0" arg2="${vote.result.positive.binding}" />
            <equals arg1="1" arg2="${vote.result.positive.binding}" />
            <equals arg1="2" arg2="${vote.result.positive.binding}" />
          </or>
        </not>
      </and>
    </condition>
    <property name="vote.result">
+1 votes: ${vote.result.positive} (${vote.result.positive.binding} binding)
+0 votes: ${vote.result.zero} (${vote.result.zero.binding} binding)
-1 votes: ${vote.result.negative} (${vote.result.negative.binding} binding)
${vote.result.comment}
    </property>
  </target>

  <target name="generate-result-message" depends="prepare-vote-results"
    description="generate the vote for apache incubator">
    <condition property="vote.outcome" value="succeeded -an incubator vote will now be started">
      <isset property="vote.succeeded" />
    </condition>
    <property name="vote.outcome" value="failed" />
    <echo file="${slider.vote.results.file}">

To: ${dev@slider}
Subject: [RESULT] [VOTE] Apache Slider (incubating) release ${rc.name}

Hello,

Here are the results of the vote for releasing
Apache Slider (incubating) release ${rc.name}

${vote.result}

The vote has ${vote.outcome}

    </echo>
    <loadfile property="slider.vote.results.text" srcfile="${slider.vote.results.file}" />
    <echo>
Voting text is in ${slider.vote.results.file}
-------------

${slider.vote.results.text}

-----------

Now send an email to ${dev@slider}
with the subject and body derived from ${slider.vote.results.file}
</echo>
    <fail unless="vote.succeeded"
      message="RC vote failed: clean up and return to coding." />
  </target>

  <target name="generate-incubator-vote" depends="prepare-vote-results, check-rc-urls"
    description="Generate the vote for incubator-general">
    <require property="mail.vote.thread" />
    <require property="mail.vote.result.thread" />
    <get dest="${get.dir}" verbose="true">
      <url url="${mail.vote.thread}" />
      <url url="${mail.vote.result.thread}" />
    </get>
    <echo file="${slider.vote.incubator.file}">
To: ${general},
Subject: [VOTE] Apache Slider (incubating) release ${slider.release.version}

Hello,

This is a call for a vote on the Apache Slider (incubating) release
${slider.release.version}.

This release candidate, ${rc.name} has successfully passed a vote for a release
on the slider developer mailing list.

Vote thread:
http://mail-archives.apache.org/mod_mbox/incubator-slider-dev/201505.mbox/%3CD17220E0.D0AD%25gsaha%40hortonworks.com%3E

Results:
http://mail-archives.apache.org/mod_mbox/incubator-slider-dev/201505.mbox/%3CD177A7D8.D521%25gsaha%40hortonworks.com%3E
${release.core.links}
Please vote on releasing this package as Apache Slider ${slider.release.version}:

This vote will be open for 72 hours.

[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove (and reason why)

    ${asf.user} on behalf of the Apache Slider (incubating) team
</echo>
    <loadfile property="slider.vote.incubator.text" srcfile="${slider.vote.incubator.file}" />
    <echo>
Voting text is in ${slider.vote.incubator.file}
-------------
${slider.vote.incubator.text}
-----------
Now send an email to ${general}
with the subject and body derived from ${slider.vote.incubator.file}
    </echo>
  </target>

  <target name="prepare-incubator-vote-results" depends="init">
    <require property="vote.incubator.result.positive.binding" />
    <require property="vote.incubator.result.zero.binding" />
    <require property="vote.incubator.result.negative.binding" />
    <property name="vote.incubator.result.positive" value="${vote.incubator.result.positive.binding}" />
    <property name="vote.incubator.result.zero" value="${vote.incubator.result.zero.binding}" />
    <property name="vote.incubator.result.negative" value="${vote.incubator.result.negative.binding}" />
    <property name="vote.incubator.result.comment" value="" />
    <condition property="vote.incubator.succeeded"
      value="succeeded -an incubator vote will now be started">
      <and>
        <equals arg1="0" arg2="${vote.incubator.result.negative.binding}" />
        <not>
          <or>
            <equals arg1="0" arg2="${vote.incubator.result.positive.binding}" />
            <equals arg1="1" arg2="${vote.incubator.result.positive.binding}" />
            <equals arg1="2" arg2="${vote.incubator.result.positive.binding}" />
          </or>
        </not>
      </and>
    </condition>
    <property name="vote.incubator.result">
+1 votes: ${vote.incubator.result.positive} (${vote.incubator.result.positive.binding} binding)
+0 votes: ${vote.incubator.result.zero} (${vote.incubator.result.zero.binding} binding)
-1 votes: ${vote.incubator.result.negative} (${vote.incubator.result.negative.binding} binding)
${vote.incubator.result.comment}</property>
  </target>

  <target name="generate-incubator-result-message" depends="prepare-incubator-vote-results"
    description="generate the vote for apache incubator">
    <condition property="vote.incubator.outcome"
      value="succeeded -the release will now be completed">
      <isset property="vote.incubator.succeeded" />
    </condition>
    <property name="vote.incubator.outcome" value="failed" />
    <property name="vote.incubator.results.file" location="target/vote-incubator-results.txt" />
    <echo file="${vote.incubator.results.file}">
To: ${general}, ${dev@slider}
Subject: [RESULT] [VOTE] Apache Slider (incubating) release ${slider.release.version}

Hello,

Here are the results of the vote for releasing
Apache Slider (incubating) release ${rc.name}

${vote.incubator.result}

The vote has ${vote.incubator.outcome}

   ${asf.user} on behalf of the Apache Slider (incubating) team
    </echo>
    <loadfile property="vote.incubator.results.text" srcfile="${vote.incubator.results.file}" />
    <echo>
Voting text is in ${vote.incubator.results.file}
-------------
${vote.incubator.results.text}
-----------

Now send an email to ${general}
with the subject and body derived from ${vote.incubator.results.file}
    </echo>
    <fail unless="vote.incubator.succeeded"
      message="Incubation vote failed: clean up and return to coding."/>
  </target>

  <target name="generate-announcement-message" depends="prepare-vote-results, check-release-urls" >
    <property name="vote.incubator.results.file" location="target/vote-incubator-results.txt" />

    <echo file="${slider.vote.announcement.file}">
To: ${general}, ${dev@slider}
Subject: [ANNOUNCE] Apache Slider (incubating) release ${slider.release.version}


The Apache Slider team is proud to announce Apache Slider incubation release version ${slider.release.version}

Apache Slider (incubating) is a YARN application which deploys existing distributed applications on YARN,
monitors them, and makes them larger or smaller as desired - even while the application is running.

The release artifacts are available at:
http://www.apache.org/dyn/closer.cgi/incubator/slider/${slider.release.version}/

To use the artifacts, please use the following documentation:
http://slider.incubator.apache.org/docs/getting_started.html
${common.links}

We would like to thank all the contributors that made the release possible.

Regards,
  ${asf.user} on behalf of the Apache Slider (incubating) team

-----

DISCLAIMER

Apache Slider is an effort undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects
until a further review indicates that the infrastructure, communications, and decision making
process have stabilized in a manner consistent with other successful ASF projects. While incubation
status is not necessarily a reflection of the completeness or stability of the code, it does indicate
that the project has yet to be fully endorsed by the ASF.
    </echo>
    <loadfile property="slider.vote.announcement.text" srcfile="${slider.vote.announcement.file}" />
    <echo>Voting text is in ${slider.vote.announcement.file}
-------------
${slider.vote.announcement.text}
-----------

Now send an email to ${general}, ${dev@slider}
with the subject and body derived from ${slider.vote.announcement.file}
    </echo>
  </target>
</project>
