| <!-- Copyright (c) 2011, 2018 IBM Corporation and others. |
| |
| This program and the accompanying materials are made available under the |
| terms of the Eclipse Public License 2.0 which accompanies this distribution, |
| https://www.eclipse.org/legal/epl-2.0/ |
| |
| SPDX-License-Identifier: EPL-2.0. |
| |
| Contributors: |
| IBM Corporation - initial API and implementation |
| --> |
| |
| <!-- |
| this script is invoked by the build, on the build machine, |
| to signify to hudson "the build is done", pass a few parameters, |
| then let Hudson take over. |
| |
| wget - -no-verbose -O invokeTestsJSON.xml http://git.eclipse.org/c/platform/eclipse.platform.releng.eclipsebuilder.git/plain/invokeTestsJSON.xml?h=master 2>&1; |
| |
| --> |
| |
| <project |
| name="Hudson-Tests" |
| default="runTests" |
| basedir="."> |
| |
| <target |
| name="runTests" |
| depends="init"> |
| <echo message="== Properties in invokeTestsJSON.xml" /> |
| <echo message="buildId: ${buildId} " /> |
| <echo message="eclipseStream: ${eclipseStream}" /> |
| <echo message="eclipseStreamMajor: ${eclipseStreamMajor}" /> |
| <echo message="eclipseStreamMinor: ${eclipseStreamMinor}" /> |
| <echo message="buildType: ${buildType}" /> |
| <echo message="EBUILDER_HASH: ${EBUILDER_HASH}" /> |
| <antcall target="JUnitTests" /> |
| <antcall target="PerfTests" /> |
| </target> |
| |
| |
| <target |
| name="JUnitTests" |
| depends="init"> |
| |
| <!-- |
| currently we test on three platforms. |
| So, three parallel calls since on different machines (and Hudson queues). |
| TODO: Can these be called, in parallel via callant (or, perhaps subant? |
| for greater flexibility in what to test?) |
| --> |
| |
| <antcall target="triggerHudsonTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-win32-java8" /> |
| </antcall> |
| |
| <antcall target="triggerHudsonTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-mac64-java8" /> |
| </antcall> |
| |
| <!-- |
| currently we test on four platforms. |
| These GTK3 tests are "just like the others", except the URL to "send it to" differs. |
| --> |
| |
| <antcall target="triggerHudsonTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java8" /> |
| </antcall> |
| |
| <antcall target="triggerHudsonTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java11" /> |
| </antcall> |
| |
| <antcall target="triggerHudsonTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java13" /> |
| </antcall> |
| |
| </target> |
| |
| <target |
| name="PerfTests" |
| depends="init"> |
| |
| <!-- |
| currently we test on three platforms. |
| So, three parallel calls since on different machines (and Hudson queues). |
| TODO: Can these be called, in parrallel via callant (or, perhaps subant?) |
| for greater flexibility in what to test? |
| --> |
| |
| <antcall target="triggerHudsonPerfTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-perf-lin64-baseline" /> |
| </antcall> |
| <!-- |
| <antcall target="triggerHudsonTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-win32" /> |
| </antcall> |
| |
| <antcall target="triggerHudsonTests"> |
| <param |
| name="job" |
| value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-mac64" /> |
| </antcall> |
| --> |
| |
| </target> |
| |
| |
| <target |
| name="triggerHudsonTests" |
| depends="init"> |
| |
| |
| |
| <!-- |
| baseURL used to be "required parameter" for Hudson job, but seemed overly complicated so |
| I compute all this later (based on stream and id) but, I've learned, one disadvantage is this |
| restricts test code locations to "downloads". There might be times we want to do from "build" |
| locations, or similar. Not to mention, other, internal test systems someday. |
| |
| <property |
| name="baseURL" |
| value="http://download.eclipse.org/eclipse/downloads/${dropsDirSegment}/${buildId}" /> |
| --> |
| |
| <!-- Hudson jobs currently have four required parameters --> |
| <property |
| name="JSON_buildId" |
| value="{"name":"buildId","value":"${buildId}"}" /> |
| |
| <property |
| name="json" |
| value="{"parameter":[${JSON_buildId},${JSON_eclipseStream},${JSON_EBUILDER_HASH}]}" /> |
| |
| <echo message="env.HUDSON_PROTOCOL: ${env.HUDSON_PROTOCOL}" /> |
| <echo message="env.HUDSON_HOST: ${env.HUDSON_HOST}" /> |
| <echo message="env.HUDSON_PORT: ${env.HUDSON_PORT}" /> |
| <echo message="env.HUDSON_ROOT_URI: ${env.HUDSON_ROOT_URI}" /> |
| <echo message="json for unit curl post: ${json}" /> |
| <echo message="job: ${job}" /> |
| <echo message="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_ROOT_URI}/job/${job}/buildWithParameters" /> |
| |
| <exec |
| executable="curl" |
| resultproperty="rcUnit" |
| outputproperty="unitOutput" |
| errorproperty="unitErrorOutput"> |
| <arg line="-X GET" /> |
| <arg value="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_ROOT_URI}/job/${job}/buildWithParameters?token=${env.HUDSON_TOKEN}&buildId=${buildId}" /> |
| <arg value="--fail" /> |
| </exec> |
| <echo message="DEBUG: rcUnit: ${rcUnit}" /> |
| <condition property="invocationNotOk"> |
| <not> |
| <equals |
| arg1="${rcUnit}" |
| arg2="0" /> |
| </not> |
| </condition> |
| <!-- |
| TODO: We could produced a "TEST_ARE_RUNNING_ON" file here too, when rc = 0 .. that is unless="invocationNoOk" |
| and included the URL of build or performance machine tests. |
| --> |
| <antcall target="checkInvocation"> |
| <param |
| name="returnCode" |
| value="${rcUnit}" /> |
| <param |
| name="job" |
| value="${job}" /> |
| <param |
| name="output" |
| value="${unitOutput}" /> |
| <param |
| name="errorOutput" |
| value="${unitErrorOutput}" /> |
| </antcall> |
| </target> |
| |
| <target |
| name="triggerHudsonWinTests" |
| depends="init"> |
| <!-- |
| baseURL used to be "required parameter" for Hudson job, but seemed overly complicated so |
| I compute all this later (based on stream and id) but, I've learned, one disadvantage is this |
| restricts test code locations to "downloads". There might be times we want to do from "build" |
| locations, or similar. Not to mention, other, internal test systems someday. |
| |
| <property |
| name="baseURL" |
| value="http://download.eclipse.org/eclipse/downloads/${dropsDirSegment}/${buildId}" /> |
| --> |
| |
| <!-- Hudson jobs currently have four required parameters --> |
| <property |
| name="JSON_buildId" |
| value="{"name":"buildId","value":"${buildId}"}" /> |
| |
| <property |
| name="json" |
| value="{"parameter":[${JSON_buildId},${JSON_eclipseStream},${JSON_EBUILDER_HASH}]}" /> |
| |
| <echo message="env.HUDSON_PROTOCOL: ${env.HUDSON_PROTOCOL}" /> |
| <echo message="env.HUDSON_HOST: ${env.HUDSON_HOST}" /> |
| <echo message="env.HUDSON_PORT: ${env.HUDSON_PORT}" /> |
| <echo message="env.HUDSON_WIN32_ROOT_URI: ${env.HUDSON_WIN32_ROOT_URI}" /> |
| <echo message="json for unit curl post: ${json}" /> |
| <echo message="job: ${job}" /> |
| <echo message="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_WIN32_ROOT_URI}/job/${job}/buildWithParameters" /> |
| |
| <exec |
| executable="curl" |
| resultproperty="rcUnit" |
| outputproperty="unitOutput" |
| errorproperty="unitErrorOutput"> |
| <arg line="-X GET" /> |
| <arg value="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_WIN32_ROOT_URI}/job/${job}/buildWithParameters?token=${env.HUDSON_TOKEN}&buildId=${buildId}" /> |
| <arg value="--fail" /> |
| </exec> |
| <echo message="DEBUG: rcUnit: ${rcUnit}" /> |
| <condition property="invocationNotOk"> |
| <not> |
| <equals |
| arg1="${rcUnit}" |
| arg2="0" /> |
| </not> |
| </condition> |
| <!-- |
| TODO: We could produced a "TEST_ARE_RUNNING_ON" file here too, when rc = 0 .. that is unless="invocationNoOk" |
| and included the URL of build or performance machine tests. |
| --> |
| <antcall target="checkInvocation"> |
| <param |
| name="returnCode" |
| value="${rcUnit}" /> |
| <param |
| name="job" |
| value="${job}" /> |
| <param |
| name="output" |
| value="${unitOutput}" /> |
| <param |
| name="errorOutput" |
| value="${unitErrorOutput}" /> |
| </antcall> |
| </target> |
| |
| <target |
| name="checkInvocation" |
| if="invocationNotOk"> |
| <echo |
| message="<p>Invocation of Curl did not return 0 return code for ${job}.<br />${line.separator}" |
| file="${postingDirectory}/TEST_INVOCATION_FAILED.html" |
| append="true" /> |
| <echo |
| message=" return code was ${returnCode}<br />${line.separator}" |
| file="${postingDirectory}/TEST_INVOCATION_FAILED.html" |
| append="true" /> |
| <echo |
| message=" Likely due to Hudson job not being defined (or, possibly network issues).<br />${line.separator}" |
| file="${postingDirectory}/TEST_INVOCATION_FAILED.html" |
| append="true" /> |
| |
| <echo |
| message="ERROR: Invocation of Curl did not return 0 return code for ${job}." /> |
| <echo |
| message="= = = standard out = = ${line.separator}${output}" /> |
| <echo |
| message="= = = standard err = = ${line.separator}${errorOutput}${line.separator}${line.separator}" /> |
| <!-- We don't want to fail automatically here, since just one machine may be "offline". --> |
| <echo message="Curl invocation failed. See ${postingDirectory}/TEST_INVOCATION_FAILED.html" /> |
| </target> |
| |
| <target |
| name="triggerHudsonPerfTests" |
| depends="init"> |
| |
| <!-- |
| baseURL used to be "required parameter" for Hudson job, but seemed overly complicated so |
| I compute all this later (based on stream and id) but, I've learned, one disadvantage is this |
| restricts test code locations to "downloads". There might be times we want to do from "build" |
| locations, or similar. Not to mention, other, internal test systems someday. |
| |
| <property |
| name="baseURL" |
| value="http://download.eclipse.org/eclipse/downloads/${dropsDirSegment}/${buildId}" /> |
| --> |
| |
| <!-- Hudson jobs currently have 3 required parameters --> |
| <property |
| name="JSON_buildId" |
| value="{"name":"buildId","value":"${buildId}"}" /> |
| <property |
| name="JSON_eclipseStream" |
| value="{"name":"eclipseStream","value":"${eclipseStream}"}" /> |
| <property |
| name="JSON_EBUILDER_HASH" |
| value="{"name":"EBUILDER_HASH","value":"${EBUILDER_HASH}"}" /> |
| |
| <property |
| name="JSON_defaultTestSuite" |
| value="{"name":"testToRun","value":"selectPerformance"}" /> |
| |
| <property |
| name="json" |
| value="{"parameter":[${JSON_buildId},${JSON_eclipseStream},${JSON_EBUILDER_HASH},${JSON_defaultTestSuite}]}" /> |
| |
| <!-- TODO: "segment" varies by test, and/or environment ... must be an easier way? --> |
| <property |
| name="env.LINUX_PERF_SEGMENT" |
| value="releng" /> |
| |
| <echo message="env.HUDSON_PERF_PROTOCOL: ${env.HUDSON_PERF_PROTOCOL}" /> |
| <echo message="env.HUDSON_PERF_HOST: ${env.HUDSON_PERF_HOST}" /> |
| <echo message="env.HUDSON_PERF_PORT: ${env.HUDSON_PERF_PORT}" /> |
| <echo message="json for perf curl post: ${json}" /> |
| <echo message="${env.HUDSON_PERF_PROTOCOL}://${env.HUDSON_PERF_HOST}:${env.HUDSON_PERF_PORT}/${env.LINUX_PERF_SEGMENT}/job/${job}/build" /> |
| |
| <exec |
| executable="curl" |
| resultproperty="rcPerf" |
| outputproperty="perfOutput" |
| errorproperty="perfErrorOutput"> |
| <arg line="-X GET" /> |
| <arg |
| value="${env.HUDSON_PERF_PROTOCOL}://${env.HUDSON_PERF_HOST}:${env.HUDSON_PERF_PORT}/${env.LINUX_PERF_SEGMENT}/job/${job}/buildWithParameters?token=${env.HUDSON_TOKEN}&buildId=${buildId}&eclipseStream=${eclipseStream}&EBUILDER_HASH=${EBUILDER_HASH}" /> |
| <arg value="--fail" /> |
| </exec> |
| <echo message="DEBUG: rcPerf: ${rcPerf}" /> |
| <condition property="invocationNotOk"> |
| <not> |
| <equals |
| arg1="${rcPerf}" |
| arg2="0" /> |
| </not> |
| </condition> |
| <antcall target="checkInvocation"> |
| <param |
| name="returnCode" |
| value="${rcPerf}" /> |
| <param |
| name="job" |
| value="${job}" /> |
| <param |
| name="output" |
| value="${perfOutput}" /> |
| <param |
| name="errorOutput" |
| value="${perfErrorOutput}" /> |
| </antcall> |
| </target> |
| |
| |
| <target |
| name="init" |
| depends="initStreamVariables" |
| unless="invokeTestsJSONinitialized"> |
| |
| <property environment="env" /> |
| |
| <!-- posting directory should be passed in to us ... but, in case not |
| we will at least define it. |
| --> |
| <property |
| name="postingDirectory" |
| value="${basedir}/postingDirectory" /> |
| |
| <property |
| name="env.HUDSON_HOST" |
| value="ci.eclipse.org" /> |
| <property |
| name="env.HUDSON_PROTOCOL" |
| value="https" /> |
| <property |
| name="env.HUDSON_PORT" |
| value="443" /> |
| <property |
| name="env.HUDSON_ROOT_URI" |
| value="releng" /> |
| <property |
| name="env.HUDSON_WIN32_ROOT_URI" |
| value="shared" /> |
| <property |
| name="env.HUDSON_PERF_HOST" |
| value="ci.eclipse.org" /> |
| <property |
| name="env.HUDSON_PERF_PROTOCOL" |
| value="https" /> |
| <property |
| name="env.HUDSON_PERF_PORT" |
| value="443" /> |
| |
| <script language="javascript"> |
| <![CDATA[ |
| var buildId = project.getProperty("buildId"); |
| var pattern = new RegExp(/^([IMXYPNSRU])(\d{8})-(\d{4})$/); |
| |
| var sArray = pattern.exec(buildId); |
| // sArray 0 is "whole match" |
| project.setProperty("buildType", sArray[1]); |
| ]]> |
| </script> |
| <echo message="Computed buildType of ${buildType} from ${buildId}" /> |
| <property |
| name="invokeTestsJSONinitialized" |
| value="true" /> |
| </target> |
| |
| <target name="initStreamVariables"> |
| |
| <fail |
| unless="eclipseStream" |
| message="eclipseStream must be provided by caller" /> |
| <condition property="streamOK"> |
| <matches |
| pattern="\d+\.\d+\.\d+" |
| string="${eclipseStream}" /> |
| </condition> |
| <fail |
| message="eclipseStream variable had unexpected format. Should be digit.digit.digit, but was ${eclipseStream}" |
| unless="streamOK" /> |
| <script language="javascript"> |
| <![CDATA[ |
| var eclipseStream = project.getProperty("eclipseStream"); |
| var pattern = new |
| RegExp(/(\d+)\.(\d+)\.(\d+)/); |
| |
| var sArray = pattern.exec(eclipseStream); |
| // sArray[0] is "whole match" |
| project.setProperty("eclipseStreamMajor", sArray[1]); |
| project.setProperty("eclipseStreamMinor", sArray[2]); |
| project.setProperty("eclipseStreamService", sArray[3]); |
| ]]> |
| </script> |
| |
| </target> |
| |
| </project> |