blob: 99e8dbe27649dff0a7a883b1a1b4d55a678117f4 [file] [log] [blame]
<?xml version="1.0"?>
<!--
Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html
Contributors:
Eike Stepper - initial API and implementation
-->
<project name="CDO">
<property file="build.properties" />
<property environment="hudson" />
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="/develop/bin/ant-contrib/ant-contrib-1.0b3.jar" />
<pathelement location="${ant.contrib}" />
</classpath>
</taskdef>
<macrodef name="eclipse.launch">
<attribute name="app" />
<element name="properties" optional="true" />
<element name="args" optional="true" />
<sequential>
<property name="@{app}.deploy.dir" value="${tools}/@{app}" />
<pathconvert property="@{app}.launcher">
<first count="1">
<sort>
<fileset dir="${@{app}.deploy.dir}/plugins" includes="**/org.eclipse.equinox.launcher_*.jar" />
<reverse xmlns="antlib:org.apache.tools.ant.types.resources.comparators">
<date />
</reverse>
</sort>
</first>
</pathconvert>
<java fork="true" jar="${@{app}.launcher}" dir="${@{app}.deploy.dir}" failonerror="true">
<env key="no_proxy" value="${no.proxy}" />
<properties />
<args />
</java>
</sequential>
</macrodef>
<macrodef name="buckminster">
<attribute name="command" />
<attribute name="workspace" default="${ws}" />
<element name="sysproperties" optional="true" />
<element name="globargs" optional="true" />
<element name="cmdargs" optional="true" />
<sequential>
<eclipse.launch app="buckminster">
<properties>
<sysproperty key="bugfix.288796" value="true" />
<sysproperties />
</properties>
<args>
<jvmarg value="-Xmx4096m" />
<jvmarg value="-Dsite.pack200=${site.signing}" />
<jvmarg value="-Declipse.p2.mirrors=false" />
<jvmarg value="-Declipse.p2.unsignedPolicy=allow" />
<jvmarg value="-Dgit.clone=${git.clone}" />
<arg value="-data" />
<arg value="@{workspace}" />
<arg value="--loglevel" />
<arg value="${hudson.LOGLEVEL}" />
<arg value="--displaystacktrace" />
<globargs />
<arg value="@{command}" />
<arg value="-P" />
<arg value="${properties.tmp}" />
<cmdargs />
</args>
</eclipse.launch>
</sequential>
</macrodef>
<macrodef name="generate.product">
<attribute name="id" />
<attribute name="profile" />
<attribute name="platform" />
<attribute name="os" />
<attribute name="ws" />
<attribute name="arch" />
<attribute name="priority" />
<sequential>
<if>
<or>
<not>
<isset property="platform" />
</not>
<equals arg1="${platform}" arg2="@{platform}" />
</or>
<then>
<echo message="" />
<echo message="Generating @{profile} for @{platform}" />
<mkdir dir="${temp.products}/@{profile}-@{platform}" />
<eclipse.launch app="director">
<properties>
<sysproperty key="eclipse.p2.mirrors" value="false" />
</properties>
<args>
<arg value="-r" />
<arg value="file:${hudson.WORKSPACE}" />
<arg value="-r" />
<arg value="${train.releases}" />
<arg value="-r" />
<arg value="${eclipse.updates}" />
<arg value="-r" />
<arg value="${eclipse.milestones}" />
<arg value="-d" />
<arg value="${temp.products}/@{profile}-@{platform}" />
<arg value="-p" />
<arg value="@{profile}" />
<arg value="-i" />
<arg value="@{id}" />
<arg value="-p2.os" />
<arg value="@{os}" />
<arg value="-p2.ws" />
<arg value="@{ws}" />
<arg value="-p2.arch" />
<arg value="@{arch}" />
</args>
</eclipse.launch>
<delete includeemptydirs="true" quiet="true">
<fileset dir="${temp.products}/@{profile}-@{platform}">
<include name="p2/**" />
<include name="launcher.exe" />
<include name="eclipsec.exe" />
</fileset>
</delete>
<copy todir="${temp.products}/@{profile}-@{platform}" failonerror="true">
<fileset dir="${git.clone}/features/org.eclipse.emf.cdo.license-feature/rootfiles">
<include name="epl-v10.html" />
<include name="notice.html" />
</fileset>
</copy>
<zip destfile="${zips}/emf-cdo-${build.qualifier}-@{profile}-@{platform}.zip">
<fileset dir="${temp.products}/@{profile}-@{platform}">
<include name="**" />
</fileset>
</zip>
<echo message="description=for execution on @{platform}.${line.separator}priority=@{priority}"
file="${zips}/emf-cdo-${build.qualifier}-@{profile}-@{platform}.properties" />
</then>
</if>
</sequential>
</macrodef>
<!-- =============== -->
<!-- Init Properties -->
<!-- =============== -->
<target name="-init.properties">
<echo message="stream = ${stream}" />
<echo message="branch = ${branch}" />
<echo message="train = ${train}" />
<condition property="no.proxy" value="${hudson.no_proxy}, dev.eclipse.org" else="dev.eclipse.org">
<isset property="hudson.no_proxy" />
</condition>
<property name="git.clone" location="${hudson.WORKSPACE}/git" />
<property name="releng" location="${git.clone}/plugins/org.eclipse.emf.cdo.releng" />
<property name="test.report" location="${hudson.WORKSPACE}/test-report.xml" />
<property name="tools" location="${hudson.WORKSPACE}/tools" />
<property name="result" location="${hudson.WORKSPACE}/result" />
<property name="zips" location="${hudson.WORKSPACE}/zips" />
<property name="ws" location="${result}/ws" />
<property name="tp" location="${result}/tp" />
<property name="buckminster.output.root" location="${result}/output" />
<property name="buckminster.temp.root" location="${result}/temp" />
<property name="temp.dropins" location="${buckminster.temp.root}/_dropins" />
<property name="temp.products" location="${buckminster.temp.root}/_products" />
</target>
<!-- ========== -->
<!-- Init Clean -->
<!-- ========== -->
<target name="-init.clean" depends="-init.properties">
<delete includeemptydirs="true" failonerror="true" quiet="true">
<fileset dir="${hudson.WORKSPACE}">
<include name="binary/**" />
<include name="features/**" />
<include name="plugins/**" />
<include name="zips/**" />
<include name="help/**" />
<include name="*.jar" />
<include name="*.xml" />
<include name="*.html" />
</fileset>
</delete>
<delete dir="${buckminster.output.root}" includeemptydirs="true" failonerror="true" quiet="true" />
<delete dir="${buckminster.temp.root}" includeemptydirs="true" failonerror="true" quiet="true" />
<mkdir dir="${result}" />
</target>
<!-- ========== -->
<!-- Init Tools -->
<!-- ========== -->
<target name="-init.tools" depends="-init.clean">
<if>
<equals arg1="${hudson.CLEAN_TOOLS}" arg2="true" />
<then>
<echo message="Cleaning tools" />
<delete dir="${tools}/director" includeemptydirs="true" failonerror="true" quiet="true" />
<delete dir="${tools}/buckminster" includeemptydirs="true" failonerror="true" quiet="true" />
</then>
</if>
<if>
<not>
<available file="${tools}/director/director" />
</not>
<then>
<echo message="" />
<echo message="Installing director" />
<tempfile destdir="${java.io.tmpdir}"
prefix="director-"
suffix=".zip"
property="director.zip"
deleteonexit="true" />
<get src="${director}" dest="${director.zip}" />
<mkdir dir="${tools}" />
<unzip src="${director.zip}" dest="${tools}" />
<delete file="${director.zip}" />
</then>
</if>
<if>
<not>
<available file="${tools}/buckminster/buckminster" />
</not>
<then>
<echo message="" />
<echo message="Installing buckminster" />
<eclipse.launch app="director">
<properties>
<sysproperty key="eclipse.p2.mirrors" value="false" />
</properties>
<args>
<arg value="-r" />
<arg value="${buckminster.headless}" />
<arg value="-r" />
<arg value="http://download.eclipse.org/eclipse/updates/3.8" />
<arg value="-r" />
<arg value="http://download.eclipse.org/modeling/emf/cdo/updates/integration" />
<arg value="-d" />
<arg value="${tools}/buckminster" />
<arg value="-p" />
<arg value="Buckminster" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.cmdline.product" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.core.headless.feature.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.pde.headless.feature.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.buckminster.git.headless.feature.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.ant.launching" />
<arg value="-i" />
<arg value="org.eclipse.emf.cdo.releng.version.headless.feature.group" />
<arg value="-i" />
<arg value="org.eclipse.emf.cdo.releng.apireports.feature.group" />
</args>
</eclipse.launch>
<!-- See http://wiki.eclipse.org/Hudson#Configuring_a_proxy_for_the_p2_director -->
<copy file="${releng}/hudson/org.eclipse.core.net.prefs"
todir="${tools}/buckminster/configuration/.settings"
overwrite="true" />
</then>
</if>
</target>
<!-- ================ -->
<!-- Init Build Infos -->
<!-- ================ -->
<target name="-init.buildinfos" depends="-init.clean">
<if>
<not>
<isset property="build.trigger" />
</not>
<then>
<xmlproperty keeproot="false">
<url url="${hudson.BUILD_URL}/api/xml?tree=actions[causes[shortDescription]]" />
</xmlproperty>
<loadresource property="build.trigger">
<propertyresource name="action.cause.shortDescription" />
<filterchain>
<replaceregex pattern="^Started by " replace="" />
<replaceregex pattern="^Gestartet durch " replace="" />
<replaceregex pattern="Benutzer" replace="user" />
</filterchain>
</loadresource>
</then>
</if>
<echo message="build.trigger = ${build.trigger}" />
<if>
<equals arg1="${hudson.BUILD_TYPE}" arg2="&lt;default&gt;" />
<then>
<condition property="build.type" value="${weekly}" else="N">
<equals arg1="${build.trigger}" arg2="timer" />
</condition>
</then>
<else>
<property name="build.type" value="${hudson.BUILD_TYPE}" />
</else>
</if>
<echo message="build.type = ${build.type}" />
<property name="build.timestamp" value="${hudson.BUILD_ID}" />
<echo message="build.timestamp = ${build.timestamp}" />
<tempfile property="build.qualifier.tmp"
destdir="${java.io.tmpdir}"
prefix="build-qualifier-"
suffix=".tmp"
deleteonexit="true" />
<echo message="build.qualifier=${build.type}${build.timestamp}" file="${build.qualifier.tmp}" />
<replaceregexp file="${build.qualifier.tmp}">
<regexp pattern="([0-9]*)-([0-9]*)-([0-9]*)_([0-9]*)-([0-9]*)-([0-9]*)" />
<substitution expression="\1\2\3-\4\5" />
</replaceregexp >
<property file="${build.qualifier.tmp}" />
<echo message="build.qualifier = ${build.qualifier}" />
<echoxml file="${hudson.WORKSPACE}/build-info.xml">
<build stream="${stream}"
branch="${branch}"
train="${train}"
eclipse="${eclipse}"
emf="${emf}"
type="${build.type}"
timestamp="${build.timestamp}"
qualifier="${build.qualifier}"
trigger="${build.trigger}"
hudson="${hudson.HUDSON_URL}"
revision="${hudson.GIT_COMMIT}"
job="${hudson.JOB_NAME}"
number="${hudson.BUILD_NUMBER}" />
</echoxml>
<condition property="site.signing" value="true" else="false">
<and>
<not>
<equals arg1="${build.type}" arg2="N" />
</not>
<equals arg1="${hudson.HUDSON_URL}" arg2="https://hudson.eclipse.org/hudson/" />
</and>
</condition>
<echo message="site.signing = ${site.signing}" />
<if>
<equals arg1="${site.signing}" arg2="true" />
<then>
<property name="eclipse.staging.area"
value="/shared/download-staging.priv/modeling/emf/cdo/${hudson.JOB_NAME}" />
<echo message="eclipse.staging.area = ${eclipse.staging.area}" />
</then>
</if>
<echo message="" />
<property name="properties.tmp" value="${result}${file.separator}buckminster.properties" />
<echoproperties destfile="${properties.tmp}">
<propertyset negate="true">
<propertyref name="basedir" />
<propertyref name="eclipse.home" />
<propertyref name="properties.tmp" />
<propertyref name="line.separator" />
<propertyref name="path.separator" />
<propertyref prefix="ant." />
<propertyref prefix="file." />
<propertyref prefix="java." />
<propertyref prefix="sun." />
<propertyref prefix="user." />
</propertyset>
</echoproperties>
<echo message="${hudson.JOB_URL}ws/result/buckminster.properties" />
<echoproperties destfile="${result}/all.properties" />
<echo message="${hudson.JOB_URL}ws/result/all.properties" />
</target>
<!-- ============== -->
<!-- Init Workspace -->
<!-- ============== -->
<target name="-init.workspace" depends="-init.clean">
<echo message="Initializing workspace" />
<if>
<equals arg1="${hudson.CLEAN_TP}" arg2="true" />
<then>
<delete dir="${tp}" includeemptydirs="true" failonerror="true" quiet="true" />
</then>
</if>
<delete dir="${ws}" includeemptydirs="true" failonerror="true" quiet="true" />
<unzip dest="${ws}" src="${releng}/hudson/workspace.zip" />
<copy file="${releng}/hudson/test-report-empty.xml" tofile="${test.report}" />
</target>
<!-- ========= -->
<!-- Provision -->
<!-- ========= -->
<target name="provision"
depends="-init.tools,-init.buildinfos,-init.workspace"
description="Imports projects and binaries and set up API baseline">
<echo message="Importing projects into ${ws}" />
<echo message="Importing binaries into ${tp}" />
<mkdir dir="${tp}" />
<buckminster command="setpref">
<cmdargs>
<arg value="maxParallelResolutions=1" />
</cmdargs>
</buckminster>
<buckminster command="import">
<cmdargs>
<arg value="-B" />
<arg value="${hudson.WORKSPACE}/bom.xml" />
<arg value="-P" />
<arg value="${basedir}/build.properties" />
<!-- Last argument: -->
<arg value="${basedir}/build.mspec" />
</cmdargs>
</buckminster>
<echo message="" />
<echo message="Setting API baseline to /opt/public/modeling/emf/cdo/api_baseline" />
<buckminster command="addbaseline">
<cmdargs>
<arg value="-A" />
<arg value="CDO Baseline" />
</cmdargs>
</buckminster>
</target>
<!-- ===== -->
<!-- Build -->
<!-- ===== -->
<target name="build" depends="provision" description="Builds all projects and generates build-infos.xml">
<echo message="Building all projects in workspace ${ws}" />
<buckminster command="build">
<cmdargs>
<arg value="--thorough" />
</cmdargs>
</buckminster>
<delete failonerror="false" includeemptydirs="true">
<fileset dir="${git.clone}/plugins">
<exclude name="org.eclipse.emf.cdo.releng.doc/**" />
<include name="*.doc/bin/**" />
<include name="*.help/bin/**" />
</fileset>
</delete>
</target>
<!-- ======= -->
<!-- Site.p2 -->
<!-- ======= -->
<target name="site.p2" depends="build" description="Generates the site and depending artifacts">
<echo message="Performing org.eclipse.emf.cdo.site#site.p2" />
<buckminster command="perform">
<cmdargs>
<arg value="org.eclipse.emf.cdo.site#site.p2" />
</cmdargs>
</buckminster>
<pathconvert property="site.p2.dir">
<dirset dir="${buckminster.output.root}">
<filename name="org.eclipse.emf.cdo.site_*-eclipse.feature/site.p2" />
</dirset>
</pathconvert>
<echoproperties destfile="${result}/all.properties" />
<copy todir="${hudson.WORKSPACE}"
overwrite="true"
includeemptydirs="true"
preservelastmodified="true"
failonerror="true">
<fileset dir="${site.p2.dir}">
<include name="**" />
</fileset>
</copy>
<antcall target="-generate.all" />
</target>
<!-- ==== -->
<!-- Test -->
<!-- ==== -->
<target name="test" depends="site.p2" description="Runs the tests">
<echo message="Running JUnit tests" />
<buckminster command="junit">
<cmdargs>
<arg value="-l" />
<arg value="org.eclipse.emf.cdo.tests.db/CDO AllTests (H2 ALL).launch" />
<arg value="-o" />
<arg value="${test.report}" />
<arg value="--terseXML" />
<arg value="--flatXML" />
</cmdargs>
</buckminster>
</target>
<!-- ============= -->
<!-- Generate Only -->
<!-- ============= -->
<target name="generate.only" depends="-init.properties" description="Runs the post-site.p2 generators">
<echo message="Loading build-info.xml" />
<xmlproperty file="${hudson.WORKSPACE}/build-info.xml" collapseAttributes="true" />
<antcall target="-generate.all" />
</target>
<!-- ============ -->
<!-- Generate All -->
<!-- ============ -->
<target name="-generate.all">
<mkdir dir="${zips}" />
<antcall target="-generate.help" />
<antcall target="-generate.index" />
<antcall target="-generate.bookmarks" />
<antcall target="-generate.dropins" />
<!-- Must come after generate.dropins -->
<antcall target="-generate.api" />
<if>
<equals arg1="${hudson.GENERATE_PRODUCTS}" arg2="true" />
<then>
<antcall target="-generate.products" />
</then>
</if>
</target>
<!-- ============== -->
<!-- Generate Help -->
<!-- ============== -->
<target name="-generate.help">
<copy todir="${hudson.WORKSPACE}">
<fileset dir="${releng}">
<include name="help/**" />
</fileset>
</copy>
</target>
<!-- ============== -->
<!-- Generate Index -->
<!-- ============== -->
<target name="-generate.index">
<unzip src="${hudson.WORKSPACE}/content.jar" dest="${hudson.WORKSPACE}" />
<property name="content.xml" location="${hudson.WORKSPACE}/content.xml" />
<xslt style="xsl/content2html.xsl" in="${content.xml}" out="${hudson.WORKSPACE}/index.html" />
<xslt style="xsl/content2xml.xsl" in="${content.xml}" out="${hudson.WORKSPACE}/index.xml" />
<delete file="${content.xml}" />
</target>
<!-- =================== -->
<!-- Generate Booksmarks -->
<!-- =================== -->
<target name="-generate.bookmarks">
<property name="bookmarks.tmp" location="${hudson.WORKSPACE}/bookmarks.tmp" />
<xslt style="xsl/bom2bookmarks.xsl" in="${hudson.WORKSPACE}/bom.xml" out="${bookmarks.tmp}" />
<replace file="${bookmarks.tmp}" token="http://dev.eclipse.org" value="file://to-be-removed" />
<replace file="${bookmarks.tmp}" token="file:/home/data/httpd/" value="http://" />
<property name="bookmarks.xml" location="${hudson.WORKSPACE}/bookmarks.xml" />
<concat destfile="${bookmarks.xml}">
<header filtering="false">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;bookmarks&gt;
</header>
<union>
<sort>
<tokens>
<file file="${bookmarks.tmp}" />
<linetokenizer includedelims="true" />
</tokens>
</sort>
</union>
<filterchain>
<linecontains>
<contains value="http://" />
</linecontains>
</filterchain>
<footer filtering="false">&lt;/bookmarks&gt;
</footer>
</concat>
<delete file="${bookmarks.tmp}" />
</target>
<!-- ================ -->
<!-- Generate Dropins -->
<!-- ================ -->
<target name="-generate.dropins">
<delete failonerror="false" includeemptydirs="true" quiet="true">
<fileset dir="${temp.dropins}" defaultexcludes="false">
<include name="**/*" />
</fileset>
</delete>
<mkdir dir="${temp.dropins}" />
<copy todir="${temp.dropins}" failonerror="true">
<fileset dir="${git.clone}/features/org.eclipse.emf.cdo.license-feature/rootfiles">
<include name="epl-v10.html" />
<include name="notice.html" />
</fileset>
</copy>
<copy todir="${temp.dropins}/features" flatten="true">
<fileset dir="${buckminster.output.root}">
<include name="*-eclipse.feature/jar/*" />
<include name="*-eclipse.feature/source.jar/*" />
<exclude name="org.eclipse.emf.cdo.site*/**/*" />
<exclude name="org.eclipse.emf.cdo.epp*/**/*" />
<exclude name="org.eclipse.emf.cdo.license*/**/*" />
</fileset>
</copy>
<copy todir="${temp.dropins}/plugins" flatten="true">
<fileset dir="${buckminster.output.root}">
<include name="*-osgi.bundle/jar/*" />
<include name="*-osgi.bundle/source.jar/*" />
</fileset>
</copy>
<zip destfile="${zips}/emf-cdo-${build.qualifier}-Dropins.zip">
<fileset dir="${temp.dropins}">
<include name="**/*" />
</fileset>
</zip>
<echo message=" for use with a &lt;a href=&quot;http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/p2_dropins_format.html&quot;&gt;dropins&lt;/a&gt; folder."
file="${zips}/emf-cdo-${build.qualifier}-Dropins.properties" />
</target>
<!-- ============ -->
<!-- Generate API -->
<!-- ============ -->
<target name="-generate.api">
<echo message="Generating API reports" />
<buckminster command="perform">
<cmdargs>
<arg value="-D" />
<arg value="api.report=${hudson.WORKSPACE}/api.xml" />
<arg value="org.eclipse.emf.cdo.releng#generate.api.reports" />
</cmdargs>
</buckminster>
<java classname="org.eclipse.emf.cdo.releng.Api2Html">
<classpath>
<pathelement location="${releng}/bin/" />
<pathelement location="/opt/public/common/apache-ant-1.7.1/lib/xercesImpl.jar" />
</classpath>
<arg value="${hudson.WORKSPACE}" />
<arg value="${build.qualifier}" />
<arg value="${git.clone}/plugins" />
<arg value="${tp}/plugins" />
</java>
<copy file="${releng}/hudson/api.css" todir="${hudson.WORKSPACE}" overwrite="true" />
</target>
<!-- ================= -->
<!-- Generate Products -->
<!-- ================= -->
<target name="-generate.products">
<delete includeemptydirs="true" failonerror="true" quiet="true">
<fileset dir="${temp.products}">
<include name="**" />
</fileset>
</delete>
<mkdir dir="${temp.products}" />
<generate.product id="org.eclipse.emf.cdo.server.product.tcp_h2"
profile="CDOServer"
platform="Windows"
os="win32"
ws="win32"
arch="x86"
priority="450" />
<generate.product id="org.eclipse.emf.cdo.explorer.product"
profile="CDOExplorer"
platform="Windows"
os="win32"
ws="win32"
arch="x86"
priority="350" />
<generate.product id="org.eclipse.emf.cdo.server.product.tcp_h2"
profile="CDOServer"
platform="Linux"
os="linux"
ws="gtk"
arch="x86"
priority="440" />
<generate.product id="org.eclipse.emf.cdo.explorer.product"
profile="CDOExplorer"
platform="Linux"
os="linux"
ws="gtk"
arch="x86"
priority="340" />
<generate.product id="org.eclipse.emf.cdo.server.product.tcp_h2"
profile="CDOServer"
platform="Mac"
os="macosx"
ws="cocoa"
arch="x86"
priority="430" />
<generate.product id="org.eclipse.emf.cdo.explorer.product"
profile="CDOExplorer"
platform="Mac"
os="macosx"
ws="cocoa"
arch="x86"
priority="330" />
</target>
</project>