2017-10-29 21:10:26 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
require __DIR__ . '/config.php';
|
|
|
|
use PhpAmqpLib\Message\AMQPMessage;
|
|
|
|
|
|
|
|
# define('AMQP_DEBUG', true);
|
|
|
|
$connection = rabbitmq_conn();
|
|
|
|
$channel = $connection->channel();
|
|
|
|
$channel->basic_qos(null, 1, true);
|
|
|
|
|
2017-11-04 20:17:30 +00:00
|
|
|
|
2017-11-06 17:38:16 +00:00
|
|
|
$channel->exchange_declare('build-results', 'fanout', false, true, false);
|
|
|
|
$channel->queue_bind('build-results', 'build-results', '');
|
2017-11-04 20:17:30 +00:00
|
|
|
|
2017-10-29 21:10:26 +00:00
|
|
|
list($queueName, , ) = $channel->queue_declare('build-results',
|
|
|
|
false, true, false, false);
|
|
|
|
|
|
|
|
function runner($msg) {
|
|
|
|
$body = json_decode($msg->body);
|
|
|
|
|
2017-11-11 00:54:09 +00:00
|
|
|
$num = $body->pr->number;
|
2017-10-29 21:10:26 +00:00
|
|
|
if ($body->success) {
|
|
|
|
echo "yay! $num passed!\n";
|
|
|
|
} else {
|
2017-11-04 15:57:34 +00:00
|
|
|
echo "Yikes, $num failed\n";
|
2017-10-29 21:10:26 +00:00
|
|
|
}
|
|
|
|
|
2017-11-11 00:54:09 +00:00
|
|
|
reply_to_issue($body, implode("\n", $body->output), $body->success, $body->system);
|
2017-10-29 21:10:26 +00:00
|
|
|
|
|
|
|
var_dump($body->success);
|
|
|
|
|
|
|
|
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
|
|
|
|
}
|
|
|
|
|
2017-11-11 00:54:09 +00:00
|
|
|
function reply_to_issue($body, $output, $success, $system) {
|
|
|
|
$num = $body->pr->number;
|
|
|
|
$owner = $body->repo->owner;
|
|
|
|
$repo = $body->repo->name;
|
2017-11-04 15:58:04 +00:00
|
|
|
$event = $success ? 'APPROVE' : 'COMMENT';
|
|
|
|
$passfail = $success ? "Success" : "Failure";
|
|
|
|
|
|
|
|
echo "Sending $event to $owner/$repo#$num with " . $passfail . " on $system\n";
|
|
|
|
|
2017-10-29 21:10:26 +00:00
|
|
|
$client = gh_client();
|
|
|
|
$pr = $client->api('pull_request')->show(
|
2017-11-04 15:58:04 +00:00
|
|
|
$owner,
|
|
|
|
$repo,
|
|
|
|
$num
|
2017-10-29 21:10:26 +00:00
|
|
|
);
|
2017-11-04 15:58:04 +00:00
|
|
|
|
|
|
|
if ($pr['state'] == 'closed') {
|
|
|
|
$event = 'COMMENT';
|
|
|
|
}
|
|
|
|
|
2017-11-18 00:31:59 +00:00
|
|
|
// With multiple archs, it is better to not approve at all, since
|
|
|
|
// another arch may come in later with a failure.
|
|
|
|
// - By request of Domen
|
|
|
|
$event = 'COMMENT';
|
|
|
|
|
2017-11-11 00:54:09 +00:00
|
|
|
$sha = $body->pr->head_sha;
|
|
|
|
echo "On sha: $sha\n";
|
2017-11-04 15:58:04 +00:00
|
|
|
echo "Body:\n";
|
|
|
|
echo $output;
|
|
|
|
echo "\n\n";
|
2017-10-29 21:10:26 +00:00
|
|
|
|
2018-01-27 19:41:00 +00:00
|
|
|
$fullloglink = strtolower("https://logs.nix.gsc.io/?key=$owner/$repo.$num");
|
|
|
|
|
2017-10-29 21:10:26 +00:00
|
|
|
$client->api('pull_request')->reviews()->create(
|
2017-11-04 15:58:04 +00:00
|
|
|
$owner,
|
|
|
|
$repo,
|
|
|
|
$num,
|
2017-10-29 21:10:26 +00:00
|
|
|
array(
|
2018-01-28 14:55:02 +00:00
|
|
|
'body' =>
|
2018-01-28 19:52:22 +00:00
|
|
|
"$passfail on $system [(full log)]($fullloglink)\n\n".
|
|
|
|
"<details><summary>Partial log (click to expand)</summary><p>\n\n".
|
|
|
|
"```\n$output\n```\n".
|
|
|
|
"</p></details>\n\n",
|
2017-11-04 15:58:04 +00:00
|
|
|
'event' => $event,
|
2017-10-29 21:10:26 +00:00
|
|
|
'commit_id' => $sha,
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function outrunner($msg) {
|
2017-12-20 02:57:30 +00:00
|
|
|
return runner($msg);
|
2017-10-29 21:10:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$consumerTag = 'consumer' . getmypid();
|
|
|
|
$channel->basic_consume($queueName, $consumerTag, false, false, false, false, 'outrunner');
|
|
|
|
while(count($channel->callbacks)) {
|
|
|
|
$channel->wait();
|
|
|
|
}
|