Refactored plugins

This commit is contained in:
Dmitry Khomutov 2016-07-11 22:00:04 +06:00
parent 1a3a0a1993
commit 16a5add859
45 changed files with 407 additions and 1227 deletions

1
.gitignore vendored
View file

@ -2,6 +2,5 @@
/composer.phar
/runtime
/app/loggerconfig.php
/app/pluginconfig.php
/app/config.yml
/public/assets/vendor

View file

@ -1,23 +0,0 @@
<?php
return function (PHPCensor\Plugin\Util\Factory $factory) {
$factory->registerResource(
// This function will be called when the resource is needed.
function() {
return [
'Foo' => "Stuff",
'Bar' => "More Stuff"
];
},
// In addition to the function for building the resource the system
// also needs to be told when to load the resource. Either or both
// of the following arguments can be used (null to ignore)
// This resource will only be given when the argument name is:
"ResourceArray",
// The resource will only be given when the type hint is:
PHPCensor\Plugin\Util\Factory::TYPE_ARRAY
);
};

View file

@ -110,9 +110,7 @@ class Builder implements LoggerAwareInterface
$this->buildLogger = new BuildLogger($logger, $build);
$pluginFactory = $this->buildPluginFactory($build);
$pluginFactory->addConfigFromFile(APP_DIR . "pluginconfig.php");
$this->pluginExecutor = new Plugin\Util\Executor($pluginFactory, $this->buildLogger);
$this->pluginExecutor = new Plugin\Util\Executor($this, $build, $this->buildLogger);
$executorClass = 'PHPCensor\Helper\UnixCommandExecutor';
if (IS_WIN) {
@ -391,52 +389,4 @@ class Builder implements LoggerAwareInterface
{
$this->buildLogger->logDebug($message);
}
/**
* Returns a configured instance of the plugin factory.
*
* @param Build $build
* @return PluginFactory
*/
private function buildPluginFactory(Build $build)
{
$pluginFactory = new PluginFactory();
$self = $this;
$pluginFactory->registerResource(
function () use ($self) {
return $self;
},
null,
'PHPCensor\Builder'
);
$pluginFactory->registerResource(
function () use ($build) {
return $build;
},
null,
'PHPCensor\Model\Build'
);
$logger = $this->logger;
$pluginFactory->registerResource(
function () use ($logger) {
return $logger;
},
null,
'Psr\Log\LoggerInterface'
);
$pluginFactory->registerResource(
function () use ($self) {
$factory = new MailerFactory($self->getSystemConfig('php-censor'));
return $factory->getSwiftMailerFromConfig();
},
null,
'Swift_Mailer'
);
return $pluginFactory;
}
}

View file

@ -9,11 +9,46 @@
namespace PHPCensor;
use PHPCI\Model\Build;
/**
* PHPCI Plugin Interface - Used by all build plugins.
* PHPCI Plugin class - Used by all build plugins.
*
* @author Dan Cryer <dan@block8.co.uk>
*/
interface Plugin
abstract class Plugin
{
public function execute();
/**
* @var \PHPCI\Builder
*/
protected $phpci;
/**
* @var \PHPCI\Model\Build
*/
protected $build;
/**
* @var array
*/
protected $options;
/**
* @param Builder $phpci
* @param Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->options = $options;
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* @return boolean
*/
abstract public function execute();
}

View file

@ -16,24 +16,22 @@ use PHPCensor\Plugin;
/**
* Atoum plugin, runs Atoum tests within a project.
*
* @package PHPCensor\Plugin
*/
class Atoum implements Plugin
class Atoum extends Plugin
{
private $args;
private $config;
private $directory;
protected $executable;
protected $args;
protected $config;
protected $directory;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
if (isset($options['executable'])) {
$this->executable = $this->phpci->buildPath . DIRECTORY_SEPARATOR.$options['executable'];

View file

@ -17,32 +17,23 @@ use PHPCensor\Plugin;
/**
* Behat BDD Plugin
*
* @author Dan Cryer <dan@block8.co.uk>
* @package PHPCI
* @subpackage Plugins
*/
class Behat implements Plugin
class Behat extends Plugin
{
protected $phpci;
protected $build;
protected $features;
protected $executable;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->features = '';
if (isset($options['executable'])) {
@ -54,8 +45,6 @@ class Behat implements Plugin
if (!empty($options['features'])) {
$this->features = $options['features'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
@ -63,7 +52,7 @@ class Behat implements Plugin
*/
public function execute()
{
$curdir = getcwd();
$current_dir = getcwd();
chdir($this->phpci->buildPath);
$behat = $this->executable;
@ -75,7 +64,7 @@ class Behat implements Plugin
}
$success = $this->phpci->executeCommand($behat . ' %s', $this->features);
chdir($curdir);
chdir($current_dir);
list($errorCount, $data) = $this->parseBehatOutput();

View file

@ -21,31 +21,28 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Campfire implements Plugin
class Campfire extends Plugin
{
private $url;
private $authToken;
private $userAgent;
private $cookie;
private $verbose;
private $roomId;
protected $url;
protected $authToken;
protected $userAgent;
protected $cookie;
protected $verbose;
protected $roomId;
protected $message;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* @throws \Exception
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->message = $options['message'];
$this->userAgent = "PHP Censor/1.0";
$this->cookie = "php-censor-cookie";
$buildSettings = $phpci->getConfig('build_settings');
$buildSettings = $this->phpci->getConfig('build_settings');
if (isset($buildSettings['campfire'])) {
$campfire = $buildSettings['campfire'];

View file

@ -20,31 +20,18 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class CleanBuild implements Plugin
class CleanBuild extends Plugin
{
protected $remove;
protected $phpci;
protected $build;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->remove = isset($options['remove']) && is_array($options['remove']) ? $options['remove'] : [];
parent::__construct($phpci, $build, $options);
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
$this->remove = isset($options['remove']) && is_array($options['remove']) ? $options['remove'] : [];
}
/**

View file

@ -25,17 +25,11 @@ use PHPCensor\ZeroConfigPlugin;
* @package PHPCI
* @subpackage Plugins
*/
class Codeception implements Plugin, ZeroConfigPlugin
class Codeception extends Plugin implements ZeroConfigPlugin
{
/** @var string */
protected $args = '';
/** @var Builder */
protected $phpci;
/** @var Build */
protected $build;
/**
* @var string $ymlConfigFile The path of a yml config for Codeception
*/
@ -46,6 +40,28 @@ class Codeception implements Plugin, ZeroConfigPlugin
*/
protected $path;
/**
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
parent::__construct($phpci, $build, $options);
$this->path = 'tests' . DIRECTORY_SEPARATOR . '_output' . DIRECTORY_SEPARATOR;
if (empty($options['config'])) {
$this->ymlConfigFile = self::findConfigFile($this->phpci->buildPath);
} else {
$this->ymlConfigFile = $options['config'];
}
if (isset($options['args'])) {
$this->args = (string) $options['args'];
}
if (isset($options['path'])) {
$this->path = $options['path'];
}
}
/**
* @param $stage
* @param Builder $builder
@ -75,33 +91,6 @@ class Codeception implements Plugin, ZeroConfigPlugin
return null;
}
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->path = 'tests' . DIRECTORY_SEPARATOR . '_output' . DIRECTORY_SEPARATOR;
if (empty($options['config'])) {
$this->ymlConfigFile = self::findConfigFile($this->phpci->buildPath);
} else {
$this->ymlConfigFile = $options['config'];
}
if (isset($options['args'])) {
$this->args = (string) $options['args'];
}
if (isset($options['path'])) {
$this->path = $options['path'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Runs Codeception tests
*/
@ -125,18 +114,18 @@ class Codeception implements Plugin, ZeroConfigPlugin
{
$this->phpci->logExecOutput(false);
$codecept = $this->phpci->findBinary('codecept');
$codeception = $this->phpci->findBinary('codecept');
if (!$codecept) {
if (!$codeception) {
$this->phpci->logFailure(Lang::get('could_not_find', 'codecept'));
return false;
}
$cmd = 'cd "%s" && ' . $codecept . ' run -c "%s" --xml ' . $this->args;
$cmd = 'cd "%s" && ' . $codeception . ' run -c "%s" --xml ' . $this->args;
if (IS_WIN) {
$cmd = 'cd /d "%s" && ' . $codecept . ' run -c "%s" --xml ' . $this->args;
$cmd = 'cd /d "%s" && ' . $codeception . ' run -c "%s" --xml ' . $this->args;
}
$configPath = $this->phpci->buildPath . $configPath;

View file

@ -12,6 +12,8 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPlugin;
/**
* Composer Plugin - Provides access to Composer functionality.
@ -19,46 +21,23 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class Composer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
class Composer extends Plugin implements ZeroConfigPlugin
{
protected $directory;
protected $action;
protected $preferDist;
protected $phpci;
protected $build;
protected $nodev;
protected $ignorePlatformReqs;
protected $preferSource;
/**
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
public static function canExecute($stage, Builder $builder, Build $build)
{
$path = $builder->buildPath . DIRECTORY_SEPARATOR . 'composer.json';
if (file_exists($path) && $stage == 'setup') {
return true;
}
return false;
}
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$path = $phpci->buildPath;
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$path = $this->phpci->buildPath;
$this->directory = $path;
$this->action = 'install';
$this->preferDist = false;
@ -90,8 +69,24 @@ class Composer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
if (array_key_exists('ignore_platform_reqs', $options)) {
$this->ignorePlatformReqs = (bool)$options['ignore_platform_reqs'];
}
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
/**
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
public static function canExecute($stage, Builder $builder, Build $build)
{
$path = $builder->buildPath . DIRECTORY_SEPARATOR . 'composer.json';
if (file_exists($path) && $stage == 'setup') {
return true;
}
return false;
}
/**

View file

@ -20,30 +20,23 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class CopyBuild implements Plugin
class CopyBuild extends Plugin
{
protected $directory;
protected $ignore;
protected $wipe;
protected $phpci;
protected $build;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$path = $phpci->buildPath;
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$path = $this->phpci->buildPath;
$this->directory = isset($options['directory']) ? $options['directory'] : $path;
$this->wipe = isset($options['wipe']) ? (bool)$options['wipe'] : false;
$this->ignore = isset($options['respect_ignore']) ? (bool)$options['respect_ignore'] : false;
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -20,24 +20,20 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Deployer implements Plugin
class Deployer extends Plugin
{
protected $webhookUrl;
protected $reason;
protected $updateOnly;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->reason = 'PHP Censor Build #%BUILD% - %COMMIT_MESSAGE%';
parent::__construct($phpci, $build, $options);
$this->reason = 'PHP Censor Build #%BUILD% - %COMMIT_MESSAGE%';
if (isset($options['webhook_url'])) {
$this->webhookUrl = $options['webhook_url'];
}
@ -45,7 +41,7 @@ class Deployer implements Plugin
if (isset($options['reason'])) {
$this->reason = $options['reason'];
}
$this->updateOnly = isset($options['update_only']) ? (bool) $options['update_only'] : true;
}

View file

@ -26,38 +26,8 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Email implements Plugin
class Email extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var array
*/
protected $options;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->options = $options;
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Send a notification mail.
*

View file

@ -20,34 +20,17 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Env implements Plugin
class Env extends Plugin
{
protected $phpci;
protected $build;
protected $env_vars;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->env_vars = $options;
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Adds the specified environment variables to the builder environment
*/
public function execute()
{
$success = true;
foreach ($this->env_vars as $key => $value) {
foreach ($this->options as $key => $value) {
if (is_numeric($key)) {
// This allows the developer to specify env vars like " - FOO=bar" or " - FOO: bar"
$env_var = is_array($value)? key($value).'='.current($value): $value;

View file

@ -20,30 +20,28 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class FlowdockNotify implements Plugin
class FlowdockNotify extends Plugin
{
private $api_key;
private $email;
protected $api_key;
protected $email;
protected $message;
const MESSAGE_DEFAULT = 'Build %BUILD% has finished for commit <a href="%COMMIT_URI%">%SHORT_COMMIT%</a>
(%COMMIT_EMAIL%)> on branch <a href="%BRANCH_URI%">%BRANCH%</a>';
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* @throws \Exception
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
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'] : 'PHP Censor';
$this->email = isset($options['email']) ? $options['email'] : 'PHP Censor';
}
/**

View file

@ -20,27 +20,10 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Git implements Plugin
class Git extends Plugin
{
protected $phpci;
protected $build;
protected $actions = [];
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->actions = $options;
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Run the Git plugin.
* @return bool

View file

@ -19,36 +19,25 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Grunt implements Plugin
class Grunt extends Plugin
{
protected $directory;
protected $task;
protected $preferDist;
protected $phpci;
protected $build;
protected $grunt;
protected $gruntfile;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$path = $phpci->buildPath;
$this->build = $build;
$this->phpci = $phpci;
parent::__construct($phpci, $build, $options);
$path = $this->phpci->buildPath;
$this->directory = $path;
$this->task = null;
$this->grunt = $this->phpci->findBinary('grunt');
$this->task = null;
$this->grunt = $this->phpci->findBinary('grunt');
$this->gruntfile = 'Gruntfile.js';
// Handle options:
@ -67,8 +56,6 @@ class Grunt implements Plugin
if (isset($options['gruntfile'])) {
$this->gruntfile = $options['gruntfile'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -19,37 +19,26 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Gulp implements Plugin
class Gulp extends Plugin
{
protected $directory;
protected $task;
protected $preferDist;
protected $phpci;
protected $build;
protected $gulp;
protected $gulpfile;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$path = $phpci->buildPath;
$this->build = $build;
$this->phpci = $phpci;
parent::__construct($phpci, $build, $options);
$path = $this->phpci->buildPath;
$this->directory = $path;
$this->task = null;
$this->gulp = $this->phpci->findBinary('gulp');
$this->gulpfile = 'gulpfile.js';
$this->task = null;
$this->gulp = $this->phpci->findBinary('gulp');
$this->gulpfile = 'gulpfile.js';
// Handle options:
if (isset($options['directory'])) {
@ -67,8 +56,6 @@ class Gulp implements Plugin
if (isset($options['gulpfile'])) {
$this->gulpfile = $options['gulpfile'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -21,26 +21,25 @@ use HipChat\HipChat;
* @package PHPCI
* @subpackage Plugins
*/
class HipchatNotify implements Plugin
class HipchatNotify extends Plugin
{
protected $authToken;
protected $color;
protected $notify;
protected $userAgent;
protected $cookie;
protected $message;
protected $room;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* @throws \Exception
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->userAgent = "PHP Censor/1.0";
$this->cookie = "php-censor-cookie";
$this->cookie = "php-censor-cookie";
if (is_array($options) && isset($options['authToken']) && isset($options['room'])) {
$this->authToken = $options['authToken'];

View file

@ -20,10 +20,8 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Irc implements Plugin
class Irc extends Plugin
{
protected $phpci;
protected $build;
protected $message;
protected $server;
protected $port;
@ -31,36 +29,23 @@ class Irc implements Plugin
protected $nick;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->message = $options['message'];
$buildSettings = $phpci->getConfig('build_settings');
$buildSettings = $this->phpci->getConfig('build_settings');
if (isset($buildSettings['irc'])) {
$irc = $buildSettings['irc'];
$this->server = $irc['server'];
$this->port = $irc['port'];
$this->room = $irc['room'];
$this->nick = $irc['nick'];
$this->port = $irc['port'];
$this->room = $irc['room'];
$this->nick = $irc['nick'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -12,6 +12,7 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
/**
* PHP Lint Plugin - Provides access to PHP lint functionality.
@ -19,32 +20,21 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class Lint implements PHPCensor\Plugin
class Lint extends Plugin
{
protected $directories;
protected $recursive = true;
protected $ignore;
protected $phpci;
protected $build;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->directories = [''];
$this->ignore = $phpci->ignore;
$this->ignore = $this->phpci->ignore;
if (!empty($options['directory'])) {
$this->directories[] = $options['directory'];
@ -57,8 +47,6 @@ class Lint implements PHPCensor\Plugin
if (array_key_exists('recursive', $options)) {
$this->recursive = $options['recursive'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
@ -67,7 +55,7 @@ class Lint implements PHPCensor\Plugin
public function execute()
{
$this->phpci->quiet = true;
$success = true;
$success = true;
$php = $this->phpci->findBinary('php');

View file

@ -23,23 +23,8 @@ use b8\Database;
* @package PHPCI
* @subpackage Plugins
*/
class Mysql implements Plugin
class Mysql extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var array
*/
protected $queries = [];
/**
* @var string
*/
@ -56,16 +41,11 @@ class Mysql implements Plugin
protected $pass;
/**
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->queries = $options;
parent::__construct($phpci, $build, $options);
$config = Database::getConnection('write')->getDetails();
@ -73,7 +53,7 @@ class Mysql implements Plugin
$this->user = $config['user'];
$this->pass = $config['pass'];
$buildSettings = $phpci->getConfig('build_settings');
$buildSettings = $this->phpci->getConfig('build_settings');
if (!isset($buildSettings['mysql'])) {
return;
@ -90,8 +70,6 @@ class Mysql implements Plugin
if (array_key_exists('pass', $buildSettings['mysql'])) {
$this->pass = $buildSettings['mysql']['pass'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
@ -104,7 +82,7 @@ class Mysql implements Plugin
$opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
$pdo = new PDO('mysql:host=' . $this->host, $this->user, $this->pass, $opts);
foreach ($this->queries as $query) {
foreach ($this->options as $query) {
if (!is_array($query)) {
// Simple query
$pdo->query($this->phpci->interpolate($query));

View file

@ -19,29 +19,23 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class PackageBuild implements Plugin
class PackageBuild extends Plugin
{
protected $directory;
protected $filename;
protected $format;
protected $phpci;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$path = $phpci->buildPath;
$this->build = $build;
$this->phpci = $phpci;
parent::__construct($phpci, $build, $options);
$path = $this->phpci->buildPath;
$this->directory = isset($options['directory']) ? $options['directory'] : $path;
$this->filename = isset($options['filename']) ? $options['filename'] : 'build';
$this->format = isset($options['format']) ? $options['format'] : 'zip';
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -19,29 +19,30 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Pdepend implements Plugin
class Pdepend extends Plugin
{
protected $args;
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var string Directory which needs to be scanned
*/
protected $directory;
/**
* @var string File where the summary.xml is stored
*/
protected $summary;
/**
* @var string File where the chart.svg is stored
*/
protected $chart;
/**
* @var string File where the pyramid.svg is stored
*/
protected $pyramid;
/**
* @var string Location on the server where the files are stored. Preferably in the webroot for inclusion
* in the readme.md of the repository
@ -49,25 +50,19 @@ class Pdepend implements Plugin
protected $location;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->directory = isset($options['directory']) ? $options['directory'] : $phpci->buildPath;
$this->directory = isset($options['directory']) ? $options['directory'] : $this->phpci->buildPath;
$title = $phpci->getBuildProjectTitle();
$title = $this->phpci->getBuildProjectTitle();
$this->summary = $title . '-summary.xml';
$this->pyramid = $title . '-pyramid.svg';
$this->chart = $title . '-chart.svg';
$this->location = $this->phpci->buildPath . '..' . DIRECTORY_SEPARATOR . 'pdepend';
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -20,23 +20,8 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Pgsql implements Plugin
class Pgsql extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var array
*/
protected $queries = [];
/**
* @var string
*/
@ -53,17 +38,13 @@ class Pgsql implements Plugin
protected $pass;
/**
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->queries = $options;
parent::__construct($phpci, $build, $options);
$buildSettings = $phpci->getConfig('build_settings');
$buildSettings = $this->phpci->getConfig('build_settings');
if (isset($buildSettings['pgsql'])) {
$sql = $buildSettings['pgsql'];
@ -71,8 +52,6 @@ class Pgsql implements Plugin
$this->user = $sql['user'];
$this->pass = $sql['pass'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
@ -85,7 +64,7 @@ class Pgsql implements Plugin
$opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
$pdo = new PDO('pgsql:host=' . $this->host, $this->user, $this->pass, $opts);
foreach ($this->queries as $query) {
foreach ($this->options as $query) {
$pdo->query($this->phpci->interpolate($query));
}
} catch (\Exception $ex) {

View file

@ -12,20 +12,8 @@ use PHPCensor\Plugin;
/**
* Phar Plugin
*/
class Phar implements Plugin
class Phar extends Plugin
{
/**
* PHPCI
* @var Builder
*/
protected $phpci;
/**
* Build
* @var Build
*/
protected $build;
/**
* Output Directory
* @var string
@ -51,22 +39,11 @@ class Phar implements Plugin
protected $stub;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
// Basic
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
// Directory?
if (isset($options['directory'])) {
@ -87,28 +64,6 @@ class Phar implements Plugin
if (isset($options['stub'])) {
$this->setStub($options['stub']);
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Returns PHPCI
*
* @return Builder
*/
public function getPHPCI()
{
return $this->phpci;
}
/**
* Returns Build
*
* @return Build
*/
public function getBuild()
{
return $this->build;
}
/**
@ -131,7 +86,7 @@ class Phar implements Plugin
public function getDirectory()
{
if (!isset($this->directory)) {
$this->setDirectory($this->getPHPCI()->buildPath);
$this->setDirectory($this->phpci->buildPath);
}
return $this->directory;
}
@ -217,7 +172,7 @@ class Phar implements Plugin
$content = '';
$filename = $this->getStub();
if ($filename) {
$content = file_get_contents($this->getPHPCI()->buildPath . DIRECTORY_SEPARATOR . $this->getStub());
$content = file_get_contents($this->phpci->buildPath . DIRECTORY_SEPARATOR . $this->getStub());
}
return $content;
}
@ -233,7 +188,7 @@ class Phar implements Plugin
try {
$file = $this->getDirectory() . DIRECTORY_SEPARATOR . $this->getFilename();
$phar = new PHPPhar($file, 0, $this->getFilename());
$phar->buildFromDirectory($this->getPHPCI()->buildPath, $this->getRegExp());
$phar->buildFromDirectory($this->phpci->buildPath, $this->getRegExp());
$stub = $this->getStubContent();
if ($stub) {
@ -242,8 +197,8 @@ class Phar implements Plugin
$success = true;
} catch (Exception $e) {
$this->getPHPCI()->log(Lang::get('phar_internal_error'));
$this->getPHPCI()->log($e->getMessage());
$this->phpci->log(Lang::get('phar_internal_error'));
$this->phpci->log($e->getMessage());
}
return $success;

View file

@ -21,36 +21,29 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Phing implements Plugin
class Phing extends Plugin
{
private $directory;
private $buildFile = 'build.xml';
private $targets = ['build'];
private $properties = [];
private $propertyFile;
protected $phpci;
protected $build;
protected $directory;
protected $buildFile = 'build.xml';
protected $targets = ['build'];
protected $properties = [];
protected $propertyFile;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->setPhpci($phpci);
$this->build = $build;
parent::__construct($phpci, $build, $options);
/*
* Set working directory
*/
if (isset($options['directory'])) {
$directory = $phpci->buildPath . DIRECTORY_SEPARATOR . $options['directory'];
$directory = $this->phpci->buildPath . DIRECTORY_SEPARATOR . $options['directory'];
} else {
$directory = $phpci->buildPath;
$directory = $this->phpci->buildPath;
}
$this->setDirectory($directory);
@ -97,24 +90,6 @@ class Phing implements Plugin
return $this->phpci->executeCommand(implode(' ', $cmd), $this->directory, $this->targets);
}
/**
* @return \PHPCensor\Builder
*/
public function getPhpci()
{
return $this->phpci;
}
/**
* @param \PHPCensor\Builder $phpci
*
* @return $this
*/
public function setPhpci($phpci)
{
$this->phpci = $phpci;
}
/**
* @return string
*/

View file

@ -13,6 +13,8 @@ use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Model\BuildError;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPlugin;
/**
* PHP Code Sniffer Plugin - Allows PHP Code Sniffer testing.
@ -20,13 +22,8 @@ use PHPCensor\Model\BuildError;
* @package PHPCI
* @subpackage Plugins
*/
class PhpCodeSniffer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
class PhpCodeSniffer extends Plugin implements ZeroConfigPlugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var array
*/
@ -74,43 +71,25 @@ class PhpCodeSniffer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
protected $ignore;
/**
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
public static function canExecute($stage, Builder $builder, Build $build)
{
if ($stage == 'test') {
return true;
}
return false;
}
/**
* @param \PHPCensor\Builder $phpci
* @param \PHPCensor\Model\Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->suffixes = ['php'];
$this->directory = $phpci->buildPath;
$this->standard = 'PSR2';
$this->tab_width = '';
$this->encoding = '';
$this->path = '';
$this->ignore = $this->phpci->ignore;
parent::__construct($phpci, $build, $options);
$this->suffixes = ['php'];
$this->directory = $this->phpci->buildPath;
$this->standard = 'PSR2';
$this->tab_width = '';
$this->encoding = '';
$this->path = '';
$this->ignore = $this->phpci->ignore;
$this->allowed_warnings = 0;
$this->allowed_errors = 0;
$this->allowed_errors = 0;
if (isset($options['zero_config']) && $options['zero_config']) {
$this->allowed_warnings = -1;
$this->allowed_errors = -1;
$this->allowed_errors = -1;
}
if (isset($options['suffixes'])) {
@ -124,23 +103,22 @@ class PhpCodeSniffer implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
if (!empty($options['encoding'])) {
$this->encoding = ' --encoding=' . $options['encoding'];
}
$this->setOptions($options);
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Handle this plugin's options.
* @param $options
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
protected function setOptions($options)
public static function canExecute($stage, Builder $builder, Build $build)
{
foreach (['directory', 'standard', 'path', 'ignore', 'allowed_warnings', 'allowed_errors'] as $key) {
if (array_key_exists($key, $options)) {
$this->{$key} = $options[$key];
}
if ($stage == 'test') {
return true;
}
return false;
}
/**

View file

@ -21,12 +21,10 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class PhpCpd implements Plugin
class PhpCpd extends Plugin
{
protected $directory;
protected $args;
protected $phpci;
protected $build;
/**
* @var string, based on the assumption the root may not hold the code to be
@ -40,28 +38,22 @@ class PhpCpd implements Plugin
protected $ignore;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->path = $phpci->buildPath;
$this->ignore = $phpci->ignore;
$this->path = $this->phpci->buildPath;
$this->ignore = $this->phpci->ignore;
if (!empty($options['path'])) {
$this->path = $phpci->buildPath . $options['path'];
$this->path = $this->phpci->buildPath . $options['path'];
}
if (!empty($options['ignore'])) {
$this->ignore = $options['ignore'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -19,45 +19,23 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class PhpCsFixer implements Plugin
class PhpCsFixer extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
protected $workingDir = '';
protected $level = ' --level=psr2';
protected $verbose = '';
protected $diff = '';
protected $levels = array('psr0', 'psr1', 'psr2', 'symfony');
protected $levels = ['psr0', 'psr1', 'psr2', 'symfony'];
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->workingdir = $this->phpci->buildPath;
$this->workingDir = $this->phpci->buildPath;
$this->buildArgs($options);
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
@ -67,7 +45,7 @@ class PhpCsFixer implements Plugin
public function execute()
{
$curdir = getcwd();
chdir($this->workingdir);
chdir($this->workingDir);
$phpcsfixer = $this->phpci->findBinary('php-cs-fixer');
@ -98,7 +76,7 @@ class PhpCsFixer implements Plugin
}
if (isset($options['workingdir']) && $options['workingdir']) {
$this->workingdir = $this->phpci->buildPath . $options['workingdir'];
$this->workingDir = $this->phpci->buildPath . $options['workingdir'];
}
}

View file

@ -12,6 +12,8 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPlugin;
/**
* PHP Docblock Checker Plugin - Checks your PHP files for appropriate uses of Docblocks
@ -19,18 +21,8 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class PhpDocblockChecker implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
class PhpDocblockChecker extends Plugin implements ZeroConfigPlugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var string Based on the assumption the root may not hold the code to be
* tested, extends the build path.
@ -44,34 +36,16 @@ class PhpDocblockChecker implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
protected $skipClasses = false;
protected $skipMethods = false;
protected $allowed_warnings;
/**
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
public static function canExecute($stage, Builder $builder, Build $build)
{
if ($stage == 'test') {
return true;
}
return false;
}
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->ignore = $phpci->ignore;
parent::__construct($phpci, $build, $options);
$this->ignore = $this->phpci->ignore;
$this->path = '';
$this->allowed_warnings = 0;
@ -94,8 +68,22 @@ class PhpDocblockChecker implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
if (array_key_exists('allowed_warnings', $options)) {
$this->allowed_warnings = (int)$options['allowed_warnings'];
}
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
/**
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
public static function canExecute($stage, Builder $builder, Build $build)
{
if ($stage == 'test') {
return true;
}
return false;
}
/**

View file

@ -12,6 +12,8 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPlugin;
/**
* PHP Loc - Allows PHP Copy / Lines of Code testing.
@ -19,16 +21,12 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class PhpLoc implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
class PhpLoc extends Plugin implements ZeroConfigPlugin
{
/**
* @var string
*/
protected $directory;
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* Check if this plugin can be executed.
@ -47,22 +45,17 @@ class PhpLoc implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
}
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->directory = $phpci->buildPath;
parent::__construct($phpci, $build, $options);
$this->directory = $this->phpci->buildPath;
if (isset($options['directory'])) {
$this->directory .= $options['directory'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -12,6 +12,8 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPlugin;
/**
* PHP Mess Detector Plugin - Allows PHP Mess Detector testing.
@ -19,18 +21,8 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class PhpMessDetector implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
class PhpMessDetector extends Plugin implements ZeroConfigPlugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var array
*/
@ -54,43 +46,19 @@ class PhpMessDetector implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
* @var array
*/
protected $rules;
protected $allowed_warnings;
/**
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
public static function canExecute($stage, Builder $builder, Build $build)
{
if ($stage == 'test') {
return true;
}
return false;
}
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->suffixes = ['php'];
$this->ignore = $phpci->ignore;
$this->path = '';
$this->rules = ['codesize', 'unusedcode', 'naming'];
parent::__construct($phpci, $build, $options);
$this->suffixes = ['php'];
$this->ignore = $this->phpci->ignore;
$this->path = '';
$this->rules = ['codesize', 'unusedcode', 'naming'];
$this->allowed_warnings = 0;
if (isset($options['zero_config']) && $options['zero_config']) {
@ -108,8 +76,22 @@ class PhpMessDetector implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
foreach (['rules', 'ignore', 'suffixes'] as $key) {
$this->overrideSetting($options, $key);
}
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
/**
* Check if this plugin can be executed.
* @param $stage
* @param Builder $builder
* @param Build $build
* @return bool
*/
public static function canExecute($stage, Builder $builder, Build $build)
{
if ($stage == 'test') {
return true;
}
return false;
}
/**

View file

@ -19,18 +19,8 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class PhpParallelLint implements Plugin
class PhpParallelLint extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var string
*/
@ -42,33 +32,22 @@ class PhpParallelLint implements Plugin
protected $ignore;
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->directory = $phpci->buildPath;
parent::__construct($phpci, $build, $options);
$this->directory = $this->phpci->buildPath;
$this->ignore = $this->phpci->ignore;
if (isset($options['directory'])) {
$this->directory = $phpci->buildPath.$options['directory'];
$this->directory = $this->phpci->buildPath.$options['directory'];
}
if (isset($options['ignore'])) {
$this->ignore = $options['ignore'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -12,6 +12,7 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
/**
* PHP Spec Plugin - Allows PHP Spec testing.
@ -19,38 +20,8 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class PhpSpec implements PHPCensor\Plugin
class PhpSpec extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var array
*/
protected $options;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->options = $options;
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Runs PHP Spec tests.
*/

View file

@ -12,6 +12,7 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
/**
* PHPTAL Lint Plugin - Provides access to PHPTAL lint functionality.
@ -19,23 +20,13 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class PhpTalLint implements PHPCensor\Plugin
class PhpTalLint extends Plugin
{
protected $directories;
protected $recursive = true;
protected $suffixes;
protected $ignore;
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var string The path to a file contain custom phptal_tales_ functions
*/
@ -57,19 +48,15 @@ class PhpTalLint implements PHPCensor\Plugin
protected $failedPaths = [];
/**
* Standard Constructor
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->directories = [''];
$this->suffixes = ['zpt'];
$this->ignore = $phpci->ignore;
$this->ignore = $this->phpci->ignore;
$this->allowed_warnings = 0;
$this->allowed_errors = 0;
@ -81,23 +68,6 @@ class PhpTalLint implements PHPCensor\Plugin
if (isset($options['suffixes'])) {
$this->suffixes = (array)$options['suffixes'];
}
$this->setOptions($options);
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Handle this plugin's options.
* @param $options
*/
protected function setOptions($options)
{
foreach (['directories', 'tales', 'allowed_warnings', 'allowed_errors'] as $key) {
if (array_key_exists($key, $options)) {
$this->{$key} = $options[$key];
}
}
}
/**

View file

@ -17,6 +17,8 @@ use PHPCensor\Model\Build;
use PHPCensor\Model\BuildError;
use PHPCensor\Plugin\Option\PhpUnitOptions;
use PHPCensor\Plugin\Util\PhpUnitResult;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPlugin;
/**
* PHP Unit Plugin - A rewrite of the original PHP Unit plugin
@ -26,11 +28,8 @@ use PHPCensor\Plugin\Util\PhpUnitResult;
* @package PHPCI
* @subpackage Plugins
*/
class PhpUnit implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
class PhpUnit extends Plugin implements ZeroConfigPlugin
{
protected $phpci;
protected $build;
/** @var string[] Raw options from the PHPCI config file */
protected $options = array();
@ -48,8 +47,8 @@ class PhpUnit implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
*/
public function __construct(Builder $phpci, Build $build, array $options = array())
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->options = new PhpUnitOptions($options);
}
@ -168,7 +167,6 @@ class PhpUnit implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
*/
protected function processResults($jsonFile)
{
var_dump('fuck!');
if (file_exists($jsonFile)) {
$parser = new PhpUnitResult($jsonFile, $this->build->getBuildPath());

View file

@ -19,18 +19,8 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Shell implements Plugin
class Shell extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
protected $args;
/**
@ -39,21 +29,11 @@ class Shell implements Plugin
protected $commands = [];
/**
* Standard Constructor
*
* $options['directory'] Output Directory. Default: %BUILDPATH%
* $options['filename'] Phar Filename. Default: build.phar
* $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/
* $options['stub'] Stub Content. No Default Value
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
if (isset($options['command'])) {
// Keeping this for backwards compatibility, new projects should use interpolation vars.
@ -72,8 +52,6 @@ class Shell implements Plugin
if (is_array($options)) {
$this->commands = $options;
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -21,7 +21,7 @@ use Maknz\Slack\AttachmentField;
* @package PHPCI
* @subpackage Plugins
*/
class SlackNotify implements Plugin
class SlackNotify extends Plugin
{
private $webHook;
private $room;
@ -31,16 +31,11 @@ class SlackNotify implements Plugin
private $show_status;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* @throws \Exception
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
if (is_array($options) && isset($options['webhook_url'])) {
$this->webHook = trim($options['webhook_url']);

View file

@ -20,18 +20,8 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Sqlite implements Plugin
class Sqlite extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
/**
* @var array
*/
@ -43,23 +33,18 @@ class Sqlite implements Plugin
protected $path;
/**
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->queries = $options;
$buildSettings = $phpci->getConfig('build_settings');
parent::__construct($phpci, $build, $options);
$buildSettings = $this->phpci->getConfig('build_settings');
if (isset($buildSettings['sqlite'])) {
$sql = $buildSettings['sqlite'];
$sql = $buildSettings['sqlite'];
$this->path = $sql['path'];
}
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**

View file

@ -12,6 +12,8 @@ namespace PHPCensor\Plugin;
use PHPCensor;
use PHPCensor\Builder;
use PHPCensor\Model\Build;
use PHPCensor\Plugin;
use PHPCensor\ZeroConfigPlugin;
/**
* Technical Debt Plugin - Checks for existence of "TODO", "FIXME", etc.
@ -20,13 +22,8 @@ use PHPCensor\Model\Build;
* @package PHPCI
* @subpackage Plugins
*/
class TechnicalDebt implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
class TechnicalDebt extends Plugin implements ZeroConfigPlugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var array
*/
@ -58,6 +55,28 @@ class TechnicalDebt implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
*/
protected $searches;
/**
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
parent::__construct($phpci, $build, $options);
$this->suffixes = ['php'];
$this->directory = $this->phpci->buildPath;
$this->path = '';
$this->ignore = $this->phpci->ignore;
$this->allowed_errors = 0;
$this->searches = ['TODO', 'FIXME', 'TO DO', 'FIX ME'];
if (isset($options['searches']) && is_array($options['searches'])) {
$this->searches = $options['searches'];
}
if (isset($options['zero_config']) && $options['zero_config']) {
$this->allowed_errors = -1;
}
}
/**
* Check if this plugin can be executed.
@ -76,48 +95,6 @@ class TechnicalDebt implements PHPCensor\Plugin, PHPCensor\ZeroConfigPlugin
return false;
}
/**
* @param \PHPCensor\Builder $phpci
* @param \PHPCensor\Model\Build $build
* @param array $options
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
$this->suffixes = ['php'];
$this->directory = $phpci->buildPath;
$this->path = '';
$this->ignore = $this->phpci->ignore;
$this->allowed_errors = 0;
$this->searches = ['TODO', 'FIXME', 'TO DO', 'FIX ME'];
if (isset($options['searches']) && is_array($options['searches'])) {
$this->searches = $options['searches'];
}
if (isset($options['zero_config']) && $options['zero_config']) {
$this->allowed_errors = -1;
}
$this->setOptions($options);
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Handle this plugin's options.
* @param $options
*/
protected function setOptions($options)
{
foreach (['directory', 'path', 'ignore', 'allowed_errors'] as $key) {
if (array_key_exists($key, $options)) {
$this->{$key} = $options[$key];
}
}
}
/**
* Runs the plugin
*/

View file

@ -8,6 +8,7 @@ use PHPCensor\Helper\Lang;
use PHPCensor\Logging\BuildLogger;
use PHPCensor\Model\Build;
use PHPCensor\Store\BuildStore;
use PHPCensor\Builder;
/**
* Plugin Executor - Runs the configured plugins for a given build stage.
@ -15,6 +16,16 @@ use PHPCensor\Store\BuildStore;
*/
class Executor
{
/**
* @var \PHPCI\Builder
*/
protected $phpci;
/**
* @var \PHPCI\Model\Build
*/
protected $build;
/**
* @var BuildLogger
*/
@ -31,14 +42,16 @@ class Executor
protected $store;
/**
* @param Factory $pluginFactory
* @param Builder $phpci
* @param Build $build
* @param BuildLogger $logger
*/
public function __construct(Factory $pluginFactory, BuildLogger $logger, BuildStore $store = null)
public function __construct(Builder $phpci, Build $build, BuildLogger $logger)
{
$this->pluginFactory = $pluginFactory;
$this->phpci = $phpci;
$this->build = $build;
$this->logger = $logger;
$this->store = $store ?: StoreFactory::getStore('Build');
$this->store = StoreFactory::getStore('Build');
}
/**
@ -78,7 +91,7 @@ class Executor
protected function getBranchSpecificPlugins(&$config, $stage, $pluginsToExecute)
{
/** @var \PHPCensor\Model\Build $build */
$build = $this->pluginFactory->getResourceFor('PHPCensor\Model\Build');
$build = $this->build;
$branch = $build->getBranch();
// If we don't have any branch-specific plugins:
@ -190,10 +203,7 @@ class Executor
}
try {
// Build and run it
$obj = $this->pluginFactory->buildPlugin($class, $options);
return $obj->execute();
return (new $class($this->phpci, $this->build, $options))->execute();
} catch (\Exception $ex) {
$this->logger->logFailure(Lang::get('exception') . $ex->getMessage(), $ex);
@ -235,7 +245,7 @@ class Executor
private function getBuildSummary()
{
/** @var Build $build */
$build = $this->pluginFactory->getResourceFor('PHPCensor\Model\Build');
$build = $this->build;
$metas = $this->store->getMeta('plugin-summary', $build->getProjectId(), $build->getId());
return isset($metas[0]['meta_value']) ? $metas[0]['meta_value'] : [];
}
@ -248,7 +258,7 @@ class Executor
private function setBuildSummary($summary)
{
/** @var Build $build */
$build = $this->pluginFactory->getResourceFor('PHPCensor\Model\Build');
$build = $this->build;
$this->store->setMeta($build->getProjectId(), $build->getId(), 'plugin-summary', json_encode($summary));
}
}

View file

@ -1,216 +0,0 @@
<?php
namespace PHPCensor\Plugin\Util;
use Pimple\Container;
/**
* Plugin Factory - Loads Plugins and passes required dependencies.
* @package PHPCensor\Plugin\Util
*/
class Factory
{
const TYPE_ARRAY = "array";
const TYPE_CALLABLE = "callable";
const INTERFACE_PLUGIN = '\PHPCensor\Plugin';
private $currentPluginOptions;
/**
* @var Container
*/
private $container;
/**
* @param Container $container
*/
public function __construct(Container $container = null)
{
if ($container) {
$this->container = $container;
} else {
$this->container = new Container();
}
}
/**
* Trys to get a function from the file path specified. If the
* file returns a function then $this will be passed to it.
* This enables the config file to call any public methods.
*
* @param $configPath
* @return bool - true if the function exists else false.
*/
public function addConfigFromFile($configPath)
{
// The file is expected to return a function which can
// act on the pluginFactory to register any resources needed.
if (file_exists($configPath)) {
$configFunction = require($configPath);
if (is_callable($configFunction)) {
$configFunction($this);
return true;
}
}
return false;
}
/**
* Get most recently used factory options.
* @return mixed
*/
public function getLastOptions()
{
return $this->currentPluginOptions;
}
/**
* Builds an instance of plugin of class $className. $options will
* be passed along with any resources registered with the factory.
*
* @param $className
* @param array|null $options
* @throws \InvalidArgumentException if $className doesn't represent a valid plugin
* @return \PHPCensor\Plugin
*/
public function buildPlugin($className, $options = [])
{
$this->currentPluginOptions = $options;
$reflectedPlugin = new \ReflectionClass($className);
if (!$reflectedPlugin->implementsInterface(self::INTERFACE_PLUGIN)) {
throw new \InvalidArgumentException(
"Requested class must implement " . self:: INTERFACE_PLUGIN
);
}
$constructor = $reflectedPlugin->getConstructor();
if ($constructor) {
$argsToUse = [];
foreach ($constructor->getParameters() as $param) {
if ('options' === $param->getName()) {
$argsToUse[] = $options;
} else {
$argsToUse = $this->addArgFromParam($argsToUse, $param);
}
}
$plugin = $reflectedPlugin->newInstanceArgs($argsToUse);
} else {
$plugin = $reflectedPlugin->newInstance();
}
return $plugin;
}
/**
* @param callable $loader
* @param string|null $name
* @param string|null $type
* @throws \InvalidArgumentException
* @internal param mixed $resource
*/
public function registerResource(
$loader,
$name = null,
$type = null
) {
if ($name === null && $type === null) {
throw new \InvalidArgumentException(
"Type or Name must be specified"
);
}
if (!($loader instanceof \Closure)) {
throw new \InvalidArgumentException(
'$loader is expected to be a function'
);
}
$resourceID = $this->getInternalID($type, $name);
$this->container[$resourceID] = $loader;
}
/**
* Get an internal resource ID.
* @param null $type
* @param null $name
* @return string
*/
private function getInternalID($type = null, $name = null)
{
$type = $type ? : "";
$name = $name ? : "";
return $type . "-" . $name;
}
/**
* @param string $type
* @param string $name
* @return mixed
*/
public function getResourceFor($type = null, $name = null)
{
$fullId = $this->getInternalID($type, $name);
if (isset($this->container[$fullId])) {
return $this->container[$fullId];
}
$typeOnlyID = $this->getInternalID($type, null);
if (isset($this->container[$typeOnlyID])) {
return $this->container[$typeOnlyID];
}
$nameOnlyID = $this->getInternalID(null, $name);
if (isset($this->container[$nameOnlyID])) {
return $this->container[$nameOnlyID];
}
return null;
}
/**
* @param \ReflectionParameter $param
* @return null|string
*/
private function getParamType(\ReflectionParameter $param)
{
$class = $param->getClass();
if ($class) {
return $class->getName();
} elseif ($param->isArray()) {
return self::TYPE_ARRAY;
} elseif (is_callable($param)) {
return self::TYPE_CALLABLE;
} else {
return null;
}
}
/**
* @param $existingArgs
* @param \ReflectionParameter $param
* @return array
* @throws \DomainException
*/
private function addArgFromParam($existingArgs, \ReflectionParameter $param)
{
$name = $param->getName();
$type = $this->getParamType($param);
$arg = $this->getResourceFor($type, $name);
if ($arg !== null) {
$existingArgs[] = $arg;
} elseif ($arg === null && $param->isOptional()) {
$existingArgs[] = $param->getDefaultValue();
} else {
throw new \DomainException(
"Unsatisfied dependency: " . $param->getName()
);
}
return $existingArgs;
}
}

View file

@ -19,34 +19,19 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class Wipe implements Plugin
class Wipe extends Plugin
{
/**
* @var \PHPCensor\Builder
*/
protected $phpci;
/**
* @var \PHPCensor\Model\Build
*/
protected $build;
protected $directory;
/**
* Set up the plugin, configure options, etc.
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$path = $phpci->buildPath;
$this->phpci = $phpci;
$this->build = $build;
$this->directory = isset($options['directory']) ? $this->phpci->interpolate($options['directory']) : $path;
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
parent::__construct($phpci, $build, $options);
$path = $this->phpci->buildPath;
$this->directory = isset($options['directory']) ? $this->phpci->interpolate($options['directory']) : $path;
}
/**

View file

@ -19,11 +19,9 @@ use PHPCensor\Plugin;
* @package PHPCI
* @subpackage Plugins
*/
class XMPP implements Plugin
class XMPP extends Plugin
{
protected $directory;
protected $phpci;
protected $build;
/**
* @var string, username of sender account xmpp
@ -61,15 +59,11 @@ class XMPP implements Plugin
protected $date_format;
/**
*
* @param Builder $phpci
* @param Build $build
* @param array $options
* {@inheritdoc}
*/
public function __construct(Builder $phpci, Build $build, array $options = [])
{
$this->phpci = $phpci;
$this->build = $build;
parent::__construct($phpci, $build, $options);
$this->username = '';
$this->password = '';
@ -89,24 +83,6 @@ class XMPP implements Plugin
$this->recipients = $options['recipients'];
}
}
$this->setOptions($options);
$this->phpci->logDebug('Plugin options: ' . json_encode($options));
}
/**
* Set options configuration for plugin
*
* @param array $options
*/
protected function setOptions($options)
{
foreach (['username', 'password', 'alias', 'tls', 'server', 'date_format'] as $key) {
if (array_key_exists($key, $options)) {
$this->{$key} = $options[$key];
}
}
}
/**