blob: 262c249b70f228d0719d41f0dd61304b457a17d2 [file] [log] [blame]
<?php
/* Copyright (c) 2007 IBM, made available under EPL v1.0
* Contributors Nick Boldt
*
* The common parameter parsing module for the REST web-api
* for retrieving data from the database. This is NOT part
* of the public web-api.
*
* Run this script on your build server or on www.eclipse.org (warnings will be thrown re: exec() call in downloads-scripts.php#getTestResultsJUnitXML())
* TODO: fix path errors if run on build.eclipse.org
*
* parent=name, eg., modeling or NONE
* top=name, eg., emf, gmf
* project=name, eg., sdo, gmf
* version=x.y.z
* buildID=AyyyymmddHHMM, where A = {N, I, M, S, R}
*
* All 4 values are required.
*
* Test cases:
*
* GEF, with parent=NONE
* http://emf.torolab.ibm.com/modeling/build/checkBuildStatus.php?parent=NONE&top=tools&project=gef&buildID=I200809091900&version=3.5.0
*
* modeling.emf.*, on both servers:
* http://emf.torolab.ibm.com/modeling/build/checkBuildStatus.php?parent=modeling&top=emf&project=emf&buildID=N200809161300&version=2.5.0
* http://emft.eclipse.org/modeling/build/checkBuildStatus.php?parent=modeling&top=emf&project=query&buildID=R200806091744&version=1.2.0
* http://emft.eclipse.org/modeling/build/checkBuildStatus.php?parent=modeling&top=gmf&project=gmf&version=2.1.2&buildID=M200809162010
*/
ini_set('display_errors', 1); ini_set('error_reporting', E_ALL);
$isEMFserver = (preg_match("/^emf(?:\.torolab\.ibm\.com)$/", $_SERVER["SERVER_NAME"]));
$isBuildServer = (preg_match("/^(emft|modeling|build)\.eclipse\.org$|^localhost$/", $_SERVER["SERVER_NAME"])) || $isEMFserver;
$isBuildDotEclipseServer = $_SERVER["SERVER_NAME"] == "build.eclipse.org";
$isWWWserver = (preg_match("/^(?:www.|)eclipse.org$/", $_SERVER["SERVER_NAME"]));
$isEclipseCluster = (preg_match("/^(?:www.||download.|download1.|build.)eclipse.org$/", $_SERVER["SERVER_NAME"]));
$debug = (isset ($_GET["debug"]) && preg_match("/^\d+$/", $_GET["debug"]) ? $_GET["debug"] : -1);
$writableRoot = ($isBuildServer ? $_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/" : "/home/data/httpd/writable/www.eclipse.org/");
$writableBuildRoot = $isBuildDotEclipseServer ? "/opt/public/modeling" : "/home/www-data";
$data = loadHttpGetVars();
if ( (isset($data["parent"]) && $data["parent"] == "NONE" ) || // no parent
( !isset($data["top"]) && isset($data["project"]) ) || // no top
( (!isset($data["parent"]) || !$data["parent"]) && isset($data["top"]) && isset($data["project"]) && $data["top"] == $data["project"]) ) // no parent & top == project
{
$PR = $data["project"]; # GEF
}
else
{
$PR = (isset($data["parent"]) && $data["parent"] != "NONE" ? $data["parent"] . "/" : "") . $data["top"]; # modeling/mdt
}
#print "<i>$PR</i><br>";
$data["project"] = isset($data["project"]) ? $data["project"] : "";
$projct = $data["project"];
$html = isset($_GET["html"]);
require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/buildServer-common.php");
require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/scripts.php");
require_once($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/downloads-scripts.php");
$hadLoadDirSimpleError = 1;
if (isset($data["project"]))
{
$file = $_SERVER["DOCUMENT_ROOT"] . "/$PR/downloads/extras-" . $data["project"] . ".php";
if (file_exists($file))
{
include_once($file);
}
}
if ($debug<0) header($html ? "Content-Type: text/html\n\n" : "Content-Type: text/plain\n\n");
if (sizeof($data)<4)
{
echo "Must specify parent project, top project, sub project (component), version, and buildID:\n\n" .
" " . $_SERVER['SCRIPT_NAME'] . "?parent=NONE&top=gef&project=&version=3.4.0&buildID=R200706201159\n" .
" " . $_SERVER['SCRIPT_NAME'] . "?parent=modeling&top=emf&project=query&version=1.1.0&buildID=R200706201159&html\n";
exit;
}
$unknown=true;
$dropsDir = getPWD($data["project"] . "/" . "downloads/drops/", false, $debug > 0);
$buildDetails = "Build Details\t" . "http://" . $_SERVER["SERVER_NAME"] . "/" . $PR . "/downloads/?project=$projct&amp;sortBy=date&amp;hlbuild=" . $data["buildID"] . "#" . $data["buildID"] . "\n\n";
if (is_readable($dropsDir . $data["version"] . "/" . $data["buildID"]))
{
$extraTestsResults = getExtraTestsResults($data["version"], $data["buildID"], $html);
$buildResults = showBuildResults($dropsDir,
$data["version"] . "/" . $data["buildID"] . "/", $html);
if ($html)
{
print $buildResults[0];
print isset($extraTestsResults) && isset($extraTestsResults[0]) && sizeof($extraTestsResults[0]) > 0 ? implode(" | ", $extraTestsResults[0]) : "";
print "<br/>\n";
print '<a href="' . $buildResults[1] . '">Test Results</a>' . "<br/>\n";
print '<a href="' . $buildResults[2] . '">Build Log</a>' . "<br/>\n";
}
else
{
print "Status\t" . $buildResults[0];
print isset($extraTestsResults) && isset($extraTestsResults[0]) && isset($extraTestsResults[0][0]) ? $extraTestsResults[0][0] : "";
print "\n\n";
print "JUnit Results\t" . $buildResults[1] . "\n\n";
print isset($extraTestsResults) && isset($extraTestsResults[1]) && isset($extraTestsResults[1][0]) && $extraTestsResults[1][0] ? $extraTestsResults[1][0] . "\n" : "";
print "Build Log\t" . $buildResults[2] . "\n\n";
print $buildDetails;
}
$unknown=false;
}
if ($unknown)
{
print "Status\tUNKNOWN" . ($debug > 0 ? "\t(" . $dropsDir . $data["version"] . "/" . $data["buildID"] . ")" : "") . "\n\n";
print $buildDetails;
}
/**********************************************************************************************************************************/
function loadHttpGetVars()
{
global $debug;
$data = array();
$input_patterns = array(
/* regex => array(http get vars) */
"#(NONE|[a-z]+)#" => array("parent"),
"#([a-z0-9]+)#" => array("top","project"),
"#([0-9\.]{5})#" => array("version"),
"#([NIMSR][0-9]{12})#" => array("buildID"),
);
foreach($input_patterns as $regex => $httpfieldnames)
{
foreach ($httpfieldnames as $httpfieldname)
{
$param = isset($_GET[$httpfieldname]) ? $_GET[$httpfieldname] : null;
if ($debug > 0)
{
print "<pre> [$regex][$httpfieldname] Got \$param = $param </pre>\n";
}
if ($param !== null)
{
if (preg_match($regex, $param, $matches))
{
$data[$httpfieldname] = $param;
}
}
}
}
return $data;
}
?>