Repository: incubator-slider Updated Branches: refs/heads/develop 740367bcf -> 7e86e9f12
SLIDER-1014 copy over the 0.90.2 release.xml file into the develop branch Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/7e86e9f1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/7e86e9f1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/7e86e9f1 Branch: refs/heads/develop Commit: 7e86e9f12bb268233d7174155909c288c40007a7 Parents: 740367b Author: Steve Loughran <ste...@apache.org> Authored: Tue Jan 12 08:39:23 2016 -0800 Committer: Steve Loughran <ste...@apache.org> Committed: Tue Jan 12 08:39:23 2016 -0800 ---------------------------------------------------------------------- bin/release.xml | 941 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 941 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7e86e9f1/bin/release.xml ---------------------------------------------------------------------- diff --git a/bin/release.xml b/bin/release.xml new file mode 100644 index 0000000..714aebb --- /dev/null +++ b/bin/release.xml @@ -0,0 +1,941 @@ +<!-- + 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" /> + <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/release/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&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="gene...@incubator.apache.org" /> + <property name="dev@slider" value="d...@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&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&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>