| <!-- |
| 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/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="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&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> |