public function didRunWorkflow($command, ArcanistBaseWorkflow $workflow, $error_code) { // Default options don't terminate on failure, but that's what we want. In // the current case we use assertions intentionally as "terminate on failure // invariants". assert_options(ASSERT_BAIL, true); assert($workflow); assert(strlen($command) > 0); if ($command == DIFF_COMMAND && !$workflow->isRawDiffSource()) { $diffID = $workflow->getDiffId(); // When submitting a diff this code path gets executed multiple times in // a row. We only care about the case when ID for the diff is provided // because that's what we need to apply the diff and trigger the tests. if (strlen($diffID) > 0) { assert(is_numeric($diffID)); startTestsInSandcastle(true, $workflow, $diffID); } } }
} $command = array("name" => $runName, "steps" => array()); $command["steps"][] = array("name" => "Generate determinator", "shell" => "echo " . $arg_encoded . " | base64 --decode | gzip -d" . " | base64 --decode", "determinator" => true, "user" => "root"); // Submit to Sandcastle. $url = 'https://interngraph.intern.facebook.com/sandcastle/generate?' . 'command=SandcastleUniversalCommand' . '&vcs=rocksdb-git&revision=origin%2Fmaster&type=lego' . '&user='******'&alias=rocksdb-precommit' . '&command-args=' . urlencode(json_encode($command)); // Fetch the configuration necessary to submit a successful HTTPS request. $sandcastle_config = getSandcastleConfig(); $app = $sandcastle_config[0]; $token = $sandcastle_config[1]; $cmd = 'https_proxy= HTTPS_PROXY= curl -s -k -F app=' . $app . ' ' . '-F token=' . $token . ' "' . $url . '"'; $output = shell_exec($cmd); assert(strlen($output) > 0); // Extract Sandcastle URL from the response. preg_match('/url": "(.+)"/', $output, $sandcastle_url); assert(count($sandcastle_url) > 0, "Unable to submit Sandcastle request."); assert(strlen($sandcastle_url[1]) > 0, "Unable to extract Sandcastle URL."); if ($applyDiff) { echo "\nSandcastle URL: " . $sandcastle_url[1] . "\n"; // Ask Phabricator to display it on the diff UI. postURL($diffID, $sandcastle_url[1]); } else { echo "Continuous integration started Sandcastle tests. You can look at "; echo "the progress at:\n" . $sandcastle_url[1] . "\n"; } } // Continuous run cript will set the environment variable and based on that // we'll trigger the execution of tests in Sandcastle. In that case we don't // need to apply any diffs and there's no associated workflow either. if (getenv(ENV_POST_RECEIVE_HOOK)) { startTestsInSandcastle(false, NULL, NULL); }