Merge branch 'fix_technical_debt_migration' of github.com:REBELinBLUE/PHPCI into fix_technical_debt_migration
* 'fix_technical_debt_migration' of github.com:REBELinBLUE/PHPCI: Add a migration to clean up technical debt data Fixes the technical debt migration Fixes a issue with a double slash in the path meaning ignore doesn't work Fixing tests on install command Update installer to support new worker functionality. Closes #1094 Adding rebuild queue option Fix for warnings chart, courtesy of @Henk8 closes #1098 Making the lines of code chart hide if no data available. Closes #1103 Allow more errors. Fixes #1104 Fixing error duplication bug. Closes #1112 ImageOptim'ed assets/ Adding slash in path Fix / for DIRECTORY_SEPARATOR
|
@ -16,6 +16,7 @@ use b8\Config;
|
|||
use b8\Store\Factory;
|
||||
use PHPCI\Helper\Lang;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Helper\DialogHelper;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
@ -46,6 +47,9 @@ class InstallCommand extends Command
|
|||
->addOption('admin-pass', null, InputOption::VALUE_OPTIONAL, Lang::get('admin_pass'))
|
||||
->addOption('admin-mail', null, InputOption::VALUE_OPTIONAL, Lang::get('admin_email'))
|
||||
->addOption('config-path', null, InputOption::VALUE_OPTIONAL, Lang::get('config_path'), $defaultPath)
|
||||
->addOption('queue-disabled', null, InputOption::VALUE_NONE, 'Don\'t ask for queue details')
|
||||
->addOption('queue-server', null, InputOption::VALUE_OPTIONAL, 'Beanstalkd queue server hostname')
|
||||
->addOption('queue-name', null, InputOption::VALUE_OPTIONAL, 'Beanstalkd queue name')
|
||||
->setDescription(Lang::get('install_phpci'));
|
||||
}
|
||||
|
||||
|
@ -229,10 +233,37 @@ class InstallCommand extends Command
|
|||
}
|
||||
|
||||
$phpci['url'] = $url;
|
||||
$phpci['worker'] = $this->getQueueInformation($input, $output, $dialog);
|
||||
|
||||
return $phpci;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the user wants to use a queue, get the necessary details.
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output
|
||||
* @param DialogHelper $dialog
|
||||
* @return array
|
||||
*/
|
||||
protected function getQueueInformation(InputInterface $input, OutputInterface $output, DialogHelper $dialog)
|
||||
{
|
||||
if ($input->getOption('queue-disabled')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$rtn = [];
|
||||
|
||||
if (!$rtn['host'] = $input->getOption('queue-server')) {
|
||||
$rtn['host'] = $dialog->ask($output, 'Enter your beanstalkd hostname [localhost]: ', 'localhost');
|
||||
}
|
||||
|
||||
if (!$rtn['queue'] = $input->getOption('queue-name')) {
|
||||
$rtn['queue'] = $dialog->ask($output, 'Enter the queue (tube) name to use [phpci]: ', 'phpci');
|
||||
}
|
||||
|
||||
return $rtn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load configuration for DB form CLI options or ask info to user.
|
||||
*
|
||||
|
|
85
PHPCI/Command/RebuildQueueCommand.php
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
/**
|
||||
* PHPCI - Continuous Integration for PHP
|
||||
*
|
||||
* @copyright Copyright 2015, Block 8 Limited.
|
||||
* @license https://github.com/Block8/PHPCI/blob/master/LICENSE.md
|
||||
* @link https://www.phptesting.org/
|
||||
*/
|
||||
|
||||
namespace PHPCI\Command;
|
||||
|
||||
use b8\Config;
|
||||
use b8\Store\Factory;
|
||||
use Monolog\Logger;
|
||||
use PHPCI\BuildFactory;
|
||||
use PHPCI\Helper\Lang;
|
||||
use PHPCI\Logging\OutputLogHandler;
|
||||
use PHPCI\Service\BuildService;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
|
||||
/**
|
||||
* @author Dan Cryer <dan@block8.co.uk>
|
||||
* @package PHPCI
|
||||
* @subpackage Console
|
||||
*/
|
||||
class RebuildQueueCommand extends Command
|
||||
{
|
||||
/**
|
||||
* @var OutputInterface
|
||||
*/
|
||||
protected $output;
|
||||
|
||||
/**
|
||||
* @var Logger
|
||||
*/
|
||||
protected $logger;
|
||||
|
||||
/**
|
||||
* @param \Monolog\Logger $logger
|
||||
* @param string $name
|
||||
*/
|
||||
public function __construct(Logger $logger, $name = null)
|
||||
{
|
||||
parent::__construct($name);
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('phpci:rebuild-queue')
|
||||
->setDescription('Rebuilds the PHPCI worker queue.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$this->output = $output;
|
||||
|
||||
// For verbose mode we want to output all informational and above
|
||||
// messages to the symphony output interface.
|
||||
if ($input->hasOption('verbose') && $input->getOption('verbose')) {
|
||||
$this->logger->pushHandler(
|
||||
new OutputLogHandler($this->output, Logger::INFO)
|
||||
);
|
||||
}
|
||||
|
||||
$store = Factory::getStore('Build');
|
||||
$result = $store->getByStatus(0);
|
||||
|
||||
$this->logger->addInfo(Lang::get('found_n_builds', count($result['items'])));
|
||||
|
||||
$buildService = new BuildService($store);
|
||||
|
||||
while (count($result['items'])) {
|
||||
$build = array_shift($result['items']);
|
||||
$build = BuildFactory::getBuild($build);
|
||||
|
||||
$this->logger->addInfo('Added build #' . $build->getId() . ' to queue.');
|
||||
$buildService->addBuildToQueue($build);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -258,7 +258,7 @@ class Build extends BuildBase
|
|||
|
||||
if (empty($this->currentBuildPath)) {
|
||||
$buildDirectory = $this->getId() . '_' . substr(md5(microtime(true)), 0, 5);
|
||||
$this->currentBuildPath = PHPCI_BUILD_ROOT_DIR . $buildDirectory . '/';
|
||||
$this->currentBuildPath = PHPCI_BUILD_ROOT_DIR . $buildDirectory . DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
return $this->currentBuildPath;
|
||||
|
|
|
@ -38,19 +38,19 @@ class Campfire implements \PHPCI\Plugin
|
|||
*/
|
||||
public function __construct(Builder $phpci, Build $build, array $options = array())
|
||||
{
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
|
||||
$this->message = $options['message'];
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->message = $options['message'];
|
||||
$this->userAgent = "PHPCI/1.0 (+http://www.phptesting.org/)";
|
||||
$this->cookie = "phpcicookie";
|
||||
$this->cookie = "phpcicookie";
|
||||
|
||||
$buildSettings = $phpci->getConfig('build_settings');
|
||||
|
||||
if (isset($buildSettings['campfire'])) {
|
||||
$campfire = $buildSettings['campfire'];
|
||||
$this->url = $campfire['url'];
|
||||
$campfire = $buildSettings['campfire'];
|
||||
$this->url = $campfire['url'];
|
||||
$this->authToken = $campfire['authToken'];
|
||||
$this->roomId = $campfire['roomId'];
|
||||
$this->roomId = $campfire['roomId'];
|
||||
} else {
|
||||
throw new \Exception(Lang::get('no_campfire_settings'));
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ class Campfire implements \PHPCI\Plugin
|
|||
*/
|
||||
public function execute()
|
||||
{
|
||||
$url = PHPCI_URL."build/view/".$this->build->getId();
|
||||
$url = PHPCI_URL . "build/view/" . $this->build->getId();
|
||||
$message = str_replace("%buildurl%", $url, $this->message);
|
||||
$this->joinRoom($this->roomId);
|
||||
$status = $this->speak($message, $this->roomId);
|
||||
|
@ -101,6 +101,7 @@ class Campfire implements \PHPCI\Plugin
|
|||
public function speak($message, $roomId, $isPaste = false)
|
||||
{
|
||||
$page = '/room/'.$roomId.'/speak.json';
|
||||
|
||||
if ($isPaste) {
|
||||
$type = 'PasteMessage';
|
||||
} else {
|
||||
|
@ -143,10 +144,12 @@ class Campfire implements \PHPCI\Plugin
|
|||
|
||||
// We tend to get one space with an otherwise blank response
|
||||
$output = trim($output);
|
||||
|
||||
if (strlen($output)) {
|
||||
/* Responses are JSON. Decode it to a data structure */
|
||||
return json_decode($output);
|
||||
}
|
||||
|
||||
// Simple 200 OK response (such as for joining a room)
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -39,9 +39,9 @@ class CleanBuild implements \PHPCI\Plugin
|
|||
*/
|
||||
public function __construct(Builder $phpci, Build $build, array $options = array())
|
||||
{
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->remove = isset($options['remove']) && is_array($options['remove']) ? $options['remove'] : array();
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->remove = isset($options['remove']) && is_array($options['remove']) ? $options['remove'] : array();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -57,7 +57,7 @@ class CleanBuild implements \PHPCI\Plugin
|
|||
$this->phpci->executeCommand($cmd, $this->phpci->buildPath . 'composer.lock');
|
||||
|
||||
$success = true;
|
||||
|
||||
|
||||
foreach ($this->remove as $file) {
|
||||
$ok = $this->phpci->executeCommand($cmd, $this->phpci->buildPath . $file);
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ class Codeception implements \PHPCI\Plugin, \PHPCI\ZeroConfigPlugin
|
|||
{
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->path = 'tests/_output/';
|
||||
$this->path = 'tests' . DIRECTORY_SEPARATOR . '_output' . DIRECTORY_SEPARATOR;
|
||||
|
||||
if (empty($options['config'])) {
|
||||
$this->ymlConfigFile = self::findConfigFile($this->phpci->buildPath);
|
||||
|
@ -148,9 +148,9 @@ class Codeception implements \PHPCI\Plugin, \PHPCI\ZeroConfigPlugin
|
|||
$output = $parser->parse();
|
||||
|
||||
$meta = array(
|
||||
'tests' => $parser->getTotalTests(),
|
||||
'tests' => $parser->getTotalTests(),
|
||||
'timetaken' => $parser->getTotalTimeTaken(),
|
||||
'failures' => $parser->getTotalFailures()
|
||||
'failures' => $parser->getTotalFailures()
|
||||
);
|
||||
|
||||
$this->build->storeMeta('codeception-meta', $meta);
|
||||
|
|
|
@ -38,7 +38,7 @@ class Composer implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin
|
|||
*/
|
||||
public static function canExecute($stage, Builder $builder, Build $build)
|
||||
{
|
||||
$path = $builder->buildPath . '/composer.json';
|
||||
$path = $builder->buildPath . DIRECTORY_SEPARATOR . 'composer.json';
|
||||
|
||||
if (file_exists($path) && $stage == 'setup') {
|
||||
return true;
|
||||
|
@ -55,16 +55,16 @@ class Composer implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin
|
|||
*/
|
||||
public function __construct(Builder $phpci, Build $build, array $options = array())
|
||||
{
|
||||
$path = $phpci->buildPath;
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->directory = $path;
|
||||
$this->action = 'install';
|
||||
$path = $phpci->buildPath;
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->directory = $path;
|
||||
$this->action = 'install';
|
||||
$this->preferDist = false;
|
||||
$this->nodev = false;
|
||||
$this->nodev = false;
|
||||
|
||||
if (array_key_exists('directory', $options)) {
|
||||
$this->directory = $path . '/' . $options['directory'];
|
||||
$this->directory = $path . DIRECTORY_SEPARATOR . $options['directory'];
|
||||
}
|
||||
|
||||
if (array_key_exists('action', $options)) {
|
||||
|
|
|
@ -35,12 +35,12 @@ class CopyBuild implements \PHPCI\Plugin
|
|||
*/
|
||||
public function __construct(Builder $phpci, Build $build, array $options = array())
|
||||
{
|
||||
$path = $phpci->buildPath;
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$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;
|
||||
$path = $phpci->buildPath;
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -52,9 +52,9 @@ class Email implements \PHPCI\Plugin
|
|||
Build $build,
|
||||
array $options = array()
|
||||
) {
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->options = $options;
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -52,7 +52,7 @@ class Env implements \PHPCI\Plugin
|
|||
// This allows the standard syntax: "FOO: bar"
|
||||
$env_var = "$key=$value";
|
||||
}
|
||||
|
||||
|
||||
if (!putenv($this->phpci->interpolate($env_var))) {
|
||||
$success = false;
|
||||
$this->phpci->logFailure(Lang::get('unable_to_set_env'));
|
||||
|
|
|
@ -52,7 +52,7 @@ class Grunt implements \PHPCI\Plugin
|
|||
|
||||
// Handle options:
|
||||
if (isset($options['directory'])) {
|
||||
$this->directory = $path . '/' . $options['directory'];
|
||||
$this->directory = $path . DIRECTORY_SEPARATOR . $options['directory'];
|
||||
}
|
||||
|
||||
if (isset($options['task'])) {
|
||||
|
|
|
@ -52,7 +52,7 @@ class Gulp implements \PHPCI\Plugin
|
|||
|
||||
// Handle options:
|
||||
if (isset($options['directory'])) {
|
||||
$this->directory = $path . '/' . $options['directory'];
|
||||
$this->directory = $path . DIRECTORY_SEPARATOR . $options['directory'];
|
||||
}
|
||||
|
||||
if (isset($options['task'])) {
|
||||
|
|
|
@ -41,9 +41,9 @@ class Lint implements PHPCI\Plugin
|
|||
*/
|
||||
public function __construct(Builder $phpci, Build $build, array $options = array())
|
||||
{
|
||||
$this->phpci = $phpci;
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->directories = array('');
|
||||
$this->directories = array('');
|
||||
$this->ignore = $phpci->ignore;
|
||||
|
||||
if (!empty($options['directory'])) {
|
||||
|
@ -93,7 +93,7 @@ class Lint implements PHPCI\Plugin
|
|||
|
||||
if ($item->isFile() && $item->getExtension() == 'php' && !$this->lintFile($php, $itemPath)) {
|
||||
$success = false;
|
||||
} elseif ($item->isDir() && $this->recursive && !$this->lintDirectory($php, $itemPath . '/')) {
|
||||
} elseif ($item->isDir() && $this->recursive && !$this->lintDirectory($php, $itemPath . DIRECTORY_SEPARATOR)) {
|
||||
$success = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,12 +33,12 @@ class PackageBuild implements \PHPCI\Plugin
|
|||
*/
|
||||
public function __construct(Builder $phpci, Build $build, array $options = array())
|
||||
{
|
||||
$path = $phpci->buildPath;
|
||||
$this->build = $build;
|
||||
$this->phpci = $phpci;
|
||||
$this->directory = isset($options['directory']) ? $options['directory'] : $path;
|
||||
$this->filename = isset($options['filename']) ? $options['filename'] : 'build';
|
||||
$this->format = isset($options['format']) ? $options['format'] : 'zip';
|
||||
$path = $phpci->buildPath;
|
||||
$this->build = $build;
|
||||
$this->phpci = $phpci;
|
||||
$this->directory = isset($options['directory']) ? $options['directory'] : $path;
|
||||
$this->filename = isset($options['filename']) ? $options['filename'] : 'build';
|
||||
$this->format = isset($options['format']) ? $options['format'] : 'zip';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -46,7 +46,7 @@ class PackageBuild implements \PHPCI\Plugin
|
|||
*/
|
||||
public function execute()
|
||||
{
|
||||
$path = $this->phpci->buildPath;
|
||||
$path = $this->phpci->buildPath;
|
||||
$build = $this->build;
|
||||
|
||||
if ($this->directory == $path) {
|
||||
|
|
|
@ -73,9 +73,9 @@ class Pgsql implements \PHPCI\Plugin
|
|||
}
|
||||
|
||||
/**
|
||||
* Connects to PgSQL and runs a specified set of queries.
|
||||
* @return boolean
|
||||
*/
|
||||
* Connects to PgSQL and runs a specified set of queries.
|
||||
* @return boolean
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
try {
|
||||
|
|
|
@ -213,7 +213,7 @@ class Phar implements \PHPCI\Plugin
|
|||
$content = '';
|
||||
$filename = $this->getStub();
|
||||
if ($filename) {
|
||||
$content = file_get_contents($this->getPHPCI()->buildPath . '/' . $this->getStub());
|
||||
$content = file_get_contents($this->getPHPCI()->buildPath . DIRECTORY_SEPARATOR . $this->getStub());
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
@ -227,7 +227,8 @@ class Phar implements \PHPCI\Plugin
|
|||
$success = false;
|
||||
|
||||
try {
|
||||
$phar = new PHPPhar($this->getDirectory() . '/' . $this->getFilename(), 0, $this->getFilename());
|
||||
$file = $this->getDirectory() . DIRECTORY_SEPARATOR . $this->getFilename();
|
||||
$phar = new PHPPhar($file, 0, $this->getFilename());
|
||||
$phar->buildFromDirectory($this->getPHPCI()->buildPath, $this->getRegExp());
|
||||
|
||||
$stub = $this->getStubContent();
|
||||
|
@ -236,7 +237,6 @@ class Phar implements \PHPCI\Plugin
|
|||
}
|
||||
|
||||
$success = true;
|
||||
|
||||
} catch (Exception $e) {
|
||||
$this->getPHPCI()->log(Lang::get('phar_internal_error'));
|
||||
$this->getPHPCI()->log($e->getMessage());
|
||||
|
|
|
@ -47,7 +47,7 @@ class Phing implements \PHPCI\Plugin
|
|||
* Set working directory
|
||||
*/
|
||||
if (isset($options['directory'])) {
|
||||
$directory = $phpci->buildPath . '/' . $options['directory'];
|
||||
$directory = $phpci->buildPath . DIRECTORY_SEPARATOR . $options['directory'];
|
||||
} else {
|
||||
$directory = $phpci->buildPath;
|
||||
}
|
||||
|
@ -255,7 +255,7 @@ class Phing implements \PHPCI\Plugin
|
|||
*/
|
||||
public function setPropertyFile($propertyFile)
|
||||
{
|
||||
if (!file_exists($this->getDirectory() . '/' . $propertyFile)) {
|
||||
if (!file_exists($this->getDirectory() . DIRECTORY_SEPARATOR . $propertyFile)) {
|
||||
throw new \Exception(Lang::get('property_file_missing'));
|
||||
}
|
||||
|
||||
|
|
|
@ -75,9 +75,9 @@ class PhpCpd implements \PHPCI\Plugin
|
|||
if (count($this->ignore)) {
|
||||
$map = function ($item) {
|
||||
// remove the trailing slash
|
||||
$item = rtrim($item, '/');
|
||||
$item = rtrim($item, DIRECTORY_SEPARATOR);
|
||||
|
||||
if (is_file($this->path . '/' . $item)) {
|
||||
if (is_file(rtrim($this->path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $item)) {
|
||||
return ' --names-exclude ' . $item;
|
||||
} else {
|
||||
return ' --exclude ' . $item;
|
||||
|
|
|
@ -32,10 +32,10 @@ class PhpCsFixer implements \PHPCI\Plugin
|
|||
protected $build;
|
||||
|
||||
protected $workingDir = '';
|
||||
protected $level = ' --level=psr2';
|
||||
protected $verbose = '';
|
||||
protected $diff = '';
|
||||
protected $levels = array('psr0', 'psr1', 'psr2', 'symfony');
|
||||
protected $level = ' --level=psr2';
|
||||
protected $verbose = '';
|
||||
protected $diff = '';
|
||||
protected $levels = array('psr0', 'psr1', 'psr2', 'symfony');
|
||||
|
||||
/**
|
||||
* Standard Constructor
|
||||
|
|
|
@ -69,19 +69,20 @@ class PhpLoc implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin
|
|||
public function execute()
|
||||
{
|
||||
$ignore = '';
|
||||
if (count($this->phpci->ignore)) {
|
||||
$map = function ($item) {
|
||||
return ' --exclude ' . rtrim($item, '/');
|
||||
};
|
||||
$ignore = array_map($map, $this->phpci->ignore);
|
||||
|
||||
if (count($this->phpci->ignore)) {
|
||||
$map = function ($item) {
|
||||
return ' --exclude ' . rtrim($item, DIRECTORY_SEPARATOR);
|
||||
};
|
||||
|
||||
$ignore = array_map($map, $this->phpci->ignore);
|
||||
$ignore = implode('', $ignore);
|
||||
}
|
||||
|
||||
$phploc = $this->phpci->findBinary('phploc');
|
||||
|
||||
$success = $this->phpci->executeCommand($phploc . ' %s "%s"', $ignore, $this->directory);
|
||||
$output = $this->phpci->getLastOutput();
|
||||
$output = $this->phpci->getLastOutput();
|
||||
|
||||
if (preg_match_all('/\((LOC|CLOC|NCLOC|LLOC)\)\s+([0-9]+)/', $output, $matches)) {
|
||||
$data = array();
|
||||
|
|
|
@ -55,10 +55,10 @@ class PhpParallelLint implements \PHPCI\Plugin
|
|||
*/
|
||||
public function __construct(Builder $phpci, Build $build, array $options = array())
|
||||
{
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->directory = $phpci->buildPath;
|
||||
$this->ignore = $this->phpci->ignore;
|
||||
$this->phpci = $phpci;
|
||||
$this->build = $build;
|
||||
$this->directory = $phpci->buildPath;
|
||||
$this->ignore = $this->phpci->ignore;
|
||||
|
||||
if (isset($options['directory'])) {
|
||||
$this->directory = $phpci->buildPath.$options['directory'];
|
||||
|
|
|
@ -155,7 +155,7 @@ class PhpTalLint implements PHPCI\Plugin
|
|||
if (!$this->lintFile($itemPath)) {
|
||||
$success = false;
|
||||
}
|
||||
} elseif ($item->isDir() && $this->recursive && !$this->lintDirectory($itemPath . '/')) {
|
||||
} elseif ($item->isDir() && $this->recursive && !$this->lintDirectory($itemPath . DIRECTORY_SEPARATOR)) {
|
||||
$success = false;
|
||||
}
|
||||
|
||||
|
@ -202,7 +202,9 @@ class PhpTalLint implements PHPCI\Plugin
|
|||
|
||||
list($suffixes, $tales) = $this->getFlags();
|
||||
|
||||
$lint = dirname(__FILE__) . '/../../vendor/phptal/phptal/tools/phptal_lint.php';
|
||||
$lint = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR;
|
||||
$lint .= 'vendor' . DIRECTORY_SEPARATOR . 'phptal' . DIRECTORY_SEPARATOR . 'phptal' . DIRECTORY_SEPARATOR;
|
||||
$lint .= 'tools' . DIRECTORY_SEPARATOR . 'phptal_lint.php';
|
||||
$cmd = '/usr/bin/env php ' . $lint . ' %s %s "%s"';
|
||||
|
||||
$this->phpci->executeCommand($cmd, $suffixes, $tales, $this->phpci->buildPath . $path);
|
||||
|
@ -222,7 +224,7 @@ class PhpTalLint implements PHPCI\Plugin
|
|||
|
||||
$row = str_replace('(use -i to include your custom modifier functions)', '', $row);
|
||||
$message = str_replace($name . ': ', '', $row);
|
||||
|
||||
|
||||
$parts = explode(' (line ', $message);
|
||||
|
||||
$message = trim($parts[0]);
|
||||
|
|
|
@ -76,8 +76,8 @@ class PhpUnit implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin
|
|||
return 'phpunit.xml';
|
||||
}
|
||||
|
||||
if (file_exists($buildPath . 'tests/phpunit.xml')) {
|
||||
return 'tests/phpunit.xml';
|
||||
if (file_exists($buildPath . 'tests' . DIRECTORY_SEPARATOR . 'phpunit.xml')) {
|
||||
return 'tests' . DIRECTORY_SEPARATOR . 'phpunit.xml';
|
||||
}
|
||||
|
||||
if (file_exists($buildPath . 'phpunit.xml.dist')) {
|
||||
|
@ -85,7 +85,7 @@ class PhpUnit implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin
|
|||
}
|
||||
|
||||
if (file_exists($buildPath . 'tests/phpunit.xml.dist')) {
|
||||
return 'tests/phpunit.xml.dist';
|
||||
return 'tests' . DIRECTORY_SEPARATOR . 'phpunit.xml.dist';
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -194,7 +194,7 @@ class PhpUnit implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin
|
|||
} else {
|
||||
if ($this->runFrom) {
|
||||
$curdir = getcwd();
|
||||
chdir($this->phpci->buildPath.'/'.$this->runFrom);
|
||||
chdir($this->phpci->buildPath . DIRECTORY_SEPARATOR . $this->runFrom);
|
||||
}
|
||||
|
||||
$phpunit = $this->phpci->findBinary('phpunit');
|
||||
|
|
|
@ -163,7 +163,7 @@ class TechnicalDebt implements PHPCI\Plugin, PHPCI\ZeroConfigPlugin
|
|||
}
|
||||
|
||||
// Ignore hidden files, else .git, .sass_cache, etc. all get looped over
|
||||
if (stripos($filePath, '/.') !== false) {
|
||||
if (stripos($filePath, DIRECTORY_SEPARATOR . '.') !== false) {
|
||||
$skipFile = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ namespace PHPCI\Plugin\Util;
|
|||
*/
|
||||
class Factory
|
||||
{
|
||||
const TYPE_ARRAY = "array";
|
||||
const TYPE_CALLABLE = "callable";
|
||||
const TYPE_ARRAY = "array";
|
||||
const TYPE_CALLABLE = "callable";
|
||||
const INTERFACE_PHPCI_PLUGIN = '\PHPCI\Plugin';
|
||||
|
||||
private $currentPluginOptions;
|
||||
|
|
|
@ -56,6 +56,7 @@ class FilesPluginInformation implements InstalledPluginInformation
|
|||
if ($this->pluginInfo === null) {
|
||||
$this->loadPluginInfo();
|
||||
}
|
||||
|
||||
return $this->pluginInfo;
|
||||
}
|
||||
|
||||
|
@ -83,7 +84,7 @@ class FilesPluginInformation implements InstalledPluginInformation
|
|||
$this->pluginInfo = array();
|
||||
foreach ($this->files as $fileInfo) {
|
||||
if ($fileInfo instanceof \SplFileInfo) {
|
||||
if ($fileInfo->isFile() && $fileInfo->getExtension()=='php') {
|
||||
if ($fileInfo->isFile() && $fileInfo->getExtension() == 'php') {
|
||||
$this->addPluginFromFile($fileInfo);
|
||||
}
|
||||
}
|
||||
|
@ -99,11 +100,11 @@ class FilesPluginInformation implements InstalledPluginInformation
|
|||
$class = $this->getFullClassFromFile($fileInfo);
|
||||
|
||||
if (!is_null($class)) {
|
||||
$newPlugin = new \stdClass();
|
||||
$newPlugin->class = $class;
|
||||
$newPlugin = new \stdClass();
|
||||
$newPlugin->class = $class;
|
||||
$newPlugin->source = "core";
|
||||
$parts = explode('\\', $newPlugin->class);
|
||||
$newPlugin->name = end($parts);
|
||||
$parts = explode('\\', $newPlugin->class);
|
||||
$newPlugin->name = end($parts);
|
||||
|
||||
$this->pluginInfo[] = $newPlugin;
|
||||
}
|
||||
|
@ -123,11 +124,11 @@ class FilesPluginInformation implements InstalledPluginInformation
|
|||
|
||||
if (isset($matches[1])) {
|
||||
$className = $matches[1];
|
||||
|
||||
|
||||
$matches = array();
|
||||
preg_match('#namespace +([A-Za-z\\\\]+);#i', $contents, $matches);
|
||||
$namespace = $matches[1];
|
||||
|
||||
|
||||
return $namespace . '\\' . $className;
|
||||
} else {
|
||||
return null;
|
||||
|
|
|
@ -32,9 +32,11 @@ class PluginInformationCollection implements InstalledPluginInformation
|
|||
public function getInstalledPlugins()
|
||||
{
|
||||
$arr = array();
|
||||
|
||||
foreach ($this->pluginInformations as $single) {
|
||||
$arr = array_merge($arr, $single->getInstalledPlugins());
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
|
@ -47,9 +49,11 @@ class PluginInformationCollection implements InstalledPluginInformation
|
|||
public function getPluginClasses()
|
||||
{
|
||||
$arr = array();
|
||||
|
||||
foreach ($this->pluginInformations as $single) {
|
||||
$arr = array_merge($arr, $single->getPluginClasses());
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -235,18 +235,20 @@ class TapParser
|
|||
*/
|
||||
protected function processYamlBlock($indent)
|
||||
{
|
||||
$startLine = $this->lineNumber+1;
|
||||
$endLine = $indent.'...';
|
||||
$startLine = $this->lineNumber + 1;
|
||||
$endLine = $indent . '...';
|
||||
$yamlLines = array();
|
||||
|
||||
do {
|
||||
$line = $this->nextLine();
|
||||
|
||||
if ($line === false) {
|
||||
throw new Exception(Lang::get('tap_error_endless_yaml', $startLine));
|
||||
} elseif ($line === $endLine) {
|
||||
break;
|
||||
}
|
||||
$yamlLines[] = substr($line, strlen($indent));
|
||||
|
||||
$yamlLines[] = substr($line, strlen($indent));
|
||||
} while (true);
|
||||
|
||||
return Yaml::parse(join("\n", $yamlLines));
|
||||
|
|
|
@ -132,8 +132,9 @@ class XMPP implements \PHPCI\Plugin
|
|||
*/
|
||||
public function findConfigFile()
|
||||
{
|
||||
if (file_exists($this->phpci->buildPath . '/.sendxmpprc')) {
|
||||
if (md5(file_get_contents($this->phpci->buildPath . '/.sendxmpprc')) !== md5($this->getConfigFormat())) {
|
||||
if (file_exists($this->phpci->buildPath . DIRECTORY_SEPARATOR . '.sendxmpprc')) {
|
||||
if (md5(file_get_contents($this->phpci->buildPath . DIRECTORY_SEPARATOR . '.sendxmpprc'))
|
||||
!== md5($this->getConfigFormat())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -160,7 +161,7 @@ class XMPP implements \PHPCI\Plugin
|
|||
/*
|
||||
* Try to build conf file
|
||||
*/
|
||||
$config_file = $this->phpci->buildPath . '/.sendxmpprc';
|
||||
$config_file = $this->phpci->buildPath . DIRECTORY_SEPARATOR . '.sendxmpprc';
|
||||
if (is_null($this->findConfigFile())) {
|
||||
file_put_contents($config_file, $this->getConfigFormat());
|
||||
chmod($config_file, 0600);
|
||||
|
@ -174,7 +175,7 @@ class XMPP implements \PHPCI\Plugin
|
|||
$tls = ' -t';
|
||||
}
|
||||
|
||||
$message_file = $this->phpci->buildPath . '/' . uniqid('xmppmessage');
|
||||
$message_file = $this->phpci->buildPath . DIRECTORY_SEPARATOR . uniqid('xmppmessage');
|
||||
if ($this->buildMessage($message_file) === false) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ class BuildErrorStore extends BuildErrorStoreBase
|
|||
$query .= ' AND created_date > :since';
|
||||
}
|
||||
|
||||
$query .= ' LIMIT 5000';
|
||||
$query .= ' LIMIT 15000';
|
||||
|
||||
$stmt = Database::getConnection('read')->prepare($query);
|
||||
|
||||
|
|
|
@ -107,6 +107,7 @@ class InstallCommandTest extends \PHPUnit_Framework_TestCase
|
|||
'--admin-name' => 'phpci4',
|
||||
'--admin-pass' => 'phpci5',
|
||||
'--url' => 'http://test.phpci.org',
|
||||
'--queue-disabled' => null,
|
||||
);
|
||||
|
||||
if (!is_null($exclude)) {
|
||||
|
|
2
console
|
@ -22,6 +22,7 @@ use PHPCI\Command\PollCommand;
|
|||
use PHPCI\Command\CreateAdminCommand;
|
||||
use PHPCI\Command\CreateBuildCommand;
|
||||
use PHPCI\Command\WorkerCommand;
|
||||
use PHPCI\Command\RebuildQueueCommand;
|
||||
use PHPCI\Service\BuildService;
|
||||
use Symfony\Component\Console\Application;
|
||||
use b8\Store\Factory;
|
||||
|
@ -38,5 +39,6 @@ $application->add(new PollCommand($loggerConfig->getFor('PollCommand')));
|
|||
$application->add(new CreateAdminCommand(Factory::getStore('User')));
|
||||
$application->add(new CreateBuildCommand(Factory::getStore('Project'), new BuildService(Factory::getStore('Build'))));
|
||||
$application->add(new WorkerCommand($loggerConfig->getFor('WorkerCommand')));
|
||||
$application->add(new RebuildQueueCommand($loggerConfig->getFor('RebuildQueueCommand')));
|
||||
|
||||
$application->run();
|
||||
|
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 8 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 393 KiB After Width: | Height: | Size: 374 KiB |
Before Width: | Height: | Size: 369 KiB After Width: | Height: | Size: 341 KiB |
Before Width: | Height: | Size: 382 KiB After Width: | Height: | Size: 355 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 569 B |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 451 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 177 B |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 112 B |
Before Width: | Height: | Size: 290 B After Width: | Height: | Size: 112 B |
Before Width: | Height: | Size: 292 B After Width: | Height: | Size: 112 B |
Before Width: | Height: | Size: 284 B After Width: | Height: | Size: 112 B |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 352 B After Width: | Height: | Size: 345 B |
Before Width: | Height: | Size: 1,022 B After Width: | Height: | Size: 1,009 B |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 20 KiB |
|
@ -89,7 +89,7 @@ var locPlugin = ActiveBuild.UiPlugin.extend({
|
|||
drawChart: function () {
|
||||
var self = this;
|
||||
|
||||
if ($('#information').hasClass('active') && self.chartData) {
|
||||
if ($('#information').hasClass('active') && self.chartData && self.lastData) {
|
||||
$('#build-lines-chart').show();
|
||||
|
||||
var ctx = $("#phploc-lines-chart").get(0).getContext("2d");
|
||||
|
|
|
@ -101,13 +101,12 @@ var warningsPlugin = ActiveBuild.UiPlugin.extend({
|
|||
|
||||
var i = 0;
|
||||
for (var key in self.keys) {
|
||||
self.chartData[i].data.push(parseInt(self.data[build][key]));
|
||||
|
||||
self.chartData.datasets[i].data.push(parseInt(self.data[build][key]));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(self.chartData);
|
||||
|
||||
self.drawChart();
|
||||
},
|
||||
|
||||
|
|
|
@ -73,14 +73,16 @@ var Build = Class.extend({
|
|||
var uri = 'build/meta/' + self.buildId;
|
||||
var query = query || {};
|
||||
|
||||
if (name == 'build-updated') {
|
||||
uri = 'build/data/' + self.buildId + '?since=' + self.buildData.since;
|
||||
}
|
||||
|
||||
var cb = function() {
|
||||
var fullUri = window.PHPCI_URL + uri;
|
||||
|
||||
if (name == 'build-updated') {
|
||||
fullUri = window.PHPCI_URL + 'build/data/' + self.buildId + '?since=' + self.buildData.since;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
dataType: "json",
|
||||
url: window.PHPCI_URL + uri,
|
||||
url: fullUri,
|
||||
data: query,
|
||||
success: function(data) {
|
||||
$(window).trigger({type: name, queryData: data});
|
||||
|
|