Как обновить записи bugzilla с GitHub?

Я действительно хочу иметь возможность добавлять ссылку на фиксацию всякий раз, когда в сообщении фиксации используется номер ошибки. Возможность закрывать ошибки и т. д. была бы плюсом, но на самом деле выходит за рамки моих потребностей.

Обычно мы добавляем номер ошибки в виде xxxx в сообщение фиксации.

Мой текущий план состоял в том, чтобы использовать скрипт email_in.pl, который поставляется с Bugzilla, и хук после фиксации электронной почты на github. Ловушка электронной почты отправляет полезную нагрузку с подробностями каждой фиксации. Я мог бы проанализировать это, перенаправив его на сценарий email_in.pl. Это лучший подход? Неужели никто этого еще не сделал?

Буду признателен за любую помощь/советы/ссылки.


person pocketfullofcheese    schedule 15.07.2011    source источник
comment
Как насчет использования перехвата URL после получения?   -  person Glen Solsberry    schedule 15.07.2011
comment
Каково ваше предложение? Что я пишу скрипт для анализа JSON и отправки электронной почты?   -  person pocketfullofcheese    schedule 15.07.2011
comment
Что у вас есть сообщение github на вашем сервере bugzilla и использование JSONRPC, обновите ошибку таким образом. Не уверен, что это сработает, но по идее должно...   -  person Glen Solsberry    schedule 16.07.2011
comment
Спасибо. JSONRPC, вероятно, сработал бы, просто проанализировав полезную нагрузку и нажав URL-адрес. Поскольку у меня был настроен email_in.pl, но не JSON API, я использовал то, что вы видите ниже. Спасибо за советы.   -  person pocketfullofcheese    schedule 17.07.2011


Ответы (1)


Поскольку у меня уже был настроен email_in.pl, я решил написать небольшой скрипт, который анализировал бы полезную нагрузку хука после получения URL и отправлял его в виде электронного письма на bugzilla. Таким образом, хук post-receive попадет на URL-адрес, который делает следующее:

<?php
$payload = json_decode($_REQUEST['payload']);

if ($payload) {
    // assumes you want to process all commits (we only commit to the master branch)
    // but you may want to add some other conditionals above.
    $commits = $payload->commits;

    // there may be many commits per payload
    foreach ($commits as $commit) {
       $message = $commit->message;
       preg_match('/^(\*(\d+)\*)(.*)/i', $message, $matches);
       // The commit message must match the above regex
       // i.e. *1234* commit message
       if ( !(is_array($matches) && count($matches) == 4) )
          continue;

        $bugNumber = $matches[2];
        $comment = trim($matches[3]);
        $url = $commit->url;

        // get the author info
        $author = $commit->author;
        $authorName = $author->name;
        // assumes github email address exists in bugzilla.
        $authorEmail = $author->email;

        // construct the email
        $subject = "[Bug $bugNumber]";
        $body = "$comment\n$url";
        $header = "From: $authorName <$authorEmail>";
        // $bugzillaEmail = '[email protected]
        mail($bugzillaEmail, $subject, $body, $header);
}
?>
person pocketfullofcheese    schedule 17.07.2011