From 145670acdeb190ed3016855f63e1d92545cb4152 Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Thu, 13 Apr 2017 22:00:29 +0700 Subject: [PATCH] Build sources instead of 'Manual' word. --- src/PHPCensor/Command/CreateBuildCommand.php | 3 +- .../Command/ScheduleBuildCommand.php | 2 +- .../Controller/ProjectController.php | 19 +++-- .../Controller/WebhookController.php | 2 + src/PHPCensor/Languages/lang.en.php | 7 ++ src/PHPCensor/Languages/lang.ru.php | 7 ++ .../20151015124825_convert_errors.php | 7 +- ...256_added_source_column_to_build_table.php | 33 ++++++++ src/PHPCensor/Model/Build.php | 80 +++++++++++++++++-- src/PHPCensor/Model/Build/BitbucketBuild.php | 18 ++--- src/PHPCensor/Model/Build/GithubBuild.php | 13 +-- src/PHPCensor/Model/Build/GogsBuild.php | 6 +- src/PHPCensor/Model/Build/MercurialBuild.php | 9 ++- src/PHPCensor/Model/Build/RemoteGitBuild.php | 20 +++-- src/PHPCensor/Model/Build/SubversionBuild.php | 2 +- src/PHPCensor/Service/BuildService.php | 17 ++-- src/PHPCensor/Store/BuildMetaStore.php | 2 +- src/PHPCensor/Store/BuildStore.php | 28 +++++++ src/PHPCensor/View/Build/view.phtml | 8 +- src/PHPCensor/View/BuildStatus/view.phtml | 10 +-- src/PHPCensor/View/Home/ajax-timeline.phtml | 28 +++---- src/PHPCensor/View/Home/index.phtml | 30 +++---- src/PHPCensor/View/Project/ajax-builds.phtml | 15 ++-- src/PHPCensor/View/Project/view.phtml | 1 + tests/PHPCensor/Service/BuildServiceTest.php | 8 +- 25 files changed, 266 insertions(+), 109 deletions(-) create mode 100644 src/PHPCensor/Migrations/20170413131256_added_source_column_to_build_table.php diff --git a/src/PHPCensor/Command/CreateBuildCommand.php b/src/PHPCensor/Command/CreateBuildCommand.php index e92cf947..28b97592 100644 --- a/src/PHPCensor/Command/CreateBuildCommand.php +++ b/src/PHPCensor/Command/CreateBuildCommand.php @@ -2,6 +2,7 @@ namespace PHPCensor\Command; +use PHPCensor\Model\Build; use PHPCensor\Service\BuildService; use PHPCensor\Store\ProjectStore; use Symfony\Component\Console\Command\Command; @@ -72,7 +73,7 @@ class CreateBuildCommand extends Command } try { - $this->buildService->createBuild($project, $environment, $commitId, $branch, null, $ciEmail, $ciMessage); + $this->buildService->createBuild($project, $environment, $commitId, $branch, null, $ciEmail, $ciMessage, Build::SOURCE_MANUAL_CONSOLE); $output->writeln('Build Created'); } catch (\Exception $e) { $output->writeln('Failed'); diff --git a/src/PHPCensor/Command/ScheduleBuildCommand.php b/src/PHPCensor/Command/ScheduleBuildCommand.php index 69d89270..1f76df63 100644 --- a/src/PHPCensor/Command/ScheduleBuildCommand.php +++ b/src/PHPCensor/Command/ScheduleBuildCommand.php @@ -90,7 +90,7 @@ class ScheduleBuildCommand extends Command } try { - $this->buildService->createBuild($project, null); + $this->buildService->createBuild($project, null, '', null, null, null, null, Build::SOURCE_PERIODICAL); $output->writeln("Build Created for {$project->getTitle()}"); } catch (\Exception $e) { $output->writeln('Failed'); diff --git a/src/PHPCensor/Controller/ProjectController.php b/src/PHPCensor/Controller/ProjectController.php index 4b782e0c..e78317b1 100644 --- a/src/PHPCensor/Controller/ProjectController.php +++ b/src/PHPCensor/Controller/ProjectController.php @@ -3,8 +3,8 @@ namespace PHPCensor\Controller; use b8; -use b8\Form; use b8\Exception\HttpException\NotFoundException; +use b8\Form; use b8\Store; use PHPCensor; use PHPCensor\BuildFactory; @@ -13,6 +13,8 @@ use PHPCensor\Helper\Lang; use PHPCensor\Helper\SshKey; use PHPCensor\Service\BuildService; use PHPCensor\Service\ProjectService; +use PHPCensor\Model\Build; +use b8\Http\Response\RedirectResponse; /** * Project Controller - Allows users to create, edit and view projects. @@ -96,7 +98,7 @@ class ProjectController extends PHPCensor\Controller $pages = $builds[1] == 0 ? 1 : ceil($builds[1] / $perPage); if ($page > $pages) { - $response = new b8\Http\Response\RedirectResponse(); + $response = new RedirectResponse(); $response->setHeader('Location', APP_URL . 'project/view/' . $projectId); return $response; @@ -132,7 +134,7 @@ class ProjectController extends PHPCensor\Controller * * @throws NotFoundException * - * @return b8\Http\Response\RedirectResponse + * @return RedirectResponse * */ public function build($projectId) @@ -175,11 +177,12 @@ class ProjectController extends PHPCensor\Controller $build = $this->buildService->createBuild( $project, $environment, - null, + '', $branch, null, $email, null, + Build::SOURCE_MANUAL_WEB, $extra ); @@ -187,7 +190,7 @@ class ProjectController extends PHPCensor\Controller $_SESSION['global_error'] = Lang::get('add_to_queue_failed'); } - $response = new b8\Http\Response\RedirectResponse(); + $response = new RedirectResponse(); $response->setHeader('Location', APP_URL.'build/view/' . $build->getId()); return $response; @@ -203,7 +206,7 @@ class ProjectController extends PHPCensor\Controller $project = $this->projectStore->getById($projectId); $this->projectService->deleteProject($project); - $response = new b8\Http\Response\RedirectResponse(); + $response = new RedirectResponse(); $response->setHeader('Location', APP_URL); return $response; @@ -324,7 +327,7 @@ class ProjectController extends PHPCensor\Controller $project = $this->projectService->createProject($title, $type, $reference, $options); - $response = new b8\Http\Response\RedirectResponse(); + $response = new RedirectResponse(); $response->setHeader('Location', APP_URL.'project/view/' . $project->getId()); return $response; @@ -393,7 +396,7 @@ class ProjectController extends PHPCensor\Controller $project = $this->projectService->updateProject($project, $title, $type, $reference, $options); - $response = new b8\Http\Response\RedirectResponse(); + $response = new RedirectResponse(); $response->setHeader('Location', APP_URL.'project/view/' . $project->getId()); return $response; diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index 61f5de01..4e040bbf 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -665,6 +665,7 @@ class WebhookController extends Controller $tag, $committer, $commitMessage, + Build::SOURCE_WEBHOOK, $extra ); @@ -702,6 +703,7 @@ class WebhookController extends Controller $tag, $committer, $commitMessage, + Build::SOURCE_WEBHOOK, $extra ); diff --git a/src/PHPCensor/Languages/lang.en.php b/src/PHPCensor/Languages/lang.en.php index 5fa56d22..f42e5987 100644 --- a/src/PHPCensor/Languages/lang.en.php +++ b/src/PHPCensor/Languages/lang.en.php @@ -145,6 +145,13 @@ PHP Censor', 'next_link' => 'Next »', 'public_key' => 'Public Key', 'delete_build' => 'Delete Build', + 'build_source' => 'Build source', + + 'source_unknown' => 'Unknown', + 'source_manual_web' => 'Manual (from Web)', + 'source_manual_console' => 'Manual (from CLI)', + 'source_periodical' => 'Periodical', + 'source_webhook' => 'Webhook', 'webhooks' => 'Webhooks', 'webhooks_help_github' => 'To automatically build this project when new commits are pushed, add the URL below diff --git a/src/PHPCensor/Languages/lang.ru.php b/src/PHPCensor/Languages/lang.ru.php index b125d28d..23d7d552 100644 --- a/src/PHPCensor/Languages/lang.ru.php +++ b/src/PHPCensor/Languages/lang.ru.php @@ -142,6 +142,13 @@ PHP Censor', 'next_link' => 'След. »', 'public_key' => 'Публичный ключ', 'delete_build' => 'Удалить сборку', + 'build_source' => 'Источник сборки', + + 'source_unknown' => 'Неизвестный', + 'source_manual_web' => 'Вручную (Через Web)', + 'source_manual_console' => 'Вручную (Через CLI)', + 'source_periodical' => 'Переодический', + 'source_webhook' => 'Webhook', 'webhooks' => 'Webhooks', 'webhooks_help_github' => 'Чтобы Автоматически собирать этот проект при публикации новых коммитов, добавьте URL ниже в качестве нового хука в разделе настроек Webhooks diff --git a/src/PHPCensor/Migrations/20151015124825_convert_errors.php b/src/PHPCensor/Migrations/20151015124825_convert_errors.php index 2051de60..37751b69 100644 --- a/src/PHPCensor/Migrations/20151015124825_convert_errors.php +++ b/src/PHPCensor/Migrations/20151015124825_convert_errors.php @@ -3,6 +3,7 @@ use Phinx\Migration\AbstractMigration; use PHPCensor\Model\BuildMeta; use PHPCensor\Model\BuildError; +use b8\Store\Factory; class ConvertErrors extends AbstractMigration { @@ -20,10 +21,10 @@ class ConvertErrors extends AbstractMigration { $count = 100; - $this->metaStore = \b8\Store\Factory::getStore('BuildMeta'); - $this->errorStore = \b8\Store\Factory::getStore('BuildError'); + $this->metaStore = Factory::getStore('BuildMeta'); + $this->errorStore = Factory::getStore('BuildError'); - while ($count == 100) { + while ($count === 100) { $data = $this->metaStore->getErrorsForUpgrade(100); $count = count($data); diff --git a/src/PHPCensor/Migrations/20170413131256_added_source_column_to_build_table.php b/src/PHPCensor/Migrations/20170413131256_added_source_column_to_build_table.php new file mode 100644 index 00000000..a63a3a17 --- /dev/null +++ b/src/PHPCensor/Migrations/20170413131256_added_source_column_to_build_table.php @@ -0,0 +1,33 @@ +table('build'); + + if (!$table->hasColumn('source')) { + $table + ->addColumn('source', 'integer', ['default' => Build::SOURCE_UNKNOWN]) + ->save(); + + $this->execute("UPDATE build SET source = 4"); + $this->execute("UPDATE build SET source = 1, commit_id = '', commit_message = '' WHERE commit_id = 'Manual'"); + $this->execute("UPDATE build SET source = 1, commit_message = '' WHERE commit_message = 'Manual'"); + } + } + + public function down() + { + $table = $this->table('build'); + + if ($table->hasColumn('source')) { + $table + ->removeColumn('source') + ->save(); + } + } +} diff --git a/src/PHPCensor/Model/Build.php b/src/PHPCensor/Model/Build.php index 54d7d29e..818b5000 100644 --- a/src/PHPCensor/Model/Build.php +++ b/src/PHPCensor/Model/Build.php @@ -25,6 +25,12 @@ class Build extends Model const STATUS_RUNNING = 1; const STATUS_SUCCESS = 2; const STATUS_FAILED = 3; + + const SOURCE_UNKNOWN = 0; + const SOURCE_MANUAL_WEB = 1; + const SOURCE_MANUAL_CONSOLE = 2; + const SOURCE_PERIODICAL = 3; + const SOURCE_WEBHOOK = 4; /** * @var array @@ -59,6 +65,7 @@ class Build extends Model 'commit_message' => null, 'extra' => null, 'environment' => null, + 'source' => Build::SOURCE_UNKNOWN, ]; /** @@ -80,6 +87,7 @@ class Build extends Model 'commit_message' => 'getCommitMessage', 'extra' => 'getExtra', 'environment' => 'getEnvironment', + 'source' => 'getSource', // Foreign key getters: 'Project' => 'getProject', @@ -104,6 +112,7 @@ class Build extends Model 'commit_message' => 'setCommitMessage', 'extra' => 'setExtra', 'environment' => 'setEnvironment', + 'source' => 'setSource', // Foreign key setters: 'Project' => 'setProject', @@ -182,10 +191,15 @@ class Build extends Model 'default' => null, ], 'environment' => [ - 'type' => 'varchar', - 'length' => 250, + 'type' => 'varchar', + 'length' => 250, 'default' => null, ], + 'source' => [ + 'type' => 'int', + 'length' => 11, + 'default' => Build::SOURCE_UNKNOWN, + ], ]; /** @@ -213,25 +227,25 @@ class Build extends Model /** * Get the value of Id / id. * - * @return int + * @return integer */ public function getId() { $rtn = $this->data['id']; - return $rtn; + return (integer)$rtn; } /** * Get the value of ProjectId / project_id. * - * @return int + * @return integer */ public function getProjectId() { $rtn = $this->data['project_id']; - return $rtn; + return (integer)$rtn; } /** @@ -249,13 +263,13 @@ class Build extends Model /** * Get the value of Status / status. * - * @return int + * @return integer */ public function getStatus() { $rtn = $this->data['status']; - return $rtn; + return (integer)$rtn; } /** @@ -1032,6 +1046,36 @@ class Build extends Model $this->setModified('tag'); } + /** + * Get the value of source. + * + * @return string + */ + public function getSource() + { + $rtn = $this->data['source']; + + return (integer)$rtn; + } + + /** + * Set the value of source. + * + * @param $value integer + */ + public function setSource($value) + { + $this->validateInt('Source', $value); + + if ($this->data['source'] === $value) { + return; + } + + $this->data['source'] = $value; + + $this->setModified('source'); + } + /** * Get the value of Environment / environment. * @@ -1107,4 +1151,24 @@ OUT; return $wrapperFile; } + + /** + * @return string + */ + public function getSourceHumanize() + { + switch ($this->getSource()) { + case Build::SOURCE_WEBHOOK: + return 'source_webhook'; + case Build::SOURCE_MANUAL_WEB: + return 'source_manual_web'; + case Build::SOURCE_MANUAL_CONSOLE: + return 'source_manual_console'; + case Build::SOURCE_PERIODICAL: + return 'source_periodical'; + case Build::SOURCE_UNKNOWN: + default: + return 'source_unknown'; + } + } } diff --git a/src/PHPCensor/Model/Build/BitbucketBuild.php b/src/PHPCensor/Model/Build/BitbucketBuild.php index 3b602fbf..77102950 100644 --- a/src/PHPCensor/Model/Build/BitbucketBuild.php +++ b/src/PHPCensor/Model/Build/BitbucketBuild.php @@ -7,6 +7,7 @@ use PHPCensor\Builder; use PHPCensor\Helper\Bitbucket; use PHPCensor\Helper\Diff; use b8\Config; +use PHPCensor\Model\Build; use PHPCensor\Model\BuildError; /** @@ -47,17 +48,16 @@ class BitbucketBuild extends RemoteGitBuild */ public function sendStatusPostback() { - if ('Manual' === $this->getCommitId()) { + if (Build::SOURCE_WEBHOOK !== $this->getSource()) { return false; } - $project = $this->getProject(); - + $project = $this->getProject(); if (empty($project)) { return false; } - $username = Config::getInstance()->get('php-censor.bitbucket.username'); + $username = Config::getInstance()->get('php-censor.bitbucket.username'); $appPassword = Config::getInstance()->get('php-censor.bitbucket.app_password'); if (empty($username) || empty($appPassword) || empty($this->data['id'])) { @@ -261,18 +261,18 @@ class BitbucketBuild extends RemoteGitBuild */ protected function getDiffLineNumber(Builder $builder, $file, $line) { - $line = (integer)$line; - $builder->logExecOutput(false); + $line = (integer)$line; $prNumber = $this->getExtra('pull_request_number'); - $path = $builder->buildPath; + $path = $builder->buildPath; if (!empty($prNumber)) { $builder->executeCommand('cd %s && git diff origin/%s "%s"', $path, $this->getBranch(), $file); } else { $commitId = $this->getCommitId(); - $compare = $commitId == 'Manual' ? 'HEAD' : $commitId; + $compare = empty($commitId) ? 'HEAD' : $commitId; + $builder->executeCommand('cd %s && git diff %s^^ "%s"', $path, $compare, $file); } @@ -281,7 +281,7 @@ class BitbucketBuild extends RemoteGitBuild $diff = $builder->getLastOutput(); $helper = new Diff(); - $lines = $helper->getLinePositions($diff); + $lines = $helper->getLinePositions($diff); return isset($lines[$line]) ? $lines[$line] : null; } diff --git a/src/PHPCensor/Model/Build/GithubBuild.php b/src/PHPCensor/Model/Build/GithubBuild.php index 54f026ca..d160704a 100644 --- a/src/PHPCensor/Model/Build/GithubBuild.php +++ b/src/PHPCensor/Model/Build/GithubBuild.php @@ -7,6 +7,7 @@ use PHPCensor\Builder; use PHPCensor\Helper\Diff; use PHPCensor\Helper\Github; use b8\Config; +use PHPCensor\Model\Build; use PHPCensor\Model\BuildError; /** @@ -45,7 +46,7 @@ class GithubBuild extends RemoteGitBuild */ public function sendStatusPostback() { - if ('Manual' === $this->getCommitId()) { + if (Build::SOURCE_WEBHOOK !== $this->getSource()) { return false; } @@ -246,18 +247,18 @@ class GithubBuild extends RemoteGitBuild */ protected function getDiffLineNumber(Builder $builder, $file, $line) { - $line = (integer)$line; - $builder->logExecOutput(false); + $line = (integer)$line; $prNumber = $this->getExtra('pull_request_number'); - $path = $builder->buildPath; + $path = $builder->buildPath; if (!empty($prNumber)) { $builder->executeCommand('cd %s && git diff origin/%s "%s"', $path, $this->getBranch(), $file); } else { $commitId = $this->getCommitId(); - $compare = $commitId == 'Manual' ? 'HEAD' : $commitId; + $compare = empty($commitId) ? 'HEAD' : $commitId; + $builder->executeCommand('cd %s && git diff %s^^ "%s"', $path, $compare, $file); } @@ -266,7 +267,7 @@ class GithubBuild extends RemoteGitBuild $diff = $builder->getLastOutput(); $helper = new Diff(); - $lines = $helper->getLinePositions($diff); + $lines = $helper->getLinePositions($diff); return isset($lines[$line]) ? $lines[$line] : null; } diff --git a/src/PHPCensor/Model/Build/GogsBuild.php b/src/PHPCensor/Model/Build/GogsBuild.php index a5f08413..cab9ad54 100644 --- a/src/PHPCensor/Model/Build/GogsBuild.php +++ b/src/PHPCensor/Model/Build/GogsBuild.php @@ -12,11 +12,7 @@ class GogsBuild extends RemoteGitBuild */ public function getCommitLink() { - if ($this->getCommitId() !== 'manual'){ - return $this->getProject()->getReference() . '/commit/' . $this->getCommitId(); - } - - return parent::getCommitLink(); + return $this->getProject()->getReference() . '/commit/' . $this->getCommitId(); } /** diff --git a/src/PHPCensor/Model/Build/MercurialBuild.php b/src/PHPCensor/Model/Build/MercurialBuild.php index bcc8ed4a..17976207 100644 --- a/src/PHPCensor/Model/Build/MercurialBuild.php +++ b/src/PHPCensor/Model/Build/MercurialBuild.php @@ -35,6 +35,7 @@ class MercurialBuild extends Build if (!$success) { $builder->logFailure('Failed to clone remote hg repository.'); + return false; } @@ -84,12 +85,12 @@ class MercurialBuild extends Build */ protected function postCloneSetup(Builder $builder, $cloneTo, array $extra = null) { - $success = true; - $commit = $this->getCommitId(); + $success = true; + $commitId = $this->getCommitId(); // Allow switching to a specific branch: - if (!empty($commit) && $commit != 'Manual') { - $cmd = 'cd "%s" && hg checkout %s'; + if (!empty($commitId)) { + $cmd = 'cd "%s" && hg checkout %s'; $success = $builder->executeCommand($cmd, $cloneTo, $this->getBranch()); } diff --git a/src/PHPCensor/Model/Build/RemoteGitBuild.php b/src/PHPCensor/Model/Build/RemoteGitBuild.php index 68a4c018..93301100 100644 --- a/src/PHPCensor/Model/Build/RemoteGitBuild.php +++ b/src/PHPCensor/Model/Build/RemoteGitBuild.php @@ -137,18 +137,24 @@ class RemoteGitBuild extends Build */ protected function postCloneSetup(Builder $builder, $cloneTo, array $extra = null) { - $success = true; - $commit = $this->getCommitId(); - $chdir = 'cd "%s"'; + $success = true; + $commitId = $this->getCommitId(); + $chdir = 'cd "%s"'; - if (empty($this->getEnvironment()) && !empty($commit) && $commit != 'Manual') { - $cmd = $chdir . ' && git checkout %s --quiet'; - $success = $builder->executeCommand($cmd, $cloneTo, $commit); + if (empty($this->getEnvironment()) && !empty($commitId)) { + $cmd = $chdir . ' && git checkout %s --quiet'; + $success = $builder->executeCommand($cmd, $cloneTo, $commitId); } // Always update the commit hash with the actual HEAD hash if ($builder->executeCommand($chdir . ' && git rev-parse HEAD', $cloneTo)) { - $this->setCommitId(trim($builder->getLastOutput())); + $commitId = trim($builder->getLastOutput()); + + $this->setCommitId($commitId); + + if ($builder->executeCommand($chdir . ' && git log -1 --pretty=format:%%s %s', $cloneTo, $commitId)) { + $this->setCommitMessage(trim($builder->getLastOutput())); + } } return $success; diff --git a/src/PHPCensor/Model/Build/SubversionBuild.php b/src/PHPCensor/Model/Build/SubversionBuild.php index 431b5459..68a2ff7d 100644 --- a/src/PHPCensor/Model/Build/SubversionBuild.php +++ b/src/PHPCensor/Model/Build/SubversionBuild.php @@ -95,7 +95,7 @@ class SubversionBuild extends Build { $cmd = $this->svnCommand; - if ($this->getCommitId() != 'Manual') { + if (!empty($this->getCommitId())) { $cmd .= ' -r %s %s "%s"'; $success = $builder->executeCommand($cmd, $this->getCommitId(), $this->getCloneUrl(), $cloneTo); } else { diff --git a/src/PHPCensor/Service/BuildService.php b/src/PHPCensor/Service/BuildService.php index e4e0a67c..af2e3284 100644 --- a/src/PHPCensor/Service/BuildService.php +++ b/src/PHPCensor/Service/BuildService.php @@ -36,11 +36,12 @@ class BuildService /** * @param Project $project * @param string $environment - * @param string|null $commitId + * @param string $commitId * @param string|null $branch * @param string|null $tag * @param string|null $committerEmail * @param string|null $commitMessage + * @param integer $source * @param string|null $extra * * @return \PHPCensor\Model\Build @@ -48,11 +49,12 @@ class BuildService public function createBuild( Project $project, $environment, - $commitId = null, + $commitId = '', $branch = null, $tag = null, $committerEmail = null, $commitMessage = null, + $source = Build::SOURCE_UNKNOWN, $extra = null ) { $build = new Build(); @@ -64,12 +66,8 @@ class BuildService $branches = $project->getBranchesByEnvironment($environment); $build->setExtraValue('branches', $branches); - if (!empty($commitId)) { - $build->setCommitId($commitId); - } else { - $build->setCommitId('Manual'); - $build->setCommitMessage('Manual'); - } + $build->setSource($source); + $build->setCommitId((string)$commitId); if (!empty($branch)) { $build->setBranch($branch); @@ -94,8 +92,7 @@ class BuildService } /** @var Build $build */ - $build = $this->buildStore->save($build); - + $build = $this->buildStore->save($build); $buildId = $build->getId(); if (!empty($buildId)) { diff --git a/src/PHPCensor/Store/BuildMetaStore.php b/src/PHPCensor/Store/BuildMetaStore.php index 4c6e11ad..c69782e9 100644 --- a/src/PHPCensor/Store/BuildMetaStore.php +++ b/src/PHPCensor/Store/BuildMetaStore.php @@ -118,7 +118,7 @@ class BuildMetaStore extends Store public function getErrorsForUpgrade($limit) { $query = 'SELECT * FROM {{build_meta}} - WHERE {{meta_key}} IN (\'phpmd-data\', \'phpcs-data\', \'phpdoccheck-data\', \'technical_debt - data\') + WHERE {{meta_key}} IN (\'phpmd-data\', \'phpcs-data\', \'phpdoccheck-data\', \'technical_debt-data\') ORDER BY {{id}} ASC LIMIT :limit'; $stmt = Database::getConnection('read')->prepareCommon($query); diff --git a/src/PHPCensor/Store/BuildStore.php b/src/PHPCensor/Store/BuildStore.php index 15c0a82d..895ad872 100644 --- a/src/PHPCensor/Store/BuildStore.php +++ b/src/PHPCensor/Store/BuildStore.php @@ -117,6 +117,34 @@ class BuildStore extends Store } } + /** + * @param integer $limit + * @param integer $offset + * + * @return array + */ + public function getBuilds($limit = 5, $offset = 0) + { + $query = 'SELECT * FROM {{build}} ORDER BY {{id}} DESC LIMIT :limit OFFSET :offset'; + $stmt = Database::getConnection('read')->prepareCommon($query); + + $stmt->bindValue(':limit', $limit, \PDO::PARAM_INT); + $stmt->bindValue(':offset', $offset, \PDO::PARAM_INT); + + if ($stmt->execute()) { + $res = $stmt->fetchAll(\PDO::FETCH_ASSOC); + + $map = function ($item) { + return new Build($item); + }; + $rtn = array_map($map, $res); + + return $rtn; + } else { + return []; + } + } + /** * Return an array of the latest builds for a given project. * @param null $projectId diff --git a/src/PHPCensor/View/Build/view.phtml b/src/PHPCensor/View/Build/view.phtml index 60ba7d30..7bba273b 100644 --- a/src/PHPCensor/View/Build/view.phtml +++ b/src/PHPCensor/View/Build/view.phtml @@ -78,10 +78,16 @@
+ + + + diff --git a/src/PHPCensor/View/BuildStatus/view.phtml b/src/PHPCensor/View/BuildStatus/view.phtml index c7c80576..7a30b624 100644 --- a/src/PHPCensor/View/BuildStatus/view.phtml +++ b/src/PHPCensor/View/BuildStatus/view.phtml @@ -75,7 +75,7 @@ Branch: getBranch(); ?>
Committer: getCommitterEmail(); ?> - getCommitId() != 'Manual'): ?> + getCommitId())): ?>
Commit: getCommitId(); ?>

@@ -145,15 +145,15 @@ diff --git a/src/PHPCensor/View/Home/ajax-timeline.phtml b/src/PHPCensor/View/Home/ajax-timeline.phtml index ed9d1cf2..4071721a 100644 --- a/src/PHPCensor/View/Home/ajax-timeline.phtml +++ b/src/PHPCensor/View/Home/ajax-timeline.phtml @@ -74,7 +74,7 @@ use PHPCensor\Model\Build; Build #getId(); ?> — - + getSourceHumanize()); ?>
@@ -85,21 +85,21 @@ use PHPCensor\Model\Build; - — getCommitId() !== 'Manual') { - print sprintf( - '%s (%s)', - $build->getCommitLink(), - substr($build->getCommitId(), 0, 7), - $build->getCommitterEmail() - ); - } else { - print Lang::get('manual_build'); - } + if (!empty($build->getCommitId())) { + echo ' — '; + echo sprintf( + '%s %s', + $build->getCommitLink(), + substr($build->getCommitId(), 0, 7), + $build->getCommitterEmail() ? ('(' . $build->getCommitterEmail() . ')') : '' + ); + if (!empty($build->getCommitMessage())) { + echo ' — '; + print $build->getCommitMessage(); + } + } ?> - — - getCommitMessage(); ?>
diff --git a/src/PHPCensor/View/Home/index.phtml b/src/PHPCensor/View/Home/index.phtml index cc5b9abc..d55301c3 100644 --- a/src/PHPCensor/View/Home/index.phtml +++ b/src/PHPCensor/View/Home/index.phtml @@ -104,8 +104,8 @@ use PHPCensor\Model\Build; Build #getId(); ?> - — - + — + getSourceHumanize()); ?>
@@ -116,21 +116,21 @@ use PHPCensor\Model\Build; - — getCommitId() !== 'Manual') { - print sprintf( - '%s (%s)', - $build->getCommitLink(), - substr($build->getCommitId(), 0, 7), - $build->getCommitterEmail() - ); - } else { - print Lang::get('manual_build'); - } + if (!empty($build->getCommitId())) { + echo ' — '; + echo sprintf( + '%s %s', + $build->getCommitLink(), + substr($build->getCommitId(), 0, 7), + $build->getCommitterEmail() ? ('(' . $build->getCommitterEmail() . ')') : '' + ); + if (!empty($build->getCommitMessage())) { + echo ' — '; + print $build->getCommitMessage(); + } + } ?> - — - getCommitMessage(); ?>
diff --git a/src/PHPCensor/View/Project/ajax-builds.phtml b/src/PHPCensor/View/Project/ajax-builds.phtml index a67a52f6..0aacd198 100644 --- a/src/PHPCensor/View/Project/ajax-builds.phtml +++ b/src/PHPCensor/View/Project/ajax-builds.phtml @@ -40,20 +40,21 @@ switch($build->getStatus()) $branches = $build->getExtra('branches'); ?> - - - + + + + diff --git a/src/PHPCensor/View/Project/view.phtml b/src/PHPCensor/View/Project/view.phtml index b1da5007..805b6631 100644 --- a/src/PHPCensor/View/Project/view.phtml +++ b/src/PHPCensor/View/Project/view.phtml @@ -103,6 +103,7 @@ + diff --git a/tests/PHPCensor/Service/BuildServiceTest.php b/tests/PHPCensor/Service/BuildServiceTest.php index f4c64501..42759f66 100644 --- a/tests/PHPCensor/Service/BuildServiceTest.php +++ b/tests/PHPCensor/Service/BuildServiceTest.php @@ -65,12 +65,13 @@ class BuildServiceTest extends \PHPUnit\Framework\TestCase $this->assertNull($returnValue->getStarted()); $this->assertNull($returnValue->getFinished()); $this->assertNull($returnValue->getLog()); - $this->assertEquals('Manual', $returnValue->getCommitMessage()); + $this->assertEquals(null, $returnValue->getCommitMessage()); $this->assertNull($returnValue->getCommitterEmail()); $this->assertEquals(['branches' => []], $returnValue->getExtra()); $this->assertEquals('master', $returnValue->getBranch()); $this->assertInstanceOf('DateTime', $returnValue->getCreated()); - $this->assertEquals('Manual', $returnValue->getCommitId()); + $this->assertEquals('', $returnValue->getCommitId()); + $this->assertEquals(Build::SOURCE_UNKNOWN, $returnValue->getSource()); } public function testExecute_CreateBuildWithOptions() @@ -120,11 +121,12 @@ class BuildServiceTest extends \PHPUnit\Framework\TestCase $returnValue = $this->testedService->createBuild( $project, null, + '', null, null, null, null, - null, + Build::SOURCE_UNKNOWN, ['item1' => 1001] );
+ getSourceHumanize()); ?> +
- + getCommitId(), 0, 7); ?> getCreated()->format('Y-m-d H:i:s'); ?> getCommitId() !== 'Manual') { + if (!empty($build->getCommitId())) { print sprintf( - '%s (%s)', + '%s %s', $build->getCommitLink(), substr($build->getCommitId(), 0, 7), - $build->getCommitterEmail() + $build->getCommitterEmail() ? ('(' . $build->getCommitterEmail() . ')') : '' ); } else { - print 'Manual'; + print '—'; } ?>
#getId(), 6, '0', STR_PAD_LEFT); ?>getCreated()->format('Y-m-d H:i:s'); ?>#getId(), 6, '0', STR_PAD_LEFT); ?>getCreated()->format('Y-m-d H:i:s'); ?>getSourceHumanize()); ?>