<!--/******************************************************************************* | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Ant naming conventions: | |
* - regardless of the actual OS platform,'/' is the directory separator | |
* (Ant will convert as appropriate). | |
* - multi-word properties use periods '.' | |
* - multi-word targets use hyphens '-' | |
* - multi-word macros use underscores '_' | |
* - multi-word macro attributes are concatinated | |
* e.g. 'runpathref' | |
* - multi-word tasks (taskdef) names are concatinated | |
* e.g. 'validateconnection' | |
* - OS environment variables are in ALLCAPS and have 'env' as a prefix | |
* e.g. ${env.XXX}. | |
* - Ant properties are lower case. | |
* | |
* Contributors: | |
* eric.gwin - initial API and implementation (checked in by tware) | |
#******************************************************************************/--> | |
<project name="EclipseLink Bootstrap Automated Builds" basedir="." default="nightly"> | |
<!-- THIS FILE NEEDS TO BE KEPT MINIMAL --> | |
<!-- ONLY project specific info should be defined here --> | |
<!-- Anything that may change on a future branch should be defined in the --> | |
<!-- Branch specific Autobuild.xml --> | |
<echo message="---- Bootstrap ----"/> | |
<target name="init"> | |
<condition property="_Win" value="true"> | |
<or> | |
<equals arg1="${os.name}" arg2="Windows XP"/> | |
<equals arg1="${os.name}" arg2="Windows NT"/> | |
</or> | |
</condition> | |
<property name="build.compiler" value="javac1.5"/> | |
<tstamp> | |
<format property="build.date" pattern="yyyyMMdd"/> | |
<format property="build.time" pattern="HHmm"/> | |
</tstamp> | |
<property environment="env"/> | |
<!-- This needs to be here because if not set we need to check OS --> | |
<!-- and define appropriate default locations for svn --> | |
<property name="svn.exec" value="${env.SVN_EXEC}"/> | |
<echo message="ANT_ARGS='${env.ANT_ARGS}'"/> | |
<echo message="ANT_OPTS='${env.ANT_OPTS}'"/> | |
<echo message=" "/> | |
<echo message="build.date.build.time='${build.date}.${build.time}'"/> | |
<echo message="java.version = '${java.version}'"/> | |
<echo message="os.name = '${os.name}'"/> | |
<echo message="os.arch = '${os.arch}'"/> | |
<echo message="os.version = '${os.version}'"/> | |
<echo message=" "/> | |
<echo message="ant.file = '${ant.file}'"/> | |
<echo message="ant.version = '${ant.version}'"/> | |
<echo message="ant.project.name= '${ant.project.name}'"/> | |
<echo message="ant.java.version= '${ant.java.version}'"/> | |
<echo message="ant.home = '${ant.home}'"/> | |
<echo message=" "/> | |
<echo message="basedir = '${basedir}'"/> | |
</target> | |
<!-- Set svn.exec to os appropriate value --> | |
<!-- (fallback in case env.SVN_EXEC not set) --> | |
<target name="init-linux" unless="_Win" depends="init"> | |
<property name="svn.exec" value="/usr/local/bin/svn"/> | |
</target> | |
<target name="init-win" if="_Win" depends="init-linux"> | |
<property name="svn.exec" value="svn"/> | |
</target> | |
<!-- Setup properties needed if testing using a local repos on RedHat --> | |
<!-- (-D_RHB=1 defined on command-line) --> | |
<target name="init-test" if="_LocalRepos" depends="init"> | |
<property name="svn.rw.protocol" value="file:"/> | |
<property name="svn.base.urlpath" value="///var/svn/repos/eclipselink"/> | |
</target> | |
<!-- Setup properties needed if testing using a local repos on RedHat --> | |
<!-- (-D_RHB=1 defined on command-line) --> | |
<target name="init-test2" if="_RHB" depends="init-test"> | |
<property name="svn.rw.protocol" value="http:"/> | |
</target> | |
<target name="properties-init" depends="init-win,init-test2"> | |
<echo message="svn.exec ='${svn.exec}'"/> | |
<!-- # Build environment definitions --> | |
<!-- # build.root.dir is the directory the branch's build --> | |
<!-- # files are in --> | |
<!-- # branch.name will always be specified on command-line --> | |
<!-- # if used --> | |
<!-- # junit.lib and junit.dir are only specified here because they --> | |
<!-- # need to be defined in ANT the same as in the CLASSPATH --> | |
<!-- # that ANT is invoked with. (the junit used at runtime --> | |
<!-- # must be defined in the classpath ANT is invoked with) --> | |
<property name="branch.name" value=""/> | |
<property name="build.root.dir" value="${env.BRANCH_PATH}"/> | |
<property name="build.deps.dir" value="${env.BLD_DEPS_DIR}"/> | |
<property name="log.dir" value="${env.LOG_DIR}"/> | |
<property name="junit.dir" value="${env.JUNIT_HOME}"/> | |
<property name="junit.lib" value="${junit.dir}/junit.jar"/> | |
<property name="branch.dir" value="${branch.name}trunk"/> | |
<property name="autobld.file" value="autobuild.xml"/> | |
<!-- # Subversion definitions (URLs, protocols & control files) --> | |
<!-- # --> | |
<!-- # svn.exec is set by init and depends upon the OS --> | |
<property name="svn.ro.protocol" value="http:"/> | |
<property name="svn.protocol" value="svn:"/> | |
<property name="svn.rw.protocol" value="svn+ssh:"/> | |
<property name="svn.base.urlpath" value="//dev.eclipse.org/svnroot/rt/org.eclipse.persistence"/> | |
<property name="svn.base.url" value="${svn.rw.protocol}${svn.base.urlpath}"/> | |
<property name="svn.branch.url" value="${svn.base.url}/${branch.dir}"/> | |
<property name="svn.build.url" value="${svn.branch.url}/buildsystem"/> | |
<property name="current.svnrev.file" value="${log.dir}/.current_svn_rev_${env.BRANCH_NM}"/> | |
<property name="latest.svnrev.file" value="${log.dir}/.latest_svn_rev_${env.BRANCH_NM}"/> | |
<echo message="env.HOME_DIR = '${env.HOME_DIR}'"/> | |
<echo message="env.JAVA_HOME = '${env.JAVA_HOME}'"/> | |
<echo message="env.JUNIT_HOME = '${env.JUNIT_HOME}'"/> | |
<echo message="env.MAVENANT_DIR= '${env.MAVENANT_DIR}'"/> | |
<echo message="env.PATH = '${env.PATH}'"/> | |
<echo message="env.CLASSPATH = '${env.CLASSPATH}'"/> | |
<echo message="env.SVN_EXEC = '${env.SVN_EXEC}'"/> | |
<echo message="env.TARGET = '${env.TARGET}'"/> | |
<echo message=""/> | |
<echo message="branch.name = '${branch.name}'"/> | |
<echo message="build.root.dir = '${build.root.dir}'"/> | |
<echo message="build.deps.dir = '${build.deps.dir}'"/> | |
<echo message="log.dir = '${log.dir}'"/> | |
<echo message="junit.dir = '${junit.dir}'"/> | |
<echo message="junit.lib = '${junit.lib}'"/> | |
<echo message="branch.dir = '${branch.dir}'"/> | |
<echo message="autobld.file = '${autobld.file}'"/> | |
<echo message=""/> | |
<echo message="env.CLASSPATH = '${env.CLASSPATH}'"/> | |
<echo message=""/> | |
<echo message="svn.ro.protocol = '${svn.ro.protocol}'"/> | |
<echo message="svn.protocol = '${svn.protocol}'"/> | |
<echo message="svn.rw.protocol = '${svn.rw.protocol}'"/> | |
<echo message="svn.base.urlpath= '${svn.base.urlpath}'"/> | |
<echo message="svn.base.url = '${svn.base.url}'"/> | |
<echo message="svn.branch.url = '${svn.branch.url}'"/> | |
<echo message="svn.build.url = '${svn.build.url}'"/> | |
<echo message="current.svnrev.file= '${current.svnrev.file}'"/> | |
<echo message="latest.svnrev.file = '${latest.svnrev.file}'"/> | |
</target> | |
<!-- Used for Build testing: Set if "target" in .sh appended by ".test" --> | |
<target name="no-get-src" if="_DoNotUpdate" depends="properties-init"> | |
<echo message="Update of local source Skipped."/> | |
</target> | |
<target name="get-src" unless="_DoNotUpdate" depends="no-get-src"> | |
<echo message="** Begin of Source Retrieval **"/> | |
<echo message="** From: ${svn.branch.url}"/> | |
<echo message="** Root: ${build.root.dir}"/> | |
<mkdir dir="${build.root.dir}"/> | |
<!-- the following arg makes the source retrieval "quiet". We really --> | |
<!-- should log the files that were updated, so commenting out. --> | |
<!-- <arg value="-q"/> --> | |
<exec executable="${svn.exec}" dir="${build.root.dir}/.." failonerror="true" logError="true" > | |
<arg value="co"/> | |
<arg value="${svn.branch.url}"/> | |
</exec> | |
<chmod file="${build.root.dir}/buildsystem/*.sh" perm="ug+x"/> | |
<echo message="** End of Source Retrieval **"/> | |
</target> | |
<target name="build" depends="get-src" description="Trigger an automated build without testing or publish"> | |
<echo message="'build' target: Calling 'build-no-publish' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="${autobld.file}" dir="${build.root.dir}" target="build-no-publish"/> | |
<!-- Untested: Possible way to call ant and specify a different logger. | |
<java | |
classname="org.apache.tools.ant.launch.Launcher" | |
fork="true" | |
maxmemory="128m" | |
failonerror="true" | |
dir="${build.root.dir}" | |
timeout="4000000" | |
taskname="startAnt" | |
> | |
<classpath> | |
<pathelement location="${ant.home}/lib/ant-launcher.jar"/> | |
</classpath> | |
<arg value="-buildfile"/> | |
<arg file="${autobld.file}"/> | |
<arg value="-logger"/> | |
<arg value="org.apache.tools.ant.listener.MailLogger"/> | |
<arg value="-DMailLogger.properties.file=${build.root.dir}/buildsystem/maillogger.properties"/> | |
<arg value="-Dbranch.name=${branch.name}"/> | |
<arg value="-Dbasedir=${build.root.dir}"/> | |
<arg value="build-no-publish"/> | |
</java --> | |
</target> | |
<target name="milestone" depends="get-src" description="Trigger the nightly automated build and lrg tests"> | |
<echo message="'milestone' target: Calling 'build-milestone' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="${autobld.file}" dir="${build.root.dir}" target="build-milestone"/> | |
</target> | |
<target name="nightly" depends="get-src" description="Trigger the nightly automated build and lrg tests"> | |
<echo message="'nightly' target: Calling 'build-nightly' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="${autobld.file}" dir="${build.root.dir}" target="build-nightly"/> | |
</target> | |
<target name="cb" if="_DoBuild" depends="no-cb" description="Trigger an automated 'continuous build' (compile and run short verify)"> | |
<echo message="** Begin of Antcall to 'get-src' **"/> | |
<antcall target="get-src"/> | |
<echo message="** End of Antcall to 'get-src' **"/> | |
<!-- Don't move current to latest until source sucessfully retrieved --> | |
<move file="${current.svnrev.file}" tofile="${latest.svnrev.file}"/> | |
<echo message="'cb' target: Calling 'build-continuous' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="${autobld.file}" dir="${build.root.dir}" target="build-continuous"/> | |
</target> | |
<!-- ============================================================================= --> | |
<!-- Continuous build Order --> | |
<!-- properties-init = sets up various properties --> | |
<!-- query-svn-changed = calls 'get-svn-headrev' --> | |
<!-- sets '_DoBuild' if any condition exists where --> | |
<!-- the revision files don't match --> | |
<!-- get-svn-headrev = creates a file that contains current head rev info --> | |
<!-- no-cb = if head rev unchanged, prints 'no build' message --> | |
<!-- otherwise does nothing --> | |
<!-- cb = if head rev changed, updates latest head rev file --> | |
<!-- calls 'get-src' which updates the source tree --> | |
<!-- calls the continuous build target --> | |
<!-- otherwise does nothing --> | |
<!-- ============================================================================= --> | |
<target name="no-cb" unless="_DoBuild" depends="query-svn-changed"> | |
<echo message="----------------------------------"/> | |
<echo message=" ${build.date}.${build.time} build unnecessary"/> | |
<echo message=" "/> | |
</target> | |
<target name="query-svn-changed" depends="get-svn-headrev"> | |
<condition property="_DoBuild" value="true"> | |
<not> | |
<filesmatch file1="${current.svnrev.file}" file2="${latest.svnrev.file}"/> | |
</not> | |
</condition> | |
</target> | |
<target name="get-svn-headrev" depends="properties-init"> | |
<exec executable="${svn.exec}" failonerror="true" logError="true" output="${current.svnrev.file}"> | |
<arg value="info"/> | |
<arg value="--revision"/> | |
<arg value="HEAD"/> | |
<arg value="${svn.branch.url}"/> | |
</exec> | |
<exec executable="grep" failonerror="true" logError="true" input="${current.svnrev.file}" output="${current.svnrev.file}"> | |
<arg value="Last"/> | |
</exec> | |
</target> | |
<target name="publish-all" depends="properties-init" description="Manually trigger all publish targets"> | |
<echo message="'publish' target: Calling 'build-nightly' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="${autobld.file}" dir="${build.root.dir}" target="publish-all"/> | |
</target> | |
<target name="publish-build" depends="properties-init" description="Manually trigger Build publish target"> | |
<echo message="'publish' target: Calling 'build-nightly' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="${autobld.file}" dir="${build.root.dir}" target="publish-build"/> | |
</target> | |
<target name="publish-maven" depends="properties-init" description="Manually trigger just Maven publish"> | |
<echo message="'publish-maven' target: Calling 'publish-maven' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="autobuild.xml" dir="${build.root.dir}" target="publish-maven"/> | |
</target> | |
<target name="publish-web" depends="properties-init" description="Manually trigger webpublish target"> | |
<echo message="'publish' target: Calling 'build-nightly' target in '${build.root.dir}/${autobld.file}'"/> | |
<ant antfile="${autobld.file}" dir="${build.root.dir}" target="publish-results"/> | |
</target> | |
</project> |