diff --git a/PHPCI/Builder.php b/PHPCI/Builder.php index b3ff03a9..5ac7a9b0 100644 --- a/PHPCI/Builder.php +++ b/PHPCI/Builder.php @@ -121,29 +121,43 @@ class Builder $commitId = $this->build->getCommitId(); $url = $this->build->getProject()->getGitUrl(); $key = $this->build->getProject()->getGitKey(); + $type = $this->build->getProject()->getType(); $buildId = 'project' . $this->build->getProject()->getId() . '-build' . $this->build->getId(); $this->ciDir = realpath(dirname(__FILE__) . '/../') . '/'; $this->buildPath = $this->ciDir . 'build/' . $buildId . '/'; - mkdir($this->buildPath, 0777, true); - if(!empty($key)) - { - // Do an SSH clone: - $keyFile = $this->ciDir . 'build/' . $buildId . '.key'; - file_put_contents($keyFile, $key); - chmod($keyFile, 0600); - $this->executeCommand('ssh-agent ssh-add '.$keyFile.' && git clone -b ' .$this->build->getBranch() . ' ' .$url.' '.$this->buildPath.' && ssh-agent -k'); - unlink($keyFile); + switch ($type) { + case 'local': + $reference = $this->build->getProject()->getReference(); + $this->buildPath = $this->ciDir . 'build/' . $buildId; + if(is_link($this->buildPath) && is_file($this->buildPath)) { + } else { + symlink($reference, $this->buildPath); + } + $this->buildPath .= '/'; + break; + default: + mkdir($this->buildPath, 0777, true); + if(!empty($key)) + { + // Do an SSH clone: + $keyFile = $this->ciDir . 'build/' . $buildId . '.key'; + file_put_contents($keyFile, $key); + chmod($keyFile, 0600); + $this->executeCommand('ssh-agent ssh-add '.$keyFile.' && git clone -b ' .$this->build->getBranch() . ' ' .$url.' '.$this->buildPath.' && ssh-agent -k'); + unlink($keyFile); + } + else + { + // Do an HTTP clone: + $this->executeCommand('git clone -b ' .$this->build->getBranch() . ' ' .$url.' '.$this->buildPath); + } + break; } - else - { - // Do an HTTP clone: - $this->executeCommand('git clone -b ' .$this->build->getBranch() . ' ' .$url.' '.$this->buildPath); - } - + if(!is_file($this->buildPath . 'phpci.yml')) { $this->logFailure('Project does not contain a phpci.yml file.'); @@ -179,6 +193,11 @@ class Builder protected function executePlugins($stage) { + if ( !array_key_exists($stage, $this->config) || !is_array($this->config[$stage]) ) + { + return; + } + foreach($this->config[$stage] as $plugin => $options) { $this->log(''); @@ -202,7 +221,7 @@ class Builder { $this->success = false; } - + continue; } @@ -216,7 +235,7 @@ class Builder { $this->success = false; } - + $this->logFailure('PLUGIN STATUS: FAILED'); continue; } diff --git a/PHPCI/Controller/ProjectController.php b/PHPCI/Controller/ProjectController.php index d0834df8..a9a947f6 100644 --- a/PHPCI/Controller/ProjectController.php +++ b/PHPCI/Controller/ProjectController.php @@ -128,7 +128,7 @@ class ProjectController extends b8\Controller { throw new \Exception('You do not have permission to do that.'); } - + $method = Registry::getInstance()->get('requestMethod'); $project = $this->_projectStore->getById($id); @@ -180,15 +180,15 @@ class ProjectController extends b8\Controller $field = new Form\Element\Select('type'); $field->setRequired(true); - $field->setOptions(array('github' => 'Github', 'bitbucket' => 'Bitbucket')); + $field->setOptions(array('github' => 'Github', 'bitbucket' => 'Bitbucket', 'local' => 'Local FS')); $field->setLabel('Where is your project hosted?'); $field->setClass('span4'); $form->addField($field); $field = new Form\Element\Text('reference'); $field->setRequired(true); - $field->setPattern('[a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+'); - $field->setLabel('Repository Name on Github / Bitbucket (e.g. block8/phpci)'); + // $field->setPattern('[a-zA-Z0-9_\-]+\/[a-zA-Z0-9_\-]+'); + $field->setLabel('Repository Name on Github / Bitbucket (e.g. block8/phpci) or directory location'); $field->setClass('span4'); $form->addField($field); diff --git a/PHPCI/Model/Base/BuildBase.php b/PHPCI/Model/Base/BuildBase.php index fb9987d5..81726e34 100644 --- a/PHPCI/Model/Base/BuildBase.php +++ b/PHPCI/Model/Base/BuildBase.php @@ -16,126 +16,104 @@ class BuildBase extends Model protected $_tableName = 'build'; protected $_modelName = 'Build'; protected $_data = array( - 'id' => null, - 'project_id' => null, - 'commit_id' => null, - 'status' => null, - 'log' => null, - 'branch' => null, - 'created' => null, - 'started' => null, - 'finished' => null, - ); + 'id' => null, + 'project_id' => null, + 'commit_id' => null, + 'status' => null, + 'log' => null, + 'branch' => null, + 'created' => null, + 'started' => null, + 'finished' => null, + ); protected $_getters = array( - 'id' => 'getId', - 'project_id' => 'getProjectId', - 'commit_id' => 'getCommitId', - 'status' => 'getStatus', - 'log' => 'getLog', - 'branch' => 'getBranch', - 'created' => 'getCreated', - 'started' => 'getStarted', - 'finished' => 'getFinished', + 'id' => 'getId', + 'project_id' => 'getProjectId', + 'commit_id' => 'getCommitId', + 'status' => 'getStatus', + 'log' => 'getLog', + 'branch' => 'getBranch', + 'created' => 'getCreated', + 'started' => 'getStarted', + 'finished' => 'getFinished', - 'Project' => 'getProject', + 'Project' => 'getProject', - ); + ); protected $_setters = array( - 'id' => 'setId', - 'project_id' => 'setProjectId', - 'commit_id' => 'setCommitId', - 'status' => 'setStatus', - 'log' => 'setLog', - 'branch' => 'setBranch', - 'created' => 'setCreated', - 'started' => 'setStarted', - 'finished' => 'setFinished', + 'id' => 'setId', + 'project_id' => 'setProjectId', + 'commit_id' => 'setCommitId', + 'status' => 'setStatus', + 'log' => 'setLog', + 'branch' => 'setBranch', + 'created' => 'setCreated', + 'started' => 'setStarted', + 'finished' => 'setFinished', - 'Project' => 'setProject', - ); + 'Project' => 'setProject', + ); public $columns = array( - 'id' => array( - 'type' => 'int', - 'length' => '11', + 'id' => array( + 'type' => 'int', + 'length' => '11', - 'primary_key' => true, - 'auto_increment' => true, + 'primary_key' => true, + 'auto_increment' => true, - ), - 'project_id' => array( - 'type' => 'int', - 'length' => '11', + ), + 'project_id' => array( + 'type' => 'int', + 'length' => '11', + ), + 'commit_id' => array( + 'type' => 'varchar', + 'length' => '50', + ), + 'status' => array( + 'type' => 'tinyint', + 'length' => '4', + ), + 'log' => array( + 'type' => 'text', + 'length' => '', + 'nullable' => true, - ), - 'commit_id' => array( - 'type' => 'varchar', - 'length' => '50', + ), + 'branch' => array( + 'type' => 'varchar', + 'length' => '50', + ), + 'created' => array( + 'type' => 'datetime', + 'length' => '', + 'nullable' => true, - - - ), - 'status' => array( - 'type' => 'tinyint', - 'length' => '4', - - - - - ), - 'log' => array( - 'type' => 'text', - 'length' => '', - 'nullable' => true, - - - - ), - 'branch' => array( - 'type' => 'varchar', - 'length' => '50', - - - - - ), - 'created' => array( - 'type' => 'datetime', - 'length' => '', - 'nullable' => true, - - - - ), - 'started' => array( - 'type' => 'datetime', - 'length' => '', - 'nullable' => true, - - - - ), - 'finished' => array( - 'type' => 'datetime', - 'length' => '', - 'nullable' => true, - - - - ), - ); + ), + 'started' => array( + 'type' => 'datetime', + 'length' => '', + 'nullable' => true, + ), + 'finished' => array( + 'type' => 'datetime', + 'length' => '', + 'nullable' => true, + ), + ); public $indexes = array( - 'PRIMARY' => array('unique' => true, 'columns' => 'id'), - 'project_id' => array('columns' => 'project_id'), - 'idx_status' => array('columns' => 'status'), - ); + 'PRIMARY' => array('unique' => true, 'columns' => 'id'), + 'project_id' => array('columns' => 'project_id'), + 'idx_status' => array('columns' => 'status'), + ); public $foreignKeys = array( - 'build_ibfk_1' => array('local_col' => 'project_id', 'update' => 'CASCADE', 'delete' => 'CASCADE', 'table' => 'project', 'col' => 'id'), - ); + 'build_ibfk_1' => array('local_col' => 'project_id', 'update' => 'CASCADE', 'delete' => 'CASCADE', 'table' => 'project', 'col' => 'id'), + ); @@ -143,7 +121,7 @@ class BuildBase extends Model { $rtn = $this->_data['id']; - + return $rtn; } @@ -151,7 +129,7 @@ class BuildBase extends Model { $rtn = $this->_data['project_id']; - + return $rtn; } @@ -159,7 +137,7 @@ class BuildBase extends Model { $rtn = $this->_data['commit_id']; - + return $rtn; } @@ -167,7 +145,7 @@ class BuildBase extends Model { $rtn = $this->_data['status']; - + return $rtn; } @@ -175,7 +153,7 @@ class BuildBase extends Model { $rtn = $this->_data['log']; - + return $rtn; } @@ -183,7 +161,7 @@ class BuildBase extends Model { $rtn = $this->_data['branch']; - + return $rtn; } @@ -191,13 +169,13 @@ class BuildBase extends Model { $rtn = $this->_data['created']; - + if(!empty($rtn)) { $rtn = new \DateTime($rtn); } - + return $rtn; } @@ -205,13 +183,13 @@ class BuildBase extends Model { $rtn = $this->_data['started']; - + if(!empty($rtn)) { $rtn = new \DateTime($rtn); } - + return $rtn; } @@ -219,13 +197,13 @@ class BuildBase extends Model { $rtn = $this->_data['finished']; - + if(!empty($rtn)) { $rtn = new \DateTime($rtn); } - + return $rtn; } @@ -277,7 +255,7 @@ class BuildBase extends Model { $this->_validateNotNull('Status', $value); $this->_validateInt('Status', $value); - if($this->_data['status'] == $value) + if($this->_data['status'] === $value) { return; } diff --git a/PHPCI/Model/Base/ProjectBase.php b/PHPCI/Model/Base/ProjectBase.php index 451871e5..c60649fc 100644 --- a/PHPCI/Model/Base/ProjectBase.php +++ b/PHPCI/Model/Base/ProjectBase.php @@ -94,7 +94,7 @@ class ProjectBase extends Model { $rtn = $this->_data['id']; - + return $rtn; } @@ -102,7 +102,7 @@ class ProjectBase extends Model { $rtn = $this->_data['title']; - + return $rtn; } @@ -110,7 +110,7 @@ class ProjectBase extends Model { $rtn = $this->_data['reference']; - + return $rtn; } @@ -118,7 +118,7 @@ class ProjectBase extends Model { $rtn = $this->_data['git_key']; - + return $rtn; } @@ -126,7 +126,7 @@ class ProjectBase extends Model { $rtn = $this->_data['type']; - + return $rtn; } @@ -150,7 +150,7 @@ class ProjectBase extends Model { $this->_validateNotNull('Title', $value); $this->_validateString('Title', $value); - if($this->_data['title'] == $value) + if($this->_data['title'] === $value) { return; } @@ -164,7 +164,7 @@ class ProjectBase extends Model { $this->_validateNotNull('Reference', $value); $this->_validateString('Reference', $value); - if($this->_data['reference'] == $value) + if($this->_data['reference'] === $value) { return; } @@ -178,7 +178,7 @@ class ProjectBase extends Model { $this->_validateNotNull('GitKey', $value); $this->_validateString('GitKey', $value); - if($this->_data['git_key'] == $value) + if($this->_data['git_key'] === $value) { return; } @@ -192,7 +192,7 @@ class ProjectBase extends Model { $this->_validateNotNull('Type', $value); $this->_validateString('Type', $value); - if($this->_data['type'] == $value) + if($this->_data['type'] === $value) { return; } diff --git a/PHPCI/Plugin/PhpUnit.php b/PHPCI/Plugin/PhpUnit.php index d34ee3d5..84b65542 100644 --- a/PHPCI/Plugin/PhpUnit.php +++ b/PHPCI/Plugin/PhpUnit.php @@ -17,6 +17,10 @@ class PhpUnit implements \PHPCI\Plugin public function execute() { - return $this->phpci->executeCommand(PHPCI_BIN_DIR . 'phpunit ' . $this->args . ' ' . $this->phpci->buildPath . $this->directory); + $curdir = getcwd(); + chdir($this->phpci->buildPath); + $success = $this->phpci->executeCommand(PHPCI_BIN_DIR . 'phpunit ' . $this->args . ' ' . $this->phpci->buildPath . $this->directory); + chdir($curdir); + return $success; } } \ No newline at end of file diff --git a/composer.json b/composer.json index 92a0292d..f8c9ae0d 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "require": { "block8/b8framework": "dev-master", "phpunit/phpunit": "3.*", + "phpunit/php-code-coverage": "1.2.x", "phpmd/phpmd" : "1.*", "sebastian/phpcpd": "1.*", "squizlabs/php_codesniffer": "1.*", diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..a9266419 Binary files /dev/null and b/favicon.ico differ