@ -10,13 +10,112 @@ class FacebookArcanistConfiguration extends ArcanistConfiguration {
ArcanistBaseWorkflow $workflow,
$error_code) {
if ($command == 'diff' & & !$workflow->isRawDiffSource()) {
$this->maybePushToJenkins($workflow);
$this->startTestsInJenkins($workflow);
$this->startTestsInSandcastle($workflow);
}
}
//////////////////////////////////////////////////////////////////////
/* Run tests in sandcastle */
function getSteps($diffID, $username) {
$arcrc_content = exec("cat ~/.arcrc | base64 -w0");
$setup = array(
"name" => "Setup arcrc",
"shell" => "echo " . $arcrc_content . " | base64 --decode > ~/.arcrc",
"user" => "root"
);
$fix_permission = array(
"name" => "Fix environment",
"shell" => "chmod 600 ~/.arcrc",
"user" => "root"
);
$fix_git_ignore = array(
"name" => "Fix git ignore",
"shell" => "echo fbcode >> .git/info/exclude",
"user" => "root"
);
$patch = array(
"name" => "Patch " . $diffID,
"shell" => "HTTPS_PROXY=fwdproxy:8080 arc --arcrc-file ~/.arcrc "
. "patch D" . $diffID . " || rm -f ~/.arcrc",
"user" => "root"
);
$cleanup = array(
"name" => "Arc cleanup",
"shell" => "rm -f ~/.arcrc",
"user" => "root"
);
$steps[] = $setup;
$steps[] = $fix_permission;
$steps[] = $fix_git_ignore;
$steps[] = $patch;
$steps[] = $cleanup;
$tests = array(
"unit", "clang_unit", "tsan", "asan", "valgrind"
);
foreach ($tests as $test) {
$run_test = array(
"name" => "Run " . $test,
"shell" => "EMAIL=" . $username . "@fb.com "
. "./build_tools/rocksdb-lego-determinator " . $test,
"user" => "root",
"determinator" => true
);
$steps[] = $run_test;
}
return $steps;
}
function startTestsInSandcastle($workflow) {
$diffID = $workflow->getDiffId();
$username = exec("whoami");
if ($diffID == null || $username == null) {
return;
}
$arg = array(
"name" => "RocksDB diff D" . $diffID . "testing for " . $username,
"steps" => $this->getSteps($diffID, $username)
);
$url = 'https://interngraph.intern.facebook.com/sandcastle/generate?'
.'command=SandcastleUniversalCommand'
.'& vcs=rocksdb-git& revision=origin%2Fmaster& type=lego'
.'& user=krad& alias=ci-util'
.'& command-args=' . urlencode(json_encode($arg));
$cmd = 'https_proxy= HTTPS_PROXY= curl -s -k -F app=659387027470559 '
. '-F token=AeO_3f2Ya3TujjnxGD4 "' . $url . '"';
echo "\n====================================================== \n";
echo "Scheduling sandcastle job for D" . $diffID . " for " . $username;
echo "\n";
echo "Please follow the URL for details on the job. \n";
echo "An email will be sent to " . $username . "@fb.com on failure. \n";
echo "\n";
echo "Job details: \n";
$output = shell_exec($cmd);
echo $output;
echo "\n====================================================== \n";
}
//////////////////////////////////////////////////////////////////////
/* Send off builds to jenkins */
function maybePushToJenkins($workflow) {
function startTestsIn Jenkins($workflow) {
$diffID = $workflow->getDiffID();
if ($diffID === null) {
return;