add approval script
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/042ed5c6 Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/042ed5c6 Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/042ed5c6 Branch: refs/heads/master Commit: 042ed5c68a2c5fd0f0e9cda5da3594a2faff2111 Parents: 2c5a0f3 Author: Alex Harui <aha...@apache.org> Authored: Fri Jun 27 16:57:53 2014 -0700 Committer: Alex Harui <aha...@apache.org> Committed: Fri Jun 27 16:57:53 2014 -0700 ---------------------------------------------------------------------- ApproveSDK.xml | 417 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 417 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/042ed5c6/ApproveSDK.xml ---------------------------------------------------------------------- diff --git a/ApproveSDK.xml b/ApproveSDK.xml new file mode 100644 index 0000000..9217dac --- /dev/null +++ b/ApproveSDK.xml @@ -0,0 +1,417 @@ +<?xml version="1.0"?> +<!-- + + 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="ApproveApacheSDK" default="main" basedir="."> + + + <!-- Required for OSX 10.6 / Snow Leopard Performance. --> + <!-- Java 7 on Mac requires OSX 10.7.3 or higher and is 64-bit only --> + <!-- local.d32 is set/used in build.properties so this needs to be done first. --> + <condition property="local.d32" value="-d32"> + <and> + <os family="windows"/> + <equals arg1="${sun.arch.data.model}" arg2="64"/> + <equals arg1="${os.arch}" arg2="x86_64"/> + <equals arg1="${ant.java.version}" arg2="1.6"/> + </and> + </condition> + + <condition property="isMac" value="mac"> + <os family="mac" /> + </condition> + <condition property="isWindows" value="windows"> + <os family="windows" /> + </condition> + <condition property="isLinux" value="linux"> + <and> + <os family="unix" /> + <not> + <isset property="isMac" /> + </not> + </and> + </condition> + <condition property="package.suffix" value="zip"> + <os family="windows" /> + </condition> + <property name="package.suffix" value="tar.gz" /> + + <property name="rat.report" value="${basedir}/rat-report.txt"/> + <property name="apache.rat.jar" value="apache-rat-0.8.jar" /> + <property name="apache.rat.tasks.jar" value="apache-rat-tasks-0.8.jar" /> + <property name="apache.rat.url" value="http://people.apache.org/~aharui/rat" /> + + <property file="${basedir}/approvefalcon.properties"/> + + <property name="mac.text.display" value="cat" /> + <property name="win.text.display" value="type" /> + <property name="linux.text.display" value="cat" /> + <property environment="env"/> + + <property name="build.target" value="main" /> + + <available file="${env.APPDATA}/npm/jshint.cmd" + type="file" + property="jshint" value="${env.APPDATA}/npm/jshint.cmd" /> + <property name="jshint" value="jshint" /> + + <available file="${env.ProgramFiles}/Mozilla Firefox/firefox.exe" + type="file" + property="browser" value="${env.ProgramFiles}/Mozilla Firefox/firefox.exe" /> + <available file="${env.ProgramFiles(x86)}/Mozilla Firefox/firefox.exe" + type="file" + property="browser" value="${env.ProgramFiles}/Mozilla Firefox/firefox.exe" /> + + <condition property="do.copy.downloads" > + <isset property="download.cache.dir" /> + </condition> + + <fail message="The ANT_HOME environment variable is not set." + unless="env.ANT_HOME"/> + + <available file="${env.AIR_HOME}" + type="dir" + property="AIR_HOME" value="${env.AIR_HOME}" /> + + <fail message="The AIR_HOME property is not set in environment or command-line." + unless="AIR_HOME"/> + + <available file="${env.PLAYERGLOBAL_HOME}" + type="dir" + property="PLAYERGLOBAL_HOME" value="${env.PLAYERGLOBAL_HOME}" /> + + <fail message="The PLAYERGLOBAL_HOME property is not set in environment or command-line." + unless="PLAYERGLOBAL_HOME"/> + + <available file="${env.FLASHPLAYER_DEBUGGER}" + type="dir" + property="FLASHPLAYER_DEBUGGER" value="${env.FLASHPLAYER_DEBUGGER}" /> + + <available file="${env.FLASHPLAYER_DEBUGGER}" + type="file" + property="FLASHPLAYER_DEBUGGER" value="${env.FLASHPLAYER_DEBUGGER}" /> + + <fail message="The FLASHPLAYER_DEBUGGER property is not set in environment or command-line." + unless="FLASHPLAYER_DEBUGGER"/> + + <available file="${env.ANT_HOME}/lib/${apache.rat.jar}" + type="file" + property="apache.rat.found"/> + <available file="${env.ANT_HOME}/lib/${apache.rat.tasks.jar}" + type="file" + property="apache.rat.tasks.found"/> + + <fail message="The release version is not set. Specify -Drelease.version=<release version (e.g. 3.1, 3.2, etc)>" + unless="release.version"/> + + <fail message="The release candidate number is not set. Specify -Drc=<rc number (e.g. 1, 2, 3, etc)>" + unless="rc"/> + + <property name="package.url.path" value="https://dist.apache.org/repos/dist/dev/flex/sdk/${release.version}/rc${rc}" /> + <property name="package.url.name" value="apache-flex-sdk-${release.version}-src" /> + + <condition property="zip.package"> + <equals arg1="zip" arg2="${package.suffix}" /> + </condition> + + <target name="display-text-mac" if="isMac"> + <echo>========================= Begin ${file} ==============================</echo> + <exec executable="${mac.text.display}" > + <arg value="${file}" /> + </exec> + <echo>========================= End ${file} ==============================</echo> + </target> + <target name="display-text-win" if="isWindows"> + <pathconvert targetos="windows" property="winfile"> + <path path="${file}" /> + </pathconvert> + <echo>========================= Begin ${winfile} ==============================</echo> + <exec executable="cmd.exe" > + <arg value="/c" /> + <arg value="${win.text.display}" /> + <arg value="${winfile}" /> + </exec> + <echo>========================= End ${winfile} ==============================</echo> + </target> + <target name="display-text-linux" if="isLinux"> + <echo>========================= Begin ${file} ==============================</echo> + <exec executable="${linux.text.display}" > + <arg value="${file}" /> + </exec> + <echo>========================= End ${file} ==============================</echo> + </target> + + <target name="install-rat" depends="install-rat.jar,install-rat.tasks.jar" /> + <target name="install-rat.jar" unless="apache.rat.found"> + <get src="${apache.rat.url}/${apache.rat.jar}" dest="${env.ANT_HOME}/lib/${apache.rat.jar}" /> + </target> + <target name="install-rat.tasks.jar" unless="apache.rat.tasks.found"> + <get src="${apache.rat.url}/${apache.rat.tasks.jar}" dest="${env.ANT_HOME}/lib/${apache.rat.tasks.jar}" /> + </target> + + <target name="rat-taskdef" description="Rat taskdef"> + <typedef resource="org/apache/rat/anttasks/antlib.xml" + uri="antlib:org.apache.rat.anttasks" + classpathref="anttask.classpath"/> + </target> + + <target name="main" depends="install-rat,download,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps"> + </target> + + <target name="main-no-download" depends="install-rat,check-sigs,uncompress,rat-check,check-notices,build,approve" description="Perform required release approval steps"> + </target> + + <target name="test" > + <echo>${rat.report}.bin.txt</echo> + <replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/> + </target> + + <target name="display-text" > + <antcall target="display-text-mac" /> + <antcall target="display-text-win" /> + <antcall target="display-text-linux" /> + </target> + + <target name="display-text-test" > + <antcall target="display-text" > + <param name="file" value="${basedir}/rat-report.txt" /> + </antcall> + </target> + + <target name="download" description="download the release package"> + <get src="${package.url.path}/${package.url.name}.${package.suffix}" + dest="${basedir}/${package.url.name}.${package.suffix}" /> + <get src="${package.url.path}/${package.url.name}.${package.suffix}.md5" + dest="${basedir}/${package.url.name}.${package.suffix}.md5" /> + <get src="${package.url.path}/${package.url.name}.${package.suffix}.asc" + dest="${basedir}/${package.url.name}.${package.suffix}.asc" /> + </target> + + <target name="check-sigs" description="check md5 and gpg sigs"> + <replace file="${basedir}/${package.url.name}.${package.suffix}.md5" + token=" " /> + <checksum file="${basedir}/${package.url.name}.${package.suffix}" algorithm="md5" verifyproperty="md5.ok" /> + <condition property="MD5Invalid"> + <not> + <equals arg1="${md5.ok}" arg2="true" /> + </not> + </condition> + <fail message="MD5 checksum did not match" if="MD5Invalid" /> + <exec executable="gpg" failonerror="true"> + <arg value="--verify" /> + <arg value="${basedir}/${package.url.name}.${package.suffix}.asc" /> + <arg value="${basedir}/${package.url.name}.${package.suffix}" /> + </exec> + </target> + + <target name="uncompress" depends="pre-clean, untar-file, unzip-file" /> + + <target name="pre-clean" description="remove old uncompressed package" > + <delete dir="${basedir}/${package.url.name}" failonerror="false" /> + </target> + + <target name="untar-file" unless="zip.package" description="Untars zipFile"> + <untar src="${basedir}/${package.url.name}.${package.suffix}" + dest="${basedir}" compression="gzip"/> + </target> + + <target name="unzip-file" if="zip.package" description="Unzips zipFile"> + <unzip src="${basedir}/${package.url.name}.${package.suffix}" + dest="${basedir}/${package.url.name}"/> + </target> + + <target name="rat-check" > + + <echo message="Checking files at ${basedir}/${package.url.name}, report is ${rat.report}"/> + + <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" + reportFile="${rat.report}"> + <fileset dir="${basedir}/${package.url.name}"> + <!-- Start of binary files --> + <!-- exclude Flash Professional file used for integration with Flash Professional --> + <exclude name="frameworks/projects/flash-integration/FLA/ContentHolder.fla"/> + <!-- exclude font embedded in asdoc example --> + <exclude name="frameworks/projects/framework/asdoc/en_US/mx/effects/examples/assets/OpenSans-Regular.ttf"/> + <!-- exclude media (png, gif, jpg, mp3, flv) --> + <exclude name="**/*.png"/> + <exclude name="**/*.gif"/> + <exclude name="**/*.jpg"/> + <exclude name="**/*.mp3"/> + <exclude name="**/*.flv"/> + <!-- exclude batik icon --> + <exclude name="modules/thirdparty/batik/sources/*.icns"/> + <!-- End of binary files --> + <!-- exclude batik manifests --> + <exclude name="modules/thirdparty/batik/sources/*.mf"/> + <!-- exclude text files --> + <exclude name="CONTRIBUTING"/> + <exclude name="modules/thirdparty/batik/lib/**/LICENSE*.txt"/> + <exclude name="modules/thirdparty/batik/lib/**/README*.txt"/> + <!-- exclude w3c sources --> + <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.mod"/> + <exclude name="modules/thirdparty/batik/resources/org/apache/flex/forks/batik/dom/svg/resources/*.dtd"/> + <exclude name="modules/thirdparty/batik/sources/org/w3c/css/sac/LexicalUnit.java"/> + <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/*.java"/> + <exclude name="modules/thirdparty/batik/sources/org/w3c/flex/forks/css/sac/helpers/ParserFactory.java"/> + <!-- exclude config files --> + <exclude name="modules/thirdparty/batik/svn-revision"/> + <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/javax.xml.parsers.SAXParserFactory"/> + <exclude name="modules/thirdparty/xerces-patch/src/java/META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration"/> + <exclude name="modules/thirdparty/xerces-patch/src/java/org/apache/xerces/jaxp/javax.xml.parsers.SAXParserFactory"/> + </fileset> + </rat:report> + <antcall target="display-text" > + <param name="file" value="${rat.report}" /> + </antcall> + <input + message="Check that there are no unknown or unapproved licenses or archives. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="rat.license.ok"/> + <echo>filtering out AL files to make it easier to see binary files</echo> + <copy file="${rat.report}" tofile="${rat.report}.bin.txt" /> + <replaceregexp file="${rat.report}.bin.txt" match="..AL.*" replace="" byline="true"/> + <antcall target="display-text" > + <param name="file" value="${rat.report}.bin.txt" /> + </antcall> + <input + message="Check that there are no unexpected binaries. Is it ok?" + validargs="y,n" + defaultvalue="n" + addproperty="rat.binaries.ok"/> + </target> + + <target name="check-notices" description="open each notice file for review, grep for a few things" > + <fail message="README not in package"> + <condition> + <not> + <available file="${basedir}/${package.url.name}/README" /> + </not> + </condition> + </fail> + <fail message="RELEASE_NOTES not in package"> + <condition> + <not> + <available file="${basedir}/${package.url.name}/RELEASE_NOTES" /> + </not> + </condition> + </fail> + <fail message="NOTICE not in package"> + <condition> + <not> + <available file="${basedir}/${package.url.name}/NOTICE" /> + </not> + </condition> + </fail> + <fail message="LICENSE not in package"> + <condition> + <not> + <available file="${basedir}/${package.url.name}/LICENSE" /> + </not> + </condition> + </fail> + <antcall target="display-text" > + <param name="file" value="${basedir}/${package.url.name}/README" /> + </antcall> + <input + message="Check the README for version numbers, spelling, grammar, accuracy. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="readme.ok"/> + <antcall target="display-text" > + <param name="file" value="${basedir}/${package.url.name}/RELEASE_NOTES" /> + </antcall> + <input + message="Check the RELEASE_NOTES for copyright years, spelling, grammar, accuracy. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="releasenotes.ok"/> + + + <antcall target="display-text" > + <param name="file" value="${basedir}/${package.url.name}/NOTICE" /> + </antcall> + <input + message="Check the NOTICE for required notices from third-parties. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="notice.ok"/> + + <antcall target="display-text" > + <param name="file" value="${basedir}/${package.url.name}/LICENSE" /> + </antcall> + <input + message="Check the LICENSE for the Apache License and third-party licenses. Is it ok?" + validargs="y,n" + defaultvalue="y" + addproperty="license.ok"/> + </target> + + <target name="build" depends="copy.downloads"> + <input + message="The final step is to run the build and any tests the build script runs. This can take several minutes. Press y to start the build." + validargs="y" + defaultvalue="y" /> + <chmod file="${basedir}/${package.url.name}/bin/compc" perm="ugo+rx"/> + <chmod file="${basedir}/${package.url.name}/bin/mxmlc" perm="ugo+rx"/> + <property name="no.prompt" value="true" /> + <ant dir="${basedir}/${package.url.name}" target="main" /> + <ant dir="${basedir}/${package.url.name}" target="checkintests" /> + </target> + + <target name="copy.downloads" if="${do.copy.downloads}" description="instead of actually downloading all of the dependencies, you can save lots of time by just copying from some other folder in some other SDK."> + <echo>Copying downloads</echo> + <copy todir="${basedir}/${package.url.name}/in" > + <fileset dir="${download.cache.dir}" /> + </copy> + </target> + + <target name="approve" > + <condition property="vote" value="+1"> + <and> + <equals arg1="${rat.license.ok}" arg2="y" /> + <equals arg1="${rat.binaries.ok}" arg2="y" /> + <equals arg1="${readme.ok}" arg2="y" /> + <equals arg1="${releasenotes.ok}" arg2="y" /> + <equals arg1="${notice.ok}" arg2="y" /> + <equals arg1="${license.ok}" arg2="y" /> + </and> + </condition> + <property name="vote" value="-1" /> + <echo> +${vote} +Package ${package.url.path}/${package.url.name}.${package.suffix} +Java ${ant.java.version} +OS: ${os.name} ${os.arch} ${os.version} +Source kit signatures match: y +Source kit builds: y +README is ok: ${readme.ok} +RELEASE_NOTES is ok: ${releasenotes.ok} +NOTICE is ok: ${notice.ok} +LICENSE is ok: ${license.ok} +No unapproved licenses or archives: ${rat.license.ok} +No unapproved binaries: ${rat.binaries.ok} + </echo> + <fail> + <condition> + <equals arg1="-1" arg2="${vote}"/> + </condition> + </fail> + </target> +</project>