| <project |
| name="AggregationTasks" |
| basedir="." |
| default="default"> |
| |
| <!-- |
| |
| Purpose and primary targets |
| |
| This build.xml is to download and install the CBI aggregator (and other tools) |
| and run one of three types of aggregations. Note: it assumes all has been checked out of Git |
| and "ready to aggregate". It does recored the "commit" of some repositories, just as a way to |
| improve documenting what was built. |
| |
| This script has 3 main "entry targets", each corresponding to one of the 3 types of aggregations: |
| |
| 1. runAggregatorValidateOnly (default) |
| This simply confirms the "constraints" as specified by the the *.aggr* contributions |
| all make sense and "fit together" as well as that the repositories are available at the |
| specified URLs. It is the "quickest" job, typically taking from 1 to 4 minutes. |
| |
| 2. runAggregatorBuildOnly |
| This aggregation does a complete aggregation. That is, in addition to "validating" |
| the constraints, it downloads the artifacts, unpacks or verifies any pack.gz files, |
| and creates a final repository. The distinguishing feature of this target is that |
| if it is ran a second time it does not "clean" anything and downloads only anything new |
| that is needed. Hence, the first time it is ran can take several hours, |
| but subsequent runs can be much quicker (from just a few minutes to a few dozen minutes, |
| depending on how much is new). |
| |
| 3. runAggregatorCleanBuild |
| This is the aggregation is similar to above, but always does a "clean build". |
| It remove all artifacts and metadata that previously had been downloaded and starts "fresh". |
| Hence, it always takes several hours to complete. But this is is important since there are few things |
| that can go wrong that would only show up in a clean build. |
| |
| Important properties |
| |
| Listed below are some of the most important properties that can be "passed in" (either as -D parameters on command line, |
| or in a property file that is then specified on command line with -Daggr.properties=<yourPropertyFile>). |
| |
| - BUILD_HOME |
| Technically should be an environment variable rather than an ant property. Such as invoking ant on command line |
| with "BUILD_HOME=${PWD} ant ... ". The default is the environment variable "WORKSPACE" so if running on Hudson, |
| nothing needs to be specified. Technically is not required, but if not running on Hudson, it is best to |
| specify some directory outside of the working tree. |
| |
| - release |
| 'release' This is the release train name (e.g. 'neon', all lower case. It is used to form some email messages (from the CBI aggregator) |
| as well as, in the final stages, some URL segments, such as when promoted to ".../staging/<release>". For production |
| |
| Useful properties |
| |
| Listed below are some useful properties that can be "passed in" (either as -D parameters on command line, |
| or in a property file that is then specified on command line with -Daggr.properties=<yourPropertyFile>). |
| But, most users or use-cases will not need to be concerned with these. |
| |
| - git_protocol |
| 'git_protocol' specifies an alternative way to "get" the git repositories of the 'simrel.build' and 'simrel.tools'. |
| If running with local versions of the repository, it can be slightly more efficient and reliable |
| to use direct file access ("git_protocol=file://") instead of the default of "git://git.eclipse.org". |
| |
| - rewriteRepositoryURLValue |
| 'rewriteRepositoryURLValue' is simlar to the git_protocol property but applies to URLs in the *aggr* files. |
| If running on Eclipse.org (or, if you otherwise have direct access to the file system, say with a mirrored repository) |
| it is more efficient to use direct file access ("rewriteRepositoryURLValue=file:///home/data/httpd/download.eclipse.org") |
| rather than the default specified in the *aggr* files ("https://download.eclipse.org"). If this property exists (i.e. has |
| a value) then the script does a simple search-and-replace to rewrite matching URLs. |
| |
| - installEclipseAndTools |
| The script always installs Eclipse and required tools *unless* is sees that eclipse is already installed. |
| To force it to reinstall Eclipse and required tools use this installEclipseAndTools property. In practice, |
| this value is seldom needed since often just as easy to delete the entire "BUILD_HOME" and start completely fresh. |
| |
| - platformFilename |
| 'platformFilename' is the name of the binary platform to install |
| as the "base" into which the aggregator and other tools are installed into. |
| The default is eclipse-platform-4.8-linux-gtk-x86_64.tar.gz. |
| |
| - platformLocation |
| 'platformLocation' is the location from where to the binary platform. |
| By default, it is |
| https://download.eclipse.org/eclipse/downloads/drops4/R-4.8-201806110500 |
| If you have access to the binary platform archive on your file system, you can specify |
| its location instead, for some savings in "download time". For example: |
| file:///files/eclipsefiles/ |
| |
| - JAVA_HOME |
| Should rarely be needed "these days". But is provided here in case it is desired |
| to run the aggregator with a different VM than the VM that is running Ant. |
| |
| --> |
| |
| <!-- globally make "environment variables" available --> |
| <property environment="env" /> |
| |
| <target |
| name="installAggregatorAndTools" |
| depends="init, savePrevious,installAggregator,installRelengTools,installTestsFromP2Repo" |
| if="installEclipseAndTools" |
| unless="eclipseAndToolsInstalled"> |
| |
| <echo message="Installed fresh Eclipse, Aggregator, and Tools" /> |
| <property |
| name="eclipseAndToolsInstalled" |
| value="true" /> |
| |
| </target> |
| |
| <target |
| name="installAggregator" |
| depends="init, savePrevious" |
| if="installEclipseAndTools" |
| unless="aggregatorInstalled"> |
| <property |
| name="APP_NAME_P2DIRECTOR_AGG" |
| value="org.eclipse.equinox.p2.director" /> |
| <property |
| name="otherArgsAggr" |
| value="-metadataRepository https://download.eclipse.org/cbi/updates/aggregator/ide/4.8/I20180518-0759/ -artifactRepository https://download.eclipse.org/cbi/updates/aggregator/ide/4.8/I20180518-0759/ -installIU org.eclipse.cbi.p2repo.aggregator.engine.feature.feature.group" /> |
| |
| <!-- |
| Remote builds should use eclipse.p2.mirrors=true |
| (the default). But, in some cases may want to add |
| -Declipse.p2.mirrors=false |
| --> |
| <property |
| name="vm_args_aggr" |
| value="-Djava.io.tmpdir=${BUILD_HOME}/tmp" /> |
| <condition |
| property="vm_args_aggr_settings" |
| value="-vmargs ${vm_args_aggr}"> |
| <isset property="vm_args_aggr" /> |
| </condition> |
| |
| <mkdir dir="${ECLIPSE_HOME}" /> |
| |
| <get |
| src="${platformResource}" |
| dest="${localPrereqCache}" |
| usetimestamp="true" /> |
| |
| <untar |
| compression="gzip" |
| overwrite="true" |
| src="${localPrereqCache}/${platformFilename}" |
| dest="${ECLIPSE_HOME}" /> |
| |
| <!-- |
| This .options file mentioned elsewhere is most useful on non-eclipse.org |
| sites, since |
| on eclipse.org, by design, should not go through mirrors, but that's |
| the purpose of the .options ... to list which mirrors that artifacts |
| come |
| from. |
| --> |
| |
| <!-- Weird this chmod is required? Maybe an ant bug? Maybe no longer |
| needed? (That is, maybe an early bug in packages?) --> |
| <chmod |
| file="${ECLIPSE_HOME}/eclipse/eclipse" |
| perm="ugo+x" |
| verbose="true" /> |
| |
| <!-- and now get latest version of aggregator --> |
| <exec |
| executable="${eclipseExecutable}" |
| dir="${basedir}" |
| failonerror="true"> |
| <arg |
| line="-data ${eclipseWorkspaceBase}/install_aggr -debug -consolelog -nosplash --launcher.suppressErrors -application ${APP_NAME_P2DIRECTOR_AGG} ${otherArgsAggr} ${vm_args_aggr_settings}" /> |
| </exec> |
| <property |
| name="aggregatorInstalled" |
| value="true" /> |
| |
| </target> |
| |
| <target |
| name="installTestsFromP2Repo" |
| depends="init" |
| if="installEclipseAndTools" |
| unless="testsInstalled"> |
| <property |
| name="APP_NAME_P2DIRECTOR_TESTS" |
| value="org.eclipse.equinox.p2.director" /> |
| <property |
| name="repoReportURL" |
| value="https://download.eclipse.org/cbi/updates/analyzers/4.7/" /> |
| |
| <property |
| name="OTHER_ARGS_TESTS" |
| value="-metadataRepository ${repoReportURL} -artifactRepository ${repoReportURL} -installIU org.eclipse.cbi.p2repo.analyzers.feature.feature.group" /> |
| |
| <property |
| name="vm_args_tests" |
| value="-Djava.io.tmpdir=${BUILD_HOME}/tmp" /> |
| <condition |
| property="vm_args_tests_settings" |
| value="-vmargs ${vm_args_tests}"> |
| <isset property="vm_args_tests" /> |
| </condition> |
| |
| <!-- install latest feature from repo --> |
| <exec |
| executable="${eclipseExecutable}" |
| dir="${basedir}" |
| failonerror="true"> |
| <arg |
| line="-data ${eclipseWorkspaceBase}/installTests -debug -consolelog -nosplash --launcher.suppressErrors -application ${APP_NAME_P2DIRECTOR_TESTS} ${OTHER_ARGS_TESTS} ${vm_args_tests_settings}" /> |
| </exec> |
| <property |
| name="testsInstalled" |
| value="true" /> |
| |
| </target> |
| |
| |
| <target |
| name="installRelengTools" |
| depends="init" |
| if="installEclipseAndTools" |
| unless="relengToolsInstalled"> |
| <property |
| name="APP_NAME_P2DIRECTOR_RELENG" |
| value="org.eclipse.equinox.p2.director" /> |
| <property |
| name="OTHER_ARGS_RELENG" |
| value="-metadataRepository https://download.eclipse.org/webtools/releng/repository/ -artifactRepository https://download.eclipse.org/webtools/releng/repository/ -installIU org.eclipse.wtp.releng.tools.feature.feature.group" /> |
| |
| <property |
| name="vm_args_releng" |
| value="-Djava.io.tmpdir=${BUILD_HOME}/tmp" /> |
| |
| <condition |
| property="vm_args_releng_settings" |
| value="-vmargs ${vm_args_releng}"> |
| <isset property="vm_args_releng" /> |
| </condition> |
| |
| <!-- install latest feature from repo --> |
| <exec |
| executable="${eclipseExecutable}" |
| dir="${basedir}" |
| failonerror="true"> |
| <arg |
| line="-data ${eclipseWorkspaceBase}/installRelengTools -debug -consolelog -nosplash --launcher.suppressErrors -application ${APP_NAME_P2DIRECTOR_RELENG} ${OTHER_ARGS_RELENG} ${vm_args_releng_settings}" /> |
| </exec> |
| <property |
| name="relengToolsInstalled" |
| value="true" /> |
| </target> |
| |
| <macrodef name="git-config"> |
| <attribute name="repodir" /> |
| <attribute name="configKey" /> |
| <attribute name="configValue" /> |
| <sequential> |
| <echo message="execute git in @{repodir}" /> |
| <echo message="git config @{configKey} @{configValue}" /> |
| <!-- We list "before and after" just to learn more about the system. |
| We |
| will not always need to do that. --> |
| <exec |
| executable="git" |
| failonerror="true" |
| dir="@{repodir}"> |
| <arg value="config" /> |
| <arg value="--list" /> |
| </exec> |
| <exec |
| executable="git" |
| failonerror="true" |
| dir="@{repodir}"> |
| <arg value="config" /> |
| <arg value="@{configKey}" /> |
| <arg value="@{configValue}" /> |
| </exec> |
| <exec |
| executable="git" |
| failonerror="true" |
| dir="@{repodir}"> |
| <arg value="config" /> |
| <arg value="--list" /> |
| </exec> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="git-rev-parse"> |
| <attribute name="repodir" /> |
| <attribute |
| name="reference" |
| default="HEAD" /> |
| <attribute name="returnProperty" /> |
| <sequential> |
| <echo message="execute git in @{repodir}" /> |
| <echo message="git rev-parse @{reference} returned in @{returnProperty}" /> |
| <local name="rc" /> |
| <local name="result" /> |
| <exec |
| executable="git" |
| failonerror="true" |
| outputproperty="result" |
| resultproperty="rc" |
| dir="@{repodir}"> |
| <arg line="rev-parse @{reference}" /> |
| </exec> |
| <property |
| name="@{returnProperty}" |
| value="${result}" /> |
| <echo message="In macro rc is ${rc}" /> |
| <echo message="In macro result is ${result}" /> |
| <echo message="In macro @{returnProperty} is ${@{returnProperty}}" /> |
| </sequential> |
| </macrodef> |
| |
| |
| <!-- We set repo config repeatedly (every build) since we do not know "who" |
| cloned the repository first, "us", or "Hudson". And if Hudson (or Gerrit) |
| does it then we do not know how they set or determine the correct config |
| values. --> |
| <target |
| name="configRepo" |
| depends="init" |
| if="localRepoExists"> |
| <echo message="git config task to execute in ${buildModelDir}" /> |
| <!-- in macro "config" we list, then set then list again the configuration. --> |
| <git-config |
| repodir="${buildModelDir}" |
| configKey="core.autocrlf" |
| configValue="input" /> |
| </target> |
| |
| <!-- This is "the key" task. If it succeeds, we run tests (reports), and |
| if they "pass", we promote to "staging". --> |
| <target |
| name="runAggregatorCleanBuild" |
| description="Runs a clean aggregation" |
| depends="init,rewriteRepositoryURL,installAggregatorAndTools"> |
| <!-- If not otherwise set in properties file, use these values. Note |
| the |
| build.eclipse.org production machine must override these values for |
| property |
| values appropriate for it (namely production.properties). --> |
| <!-- We no longer "trust" Eclipse and Equinox repos. -trustedContributions |
| Eclipse,Equinox --> |
| <property |
| name="AGG_APP_ARGS" |
| value="${AGGREGATOR_APP_BASE_ARGS} --action CLEAN_BUILD" /> |
| <echo message="AGG_APP_ARGS: ${AGG_APP_ARGS}" /> |
| <!-- Important: on any non-production machines it is important to _not_ |
| use eclipse.p2.mirrors=false, so this value should be supplied by calling |
| script's properties. Note, we include '-vmargs' here, in case there |
| are not |
| any. Not sure if the use of -vmargs _requires_ arguments or not, but |
| probably |
| would. note: -Declipse.p2.MD5Check=false may be needed as a workaround |
| for |
| bug [253713] (should not actually be required ... but have left note |
| for |
| historical reference) note: rememeber that JAVA_6 should not be used |
| for |
| jar processor, see for example, bug 244603 and bug 279596. --> |
| |
| |
| <exec |
| executable="${eclipseExecutable}" |
| dir="${basedir}" |
| failonerror="false" |
| resultproperty="buildStatus"> |
| |
| <!-- Adding -consolelog makes for too much, unneeded output, since |
| the |
| aggregator produces its verbose own output, slightly cleaner. <arg |
| value="-consolelog" |
| /> --> |
| <arg value="-nosplash" /> |
| <arg value="-data" /> |
| <arg value="${eclipseWorkspaceBase}/runAggregatorCleanBuild" /> |
| <arg value="--launcher.suppressErrors" /> |
| <arg value="-application" /> |
| <arg value="org.eclipse.cbi.p2repo.cli.headless" /> |
| <arg value="aggregate" /> |
| <arg value="--buildId" /> |
| <arg value="${buildTimestamp}" /> |
| <arg line="${AGG_APP_ARGS}" /> |
| <arg line="${vm_setting}" /> |
| <arg line="${builder_vm_args_settings}" /> |
| </exec> |
| |
| <antcall target="checkStatus"> |
| <param |
| name="status" |
| value="${buildStatus}" /> |
| <param |
| name="message" |
| value="Aggregation Failed" /> |
| </antcall> |
| |
| <echo message="Waiting 2 seconds..." /> |
| <sleep seconds="2" /> |
| <echo message="Waiting 2 seconds..." /> |
| <sleep seconds="2" /> |
| <echo message="Waiting 2 seconds..." /> |
| <sleep seconds="2" /> |
| |
| <antcall target="createBuildinfo" /> |
| <antcall target="createXZformats" /> |
| <!-- The tests depend on the symbolic link of "latests" being created, |
| so we pause a few seconds for NSF to catch up. --> |
| <echo message="Waiting 2 seconds..." /> |
| <sleep seconds="2" /> |
| <echo message="Waiting 2 seconds..." /> |
| <sleep seconds="2" /> |
| <echo message="Waiting 2 seconds..." /> |
| <sleep seconds="2" /> |
| |
| <antcall target="runTests"> |
| <param |
| name="tests" |
| value="cleanBuildTests" /> |
| </antcall> |
| |
| </target> |
| |
| <target name="checkStatus"> |
| <echo message="status: ${status}" /> |
| <condition |
| property="statusOK" |
| value="true"> |
| <equals |
| forceString="true" |
| arg1="${status}" |
| arg2="0" /> |
| </condition> |
| <echo message="statusOK: ${statusOK}" /> |
| <antcall target="writeStatus" /> |
| <fail |
| message="${message}" |
| unless="statusOK" /> |
| |
| </target> |
| |
| <target |
| name="writeStatus" |
| unless="statusOK"> |
| <echo |
| message="build failed" |
| file="${BUILD_HOME}/buildStatusFailed" /> |
| </target> |
| |
| <!-- Note: many tests would not be valid on "cached" version of repo, but, |
| some might? Currently no tests are called, but, we might alter, so we |
| make |
| sure installed now, in anticipation. --> |
| <target |
| name="runAggregatorBuildOnly" |
| description="Runs an aggregation, but uses prevoiusly cached artifacts, unless new ones are required by contribution" |
| depends="init,rewriteRepositoryURL,installAggregatorAndTools,initRunTestsXML"> |
| |
| <property |
| name="AGG_APP_ARGS" |
| value="${AGGREGATOR_APP_BASE_ARGS} --action BUILD" /> |
| <echo message="AGG_APP_ARGS: ${AGG_APP_ARGS}" /> |
| <!-- |
| Important: on any non-production machines it is important to _not_ |
| use eclipse.p2.mirrors=false, so this value should be supplied by calling |
| script's properties. Note, we include '-vmargs' here, in case there |
| are not any. Not sure if the use of -vmargs _requires_ arguments or |
| not, but |
| probably would. note: -Declipse.p2.MD5Check=false may be needed as |
| a workaround |
| for bug [253713] (should not be required any longer ... but have left |
| note |
| for historical reference) Another historical note, we used to "force" |
| JAVA_5 to be be used for jar processor, see for example, bug 244603 |
| and bug 279596. |
| But we have not "forced" everyone to use Java 8. |
| --> |
| |
| <exec |
| executable="${eclipseExecutable}" |
| dir="${basedir}" |
| failonerror="false" |
| resultproperty="buildStatus"> |
| <arg value="-debug" /> |
| <arg value="file://${BUILD_HOME_DIR}/p2options/.options" /> |
| <!-- |
| Adding -consolelog makes for too much, unneeded output, since |
| the aggregator produces its verbose own output, slightly cleaner. |
| --> |
| <arg value="-nosplash" /> |
| <arg value="-data" /> |
| <arg value="${eclipseWorkspaceBase}/runAggregatorBuildOnly" /> |
| <arg value="--launcher.suppressErrors" /> |
| <arg value="-application" /> |
| <arg value="org.eclipse.cbi.p2repo.cli.headless" /> |
| <arg value="aggregate" /> |
| <arg value="--buildId" /> |
| <arg value="${buildTimestamp}" /> |
| <arg line="${AGG_APP_ARGS}" /> |
| <arg line="${vm_setting}" /> |
| <arg line="${builder_vm_args_settings}" /> |
| </exec> |
| |
| <antcall target="checkStatus"> |
| <param |
| name="status" |
| value="${buildStatus}" /> |
| <param |
| name="message" |
| value="Aggregation Failed" /> |
| </antcall> |
| |
| <antcall target="createBuildinfo" /> |
| |
| <antcall target="runTests"> |
| <param |
| name="tests" |
| value="cachedBuildTests" /> |
| </antcall> |
| |
| </target> |
| |
| <!-- |
| Note, we currently have no "tests" for the "validate only" case, but |
| we could, might someday, so we go ahead an install, in anticipation. |
| For example, we might simply test that all aggrcon files specify |
| unique URL (to simple repository) or that "versions" are |
| specified in *.aggrcon file. |
| --> |
| <target |
| name="runAggregatorValidateOnly" |
| description="Runs an aggregation, but validates constraints only. Does not fetch artifacts." |
| depends="init,rewriteRepositoryURL,installAggregatorAndTools,initRunTestsXML"> |
| |
| <property |
| name="AGG_APP_ARGS" |
| value="${AGGREGATOR_APP_BASE_ARGS} --action VALIDATE" /> |
| <echo message="AGG_APP_ARGS: ${AGG_APP_ARGS}" /> |
| |
| <exec |
| executable="${eclipseExecutable}" |
| dir="${basedir}" |
| failonerror="false" |
| resultproperty="buildStatus"> |
| <arg value="-debug" /> |
| <!-- |
| In case extra tracing is desired: |
| <arg value="file://${BUILD_HOME}/org.eclipse.simrel.tools/p2options/.options" |
| /> |
| --> |
| <!-- |
| Adding -consolelog makes for too much, unneeded output, since |
| the aggregator produces its verbose own output, slightly cleaner. |
| --> |
| <arg value="-nosplash" /> |
| <arg value="-data" /> |
| <arg value="${eclipseWorkspaceBase}/runAggregatorValidateOnly" /> |
| <arg value="--launcher.suppressErrors" /> |
| <arg value="-application" /> |
| <arg value="org.eclipse.cbi.p2repo.cli.headless" /> |
| <arg value="aggregate" /> |
| <arg value="--buildId" /> |
| <arg value="${buildTimestamp}" /> |
| <arg line="${AGG_APP_ARGS}" /> |
| <arg line="${vm_setting}" /> |
| <arg line="${builder_vm_args_settings}" /> |
| </exec> |
| |
| <antcall target="checkStatus"> |
| <param |
| name="status" |
| value="${buildStatus}" /> |
| <param |
| name="message" |
| value="Aggregation Failed" /> |
| </antcall> |
| |
| <!-- setting dir to our workspace, so tests done on what "we" have --> |
| <antcall target="createBuildinfo" /> |
| |
| <antcall target="runTests"> |
| <param |
| name="tests" |
| value="validateOnlyTests" /> |
| </antcall> |
| |
| </target> |
| |
| <target |
| name="runTests" |
| depends="initRunTestsXML,checkrunTests" |
| if="runTestsXML"> |
| <ant |
| antfile="${runTestsXML}" |
| target="${tests}" |
| dir="${buildToolsDir}" /> |
| </target> |
| <target |
| name="checkrunTests" |
| depends="initRunTestsXML" |
| unless="runTestsXML"> |
| <echo message="runTestsXML was not defined as expected. Hence, no tests ran." /> |
| </target> |
| <target |
| name="initRunTestsXML" |
| depends="getBuildToolsDir" |
| if="toolsAvailable" |
| unless="runTestsXML"> |
| <path id="runTests.paths"> |
| <fileset |
| dir="${buildToolsDir}" |
| includes="runTests.xml" /> |
| </path> |
| <property |
| name="runTestsXML" |
| refid="runTests.paths" /> |
| <echo message="runTestsXML file: ${runTestsXML}" /> |
| </target> |
| |
| <target name="getBuildToolsDir"> |
| <property |
| name="buildToolsDir" |
| value="${BUILD_HOME}/org.eclipse.simrel.tools" /> |
| <available |
| file="${buildToolsDir}" |
| property="toolsAvailable" /> |
| </target> |
| <target |
| name="init" |
| depends="getJVMLocation, getBUILD_HOME, setDefaultBUILD_HOME, setDefaultRelease, getBuildTimestamp, getJobName, getJobNumber, getBuildToolsDir, gitRevParseTools, getBuildModelDir, gitRevParseModel" |
| unless="isInitialized"> |
| |
| <!-- We assign a reasonable value for local builds, but for production |
| builds should be .../production.properties This property file name |
| is itself a property, so it can be overridden on one machine versus another. |
| We do it this way, instead of just specifying -propertyFile on command line, |
| so that the property values can be "nested" in other property values and |
| evaluated lazily. --> |
| <property |
| name="aggrPropertyFile" |
| value="${buildToolsDir}/aggr.properties" /> |
| <property file="${aggrPropertyFile}" /> |
| |
| <!-- |
| The "binary platform" is enough, for now, and since smaller than the SDK, |
| it is recommended as the "base" to install tools into. But a typical "SDK" has been |
| left in this comment in case users are doing more than a normal "aggregation build". |
| value="/home/data/httpd/archive.eclipse.org/eclipse/downloads/drops4/R-4.8-201806110500/eclipse-SDK-4.8-linux-gtk-x86_64.tar.gz" |
| --> |
| <!-- |
| Note: if there is local file system version of the prereq platform, |
| if it faster to specify file://<location of platform>. |
| <property name="platformLocation" value="file:///home/data/httpd/archive.eclipse.org/eclipse/downloads/drops4/R-4.8-201806110500" /> |
| We use "http://" by default to make it easy to "run from anywhere", but |
| on the production machine, in production.properties, we specify the "file://" form. |
| --> |
| <property |
| name="platformLocation" |
| value="https://download.eclipse.org/eclipse/downloads/drops4/R-4.8-201806110500/" /> |
| <property |
| name="platformFilename" |
| value="eclipse-platform-4.8-linux-gtk-x86_64.tar.gz" /> |
| <property |
| name="localPrereqCache" |
| value="${BUILD_HOME}/localPrereqs" /> |
| <property |
| name="platformResource" |
| value="${platformLocation}/${platformFilename}" /> |
| <!-- directory must exist before "get" uses it or else the file is given name of "localPrereqs" --> |
| <mkdir dir="${localPrereqCache}" /> |
| |
| |
| <property |
| name="ECLIPSE_HOME" |
| value="${BUILD_HOME}/eclipseInstall" /> |
| |
| <property |
| name="ECLIPSE_EXE" |
| value="${ECLIPSE_HOME}/eclipse/eclipse" /> |
| |
| <property |
| name="AGGREGATOR_RESULTS" |
| value="${BUILD_HOME}/aggregation" /> |
| |
| <!-- git_protocol should be changed to somethign like "file://" for production |
| builds, for efficiency and to avoid problems when the "internal" network |
| is down. (Note no trailing slash). It can be added to a local copy |
| of 'aggrPropertyFile' --> |
| <property |
| name="git_protocol" |
| value="git://git.eclipse.org" /> |
| |
| <!-- |
| rewriteRepositoryURLValue is an important variable, passed in through |
| production.properties. It is the trigger to change http:// values, |
| to file:// values. At one point, we needed, unrewriteMapsLine, to know |
| how to |
| "change back" and now use commonRepositoryDownloadURLValue to know |
| "what to |
| look for" to change to rewriteRepositoryURLValue, but this should not |
| be |
| needed to be changed, since we make the strong assumption that, in |
| *.aggrcon |
| files, this string occurs only in repository location attributes. If |
| not true, |
| more complex parsing/replacement would be required. |
| --> |
| <property |
| name="commonRepositoryDownloadURLValue" |
| value="https://download.eclipse.org" /> |
| |
| <condition property="localRepoExists"> |
| <available file="${buildModelDir}/.git" /> |
| </condition> |
| |
| <property |
| name="eclipseWorkspaceBase" |
| value="${BUILD_HOME}/eclipseworkspaces" /> |
| |
| <!-- |
| If the eclipse workspace exists, remove it, to make sure we are |
| starting "fresh". Eclipse will create it. Be sure some "archive |
| artifacts" job saves it away, if desired, just for it's ".log", |
| if nothing else. |
| --> |
| <delete |
| dir="${eclipseWorkspaceBase}" |
| quiet="true" /> |
| |
| <!-- Note: we put -vmargs directly in builder_vm_args_settings so that if desired |
| to not have ANY vmargs, then we will not be left with a dangling (empty) |
| -vmargs at the end of eclipse command line. --> |
| <property |
| name="builder_vm_args" |
| value="-Xmx1024M -Djava.io.tmpdir=${BUILD_HOME}/tmp" /> |
| <condition |
| property="builder_vm_args_settings" |
| value="-vmargs ${builder_vm_args}"> |
| <isset property="builder_vm_args" /> |
| </condition> |
| |
| <!-- tmp directory must exist, for Java to use it --> |
| <mkdir dir="${BUILD_HOME}/tmp" /> |
| <echo message="Made directory ${BUILD_HOME}/tmp" /> |
| |
| |
| <property |
| name="eclipseExecutable" |
| value="${ECLIPSE_EXE}" /> |
| |
| <available |
| file="${ECLIPSE_HOME}/eclipse" |
| type="dir" |
| property="eclipseExists" /> |
| |
| <!-- set installEclipseAndTools on command line to force a reinstall, |
| Otherwise, only installed if not installed yet. --> |
| <condition property="installEclipseAndTools"> |
| <not> |
| <isset property="eclipseExists" /> |
| </not> |
| </condition> |
| |
| <!-- saveAndInstallEclipseAndTools should only be true if "installEclipseAndTools" |
| are set on command line properties (and a version already exists). --> |
| <condition property="saveAndInstallEclipseAndTools"> |
| <and> |
| <isset property="eclipseExists" /> |
| <isset property="installEclipseAndTools" /> |
| </and> |
| </condition> |
| |
| <!-- note the "https" may have to be "http" on localhost, non-production |
| hudson machines --> |
| <property |
| name="hostForURL" |
| value="https://ci.eclipse.org" /> |
| |
| <!-- TODO: this will not be correct for local builds, probably. Could |
| do |
| more to detect "local builds" and either not set, or set to correct |
| values |
| for a "local hudson". --> |
| <property |
| name="LOG_URL" |
| value="${hostForURL}/simrel/job/${jobName}/${jobNumber}/console" /> |
| |
| <!-- These are the arguments to the aggregator that are constant, whether |
| doing "production build" or "local build". If doing production build, |
| then |
| is also needs the ‐$dash;production argument (it is the one that |
| cuases |
| "blame mail" to be sent). If PRODUCTION is not set externally (such |
| as on |
| command line, or in a property file, we set it to blank here to avoid |
| the |
| literal '${PRODUCTION} from being passed as an argument. Be sure to |
| udpate |
| emailFrom as "build master" changes. --> |
| <property |
| name="PRODUCTION" |
| value="" /> |
| <property |
| name="p2AgentLocation" |
| value="${BUILD_HOME}/.p2AgentLocation" /> |
| <!-- In the distant past, we have also used these arguments. The maven |
| result one was always experimental. We have also learned it it better |
| not |
| to "trust" any repository. Can only use one or the other, not both |
| ‐‐mavenResult |
| ‐‐trustedContributions Eclipse,Equinox --> |
| <property |
| name="AGGREGATOR_APP_BASE_ARGS" |
| value="${PRODUCTION} --buildModel ${buildModelDir}/simrel.aggr --buildRoot ${AGGREGATOR_RESULTS} --agentLocation ${p2AgentLocation} --eclipseLogLevel DEBUG --logLevel DEBUG --emailFrom frederic.gurr@eclipse-foundation.org --emailFromName ${release}Aggregator --logURL ${LOG_URL} --subjectPrefix ${release}Aggregation" /> |
| |
| <echo message="= = = Properties at end of init = = = " /> |
| <echo message="git_protocol: ${git_protocol}" /> |
| <echo message="PRODUCTION: ${PRODUCTION}" /> |
| <echo message="rewriteRepositoryURLValue: ${rewriteRepositoryURLValue}" /> |
| <echo message="buildModelCommit: ${buildModelCommit}" /> |
| <echo message="toolsRepoCommit: ${toolsRepoCommit}" /> |
| <echo message="aggrPropertyFile: ${aggrPropertyFile}" /> |
| <echo message="buildId: ${buildTimestamp}" /> |
| <echo message="user.dir: ${user.dir}" /> |
| <echo message="user.home: ${user.home}" /> |
| <echo message="BUILD_HOME (normally HUDSON workspace): ${BUILD_HOME}" /> |
| <echo message="Eclipse workspace base: ${eclipseWorkspaceBase}" /> |
| <echo message="PATH: ${env.PATH}" /> |
| <echo message="JAVA_HOME: ${JAVA_HOME}" /> |
| <echo message="hostForURL: ${hostForURL}" /> |
| <echo message="jobName: ${jobName}" /> |
| <echo message="jobNumber: ${jobNumber}" /> |
| <echo message="ECLIPSE_EXE: ${ECLIPSE_EXE}" /> |
| <echo message="eclipseExists: ${eclipseExists}" /> |
| <echo message="builder_vm_args: ${builder_vm_args}" /> |
| <echo message="builder_vm_args_settings: ${builder_vm_args_settings}" /> |
| <echo message=" = = = = = = = = = = = = " /> |
| <echoproperties /> |
| |
| <!-- remove "build failed" status file, if there is one from previous |
| run. --> |
| <delete |
| failonerror="true" |
| quiet="true"> |
| <fileset dir="${BUILD_HOME}"> |
| <include name="buildStatusFailed" /> |
| </fileset> |
| </delete> |
| |
| <!-- no need to initialize twice --> |
| <property |
| name="isInitialized" |
| value="true" /> |
| |
| </target> |
| |
| <target |
| name="getBuildTimestamp" |
| depends="getHudsonTimestamp" |
| unless="buildTimestamp"> |
| <tstamp> |
| <format |
| property="buildTimestamp" |
| pattern="yyyy-MM-dd_HH-mm-ss" |
| timezone="UTC_TIME" /> |
| </tstamp> |
| <echo message="Using Ant computed timestamp (since not running on Hudson): ${buildTimestamp}." /> |
| </target> |
| |
| <target |
| name="getHudsonTimestamp" |
| unless="buildTimestamp" |
| if="env.BUILD_ID"> |
| <property |
| name="buildTimestamp" |
| value="${env.BUILD_ID}" /> |
| <echo message="Using timestamp from Hudson Build ID: ${buildTimestamp}" /> |
| </target> |
| |
| <target |
| name="getJobName" |
| depends="getHudsonJobName" |
| unless="jobName"> |
| <property |
| name="jobName" |
| value="none" /> |
| <echo message="Using default jobName: none." /> |
| </target> |
| |
| <target |
| name="getHudsonJobName" |
| unless="jobName" |
| if="env.JOB_NAME"> |
| <property |
| name="jobName" |
| value="${env.JOB_NAME}" /> |
| <echo message="Using jobName from Hudson Builder: ${jobName}" /> |
| </target> |
| |
| <target |
| name="getJobNumber" |
| depends="getHudsonJobNumber" |
| unless="jobNumber"> |
| |
| <property |
| name="jobNumber" |
| value="none" /> |
| <echo message="Using default jobNumber: ${jobNumber}." /> |
| </target> |
| |
| <target |
| name="getHudsonJobNumber" |
| unless="jobNumber" |
| if="env.BUILD_NUMBER"> |
| <property |
| name="jobNumber" |
| value="${env.BUILD_NUMBER}" /> |
| <echo message="Using jobNumber from Hudson Builder: ${jobNumber}" /> |
| </target> |
| |
| <target |
| name="getBUILD_HOME" |
| depends="getHudsonBUILD_HOME" |
| unless="BUILD_HOME"> |
| <condition |
| property="BUILD_HOME" |
| value="${env.BUILD_HOME}"> |
| <isset property="env.BUILD_HOME" /> |
| </condition> |
| </target> |
| |
| <target |
| name="getHudsonBUILD_HOME" |
| unless="BUILD_HOME"> |
| <condition |
| property="BUILD_HOME" |
| value="${env.WORKSPACE}"> |
| <isset property="env.WORKSPACE" /> |
| </condition> |
| </target> |
| |
| <target |
| name="setDefaultBUILD_HOME" |
| unless="BUILD_HOME"> |
| <!-- |
| We assume BUILD_HOME is "one up" from directory where build.xml file is. |
| We always assume the 'simrel.build' and 'simrel.tools' projects are directly under "BUILD_HOME". |
| --> |
| <dirname |
| property="BUILD_HOME" |
| file="${basedir}" /> |
| <echo |
| message="WARNING: BUILD_HOME set to a default value, ${BUILD_HOME}. If this is not correct, you must configure is explicitly as an environment variable." /> |
| <echo message=" Note: we always assume the 'simrel.build' and 'simrel.tools' projects are directly under 'BUILD_HOME'" /> |
| |
| </target> |
| <target |
| name="setDefaultRelease" |
| unless="release"> |
| <property |
| name="release" |
| value="noReleaseSpecified" /> |
| <echo |
| message="WARNING: release set to a default value, ${release}. Typically this is not desired and may mean there is a configuration issue." /> |
| </target> |
| <!-- Only rewrite, if a value has been provided --> |
| <!-- TODO: should make the "exclude" part automatic based on presence/abscense |
| of "useTrusted" property --> |
| <target |
| name="rewriteRepositoryURL" |
| if="rewriteRepositoryURLValue" |
| unless="rewroteURLs"> |
| <replace |
| dir="${buildModelDir}" |
| token="${commonRepositoryDownloadURLValue}" |
| value="${rewriteRepositoryURLValue}"> |
| <include name="*.aggrcon" /> |
| <!-- <exclude name="ep.aggrcon"/> <exclude name="equinox.aggrcon"/> --> |
| </replace> |
| <echo message="Rewrote repository location URLs ..." /> |
| <echo message=" From: ${commonRepositoryDownloadURLValue}" /> |
| <echo message=" To: ${rewriteRepositoryURLValue}" /> |
| <echo message=" Excluding no files since no composite artifacts, just agregate" /> |
| <!-- <echo message=" Excluding: ep.aggrcon"/> <echo message=" Excluding: |
| ep.aggrcon, equinox.aggrcon"/> --> |
| <property |
| name="rewroteURLs" |
| value="true" /> |
| |
| </target> |
| |
| <target |
| name="getBuildModelDir" |
| unless="buildModelDir"> |
| <property |
| name="buildModelDir" |
| value="${BUILD_HOME}/org.eclipse.simrel.build" /> |
| </target> |
| |
| <target name="createXZformats"> |
| <exec |
| executable="/bin/bash" |
| dir="${basedir}" |
| failonerror="true"> |
| <arg line="convertxz.sh ${AGGREGATOR_RESULTS}/final" /> |
| </exec> |
| </target> |
| |
| <target |
| name="createBuildinfo" |
| depends="init, gitRevParseModel, gitRevParseTools"> |
| |
| <property |
| name="BUILD_INFO_DIR" |
| value="${AGGREGATOR_RESULTS}/final/buildInfo" /> |
| <!-- |
| Note: The propertyfile task literally edits the properties, |
| if the file already exists, does not create a new one. Therefore |
| we delete it first. |
| --> |
| <delete dir="${BUILD_INFO_DIR}" /> |
| <mkdir dir="${BUILD_INFO_DIR}" /> |
| |
| <propertyfile file="${BUILD_INFO_DIR}/buildInfo.properties"> |
| <entry |
| key="buildModelCommit" |
| value="${buildModelCommit}" /> |
| <entry |
| key="toolsRepoCommit" |
| value="${toolsRepoCommit}" /> |
| <entry |
| key="triggerJobName" |
| value="${jobName}" /> |
| <entry |
| key="triggerJobNumber" |
| value="${jobNumber}" /> |
| <entry |
| key="triggerBuildTimestamp" |
| value="${buildTimestamp}" /> |
| <entry |
| key="triggerBuildId" |
| value="${buildTimestamp}" /> |
| </propertyfile> |
| <!-- echo the key ones to end of log, just to have redundant record. --> |
| <echo message="buildModelCommit: ${buildModelCommit}" /> |
| <echo message="toolsRepoCommit: ${toolsRepoCommit}" /> |
| <echo message="triggerJobName: ${jobName}" /> |
| <echo message="triggerJobNumber: ${jobNumber}" /> |
| <echo message="triggerBuildTimestamp: ${buildTimestamp}" /> |
| <echo message="triggerBuildId: ${buildTimestamp}" /> |
| <!-- just as well write out everything ... just in case something else |
| needed in future. --> |
| <echoproperties destfile="${BUILD_INFO_DIR}/allInfo.properties" /> |
| </target> |
| |
| <target |
| name="gitRevParseModel" |
| depends="getBuildModelDir"> |
| <git-rev-parse |
| repodir="${buildModelDir}" |
| returnproperty="buildModelCommit" /> |
| <echo message="In target gitRevParseModel, buildModelCommit: ${buildModelCommit}" /> |
| </target> |
| <target |
| name="gitRevParseTools" |
| depends="getBuildToolsDir" |
| if="toolsAvailable"> |
| <git-rev-parse |
| repodir="${buildToolsDir}" |
| returnproperty="toolsRepoCommit" /> |
| <echo message="In target gitRevParseTools, toolsRepoCommit: ${toolsRepoCommit}" /> |
| </target> |
| |
| <target |
| name="default" |
| description="By default run the runAggregatorValidateOnly target"> |
| <echo message="Using default target:" /> |
| <echo message=" runAggregatorValidateOnly" /> |
| <echo message=" Other meaningful targets to specify explicitly:" /> |
| <echo message=" runAggregatorBuildOnly" /> |
| <echo message=" runAggregatorCleanBuild" /> |
| <antcall target="runAggregatorValidateOnly" /> |
| </target> |
| |
| <target |
| name="savePrevious" |
| depends="init" |
| if="saveAndInstallEclipseAndTools" |
| unless="previousSaved"> |
| |
| <!-- Remember, old, saved versions may have to be maually cleaned up, |
| from |
| time to time. But probably handled well enough by an occasional, manual |
| "clean |
| workspace" from Hudson's web interface. --> |
| <move |
| verbose="true" |
| todir="${ECLIPSE_HOME}/eclipse${buildTimestamp}"> |
| <fileset dir="${ECLIPSE_HOME}/eclipse" /> |
| </move> |
| |
| <property |
| name="previousSaved" |
| value="true" /> |
| </target> |
| <!-- It is not required for user to specify "vm", only |
| needed if they want to override the system (or Hudson) |
| default. We do the "work" in getJVMLocationInternal |
| so we can set a "null default" in this task. |
| --> |
| <target |
| name="getJVMLocation" |
| depends="getJVMLocationInternal" |
| unless="vm_setting"> |
| <!-- if vm_setting not set in 'getJVMLocationInternal' |
| then we set it to "null" here so that is has a safe value |
| when later used as <arg line="${vm_setting} /> |
| --> |
| <property |
| name="vm_setting" |
| value="" /> |
| <echo message="vm_setting has no value: ${vm_setting}" /> |
| </target> |
| <target |
| name="getJVMLocationInternal" |
| depends="getJAVA_HOME" |
| if="JAVA_HOME" |
| unless="vm_setting"> |
| <property |
| name="vm_setting" |
| value="-vm ${JAVA_HOME}/jre/bin" /> |
| <echo message="at end of 'getJVMLocationInternal' vm_setting: ${vm_setting}" /> |
| </target> |
| <!-- we have all these "checks" and "print out" since |
| it is not known how ant "knows about" JAVA_HOME. |
| That is, ant could be running in a Java different from |
| the one that is desired to be used to run aggregator. |
| Put another way, users can define JAVA_HOME as an environment |
| variable, or pass in a -DJAVA_HOME value. The later takes |
| priority, if both exists. |
| Example: -DJAVA_HOME=/shared/common/jdk1.8.0_x64-latest |
| --> |
| <target |
| name="getJAVA_HOME" |
| depends="printPredefinedJAVA_HOME" |
| unless="JAVA_HOME"> |
| <condition |
| property="JAVA_HOME" |
| value="${env.JAVA_HOME}"> |
| <isset property="env.JAVA_HOME" /> |
| </condition> |
| <echo message="at end of 'getJAVA_HOME', JAVA_HOME: ${JAVA_HOME}" /> |
| </target> |
| <target |
| name="printPredefinedJAVA_HOME" |
| if="JAVA_HOME"> |
| <echo message="Found JAVA_HOME already defined to be ${JAVA_HOME}" /> |
| </target> |
| |
| <!-- Note: this target may be useful to anyone that has ran "build.xml" from |
| their IDE workspace, since the build will leave some directories in |
| their IDE workspace that do not show up in their IDE. |
| --> |
| <target |
| name="cleanAllArtifacts" |
| depends="getBUILD_HOME, setDefaultBUILD_HOME" |
| description="This target is primarily for documentation. We do NOT want to call this automatically, since that would interfere with desired caching, etc. But may be desired to create custom versions in future, in some cases, so documented here."> |
| <!-- Note the strong assumption that "BUILD_HOME" is the same |
| value when running this 'clean' target, as when |
| the directories were created. |
| --> |
| <delete |
| dir="${BUILD_HOME}/localPrereqs" |
| includeemptydirs="true" /> |
| <delete |
| dir="${BUILD_HOME}/eclipseInstall" |
| includeemptydirs="true" /> |
| <delete |
| dir="${BUILD_HOME}/tmp" |
| includeemptydirs="true" /> |
| <delete |
| dir="${BUILD_HOME}/aggregation" |
| includeemptydirs="true" /> |
| </target> |
| |
| </project> |