Skip to content

Commit

Permalink
implement bitbucket webhooks
Browse files Browse the repository at this point in the history
this fixes issue dancryer#1015 and adds support for the new bitbucket webhooks
  • Loading branch information
wodka committed Jul 24, 2015
1 parent d698b11 commit 9e42bf2
Showing 1 changed file with 59 additions and 1 deletion.
60 changes: 59 additions & 1 deletion PHPCI/Controller/WebhookController.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,69 @@ public function handleAction($action, $actionParams)
}

/**
* Called by Bitbucket POST service.
* Called by Bitbucket.
*/
public function bitbucket($projectId)
{
$project = $this->fetchProject($projectId, 'bitbucket');

/*
* support both old services and new webhooks
*/

if ($payload = $this->getParam('payload')) {
return $this->bitbucketService(json_decode($payload, true), $project);
}

$payload = json_decode(file_get_contents("php://input"), true);

if (empty($payload['push']['changes'])) {
/*
* invalid event from bitbucket
*/
return [
'status' => 'failed',
'commits' => []
];
}

return $this->bitbucketWebhook($payload, $project);
}

/**
* Bitbucket webhooks.
*/
protected function bitbucketWebhook($payload, $project)
{
$results = array();
$status = 'failed';
foreach ($payload['push']['changes'] as $commit) {
try {
$email = $commit['new']['target']['author']['raw'];
$email = substr($email, 0, strpos($email, '>'));
$email = substr($email, strpos($email, '<') + 1);

$results[$commit['new']['target']['hash']] = $this->createBuild(
$project,
$commit['new']['target']['hash'],
$commit['new']['name'],
$email,
$commit['new']['target']['message']
);
$status = 'ok';
} catch (Exception $ex) {
$results[$commit['new']['target']['hash']] = array('status' => 'failed', 'error' => $ex->getMessage());
}
}

return array('status' => $status, 'commits' => $results);
}

/**
* Bitbucket POST service.
*/
protected function bitbucketService($payload, $project)
{
$payload = json_decode($this->getParam('payload'), true);

$results = array();
Expand Down

0 comments on commit 9e42bf2

Please sign in to comment.