From 811d6dc057b74c5ddcb4a6ec85cd7fc1495c45e8 Mon Sep 17 00:00:00 2001 From: Petr Cervenka Date: Wed, 29 Apr 2015 11:51:00 +0800 Subject: [PATCH] Adding Flowdock integration Closed #954 --- PHPCI/Plugin/FlowdockNotify.php | 73 +++++++++++++++++++++++++++++++++ composer.json | 3 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 PHPCI/Plugin/FlowdockNotify.php diff --git a/PHPCI/Plugin/FlowdockNotify.php b/PHPCI/Plugin/FlowdockNotify.php new file mode 100644 index 00000000..8ac9f2ab --- /dev/null +++ b/PHPCI/Plugin/FlowdockNotify.php @@ -0,0 +1,73 @@ + + * @package PHPCI + * @subpackage Plugins + */ +class FlowdockNotify implements \PHPCI\Plugin +{ + private $api_key; + private $email; + const MESSAGE_DEFAULT = 'Build %BUILD% has finished for commit %SHORT_COMMIT% + (%COMMIT_EMAIL%)> on branch %BRANCH%'; + + /** + * Set up the plugin, configure options, etc. + * @param Builder $phpci + * @param Build $build + * @param array $options + * @throws \Exception + */ + public function __construct(Builder $phpci, Build $build, array $options = array()) + { + $this->phpci = $phpci; + $this->build = $build; + if (!is_array($options) || !isset($options['api_key'])) { + throw new \Exception('Please define the api_key for Flowdock Notify plugin!'); + } + $this->api_key = trim($options['api_key']); + $this->message = isset($options['message']) ? $options['message'] : self::MESSAGE_DEFAULT; + $this->email = isset($options['email']) ? $options['email'] : 'PHPCI'; + } + + /** + * Run the Flowdock plugin. + * @return bool + * @throws \Exception + */ + public function execute() + { + + $message = $this->phpci->interpolate($this->message); + $successfulBuild = $this->build->isSuccessful() ? 'Success' : 'Failed'; + $push = new Push($this->api_key); + $flowMessage = TeamInboxMessage::create() + ->setSource("PHPCI") + ->setFromAddress($this->email) + ->setFromName($this->build->getProject()->getTitle()) + ->setSubject($successfulBuild) + ->setTags(['#ci']) + ->setLink($this->build->getBranchLink()) + ->setContent($message); + + if (!$push->sendTeamInboxMessage($flowMessage, array('connect_timeout' => 5000, 'timeout' => 5000))) { + throw new \Exception(sprintf('Flowdock Failed: %s', $flowMessage->getResponseErrors())); + } + return true; + } +} diff --git a/composer.json b/composer.json index eadd9a81..3de523e5 100644 --- a/composer.json +++ b/composer.json @@ -76,6 +76,7 @@ "behat/behat": "Behat BDD Testing", "hipchat/hipchat-php": "Hipchat integration", "phptal/phptal": "PHPTAL templating engine", - "maknz/slack": "Slack integration" + "maknz/slack": "Slack integration", + "mremi/flowdock": "Flowdock integration" } }