From bbbd9b3cf24f79b5e6f65a437569aae267d17875 Mon Sep 17 00:00:00 2001 From: Pat Suwalski Date: Wed, 13 Sep 2017 21:21:49 +0700 Subject: [PATCH] Added a checkbox to build only the default branch specified in the project. --- .../Controller/ProjectController.php | 12 ++++++ .../Controller/WebhookController.php | 8 ++++ src/PHPCensor/Languages/lang.en.php | 11 ++--- src/PHPCensor/Languages/lang.ru.php | 11 ++--- ...170913141438_added_default_branch_only.php | 24 +++++++++++ src/PHPCensor/Model/Project.php | 43 ++++++++++++++++++- src/PHPCensor/Service/ProjectService.php | 5 +++ 7 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 src/PHPCensor/Migrations/20170913141438_added_default_branch_only.php diff --git a/src/PHPCensor/Controller/ProjectController.php b/src/PHPCensor/Controller/ProjectController.php index 97829882..4b782e0c 100644 --- a/src/PHPCensor/Controller/ProjectController.php +++ b/src/PHPCensor/Controller/ProjectController.php @@ -317,6 +317,7 @@ class ProjectController extends PHPCensor\Controller 'build_config' => $this->getParam('build_config', null), 'allow_public_status' => $this->getParam('allow_public_status', 0), 'branch' => $this->getParam('branch', null), + 'default_branch_only' => $this->getParam('default_branch_only', 0), 'group' => $this->getParam('group_id', null), 'environments' => $this->getParam('environments', null), ]; @@ -385,6 +386,7 @@ class ProjectController extends PHPCensor\Controller 'allow_public_status' => $this->getParam('allow_public_status', 0), 'archived' => $this->getParam('archived', 0), 'branch' => $this->getParam('branch', null), + 'default_branch_only' => $this->getParam('default_branch_only', 0), 'group' => $this->getParam('group_id', null), 'environments' => $this->getParam('environments', null), ]; @@ -450,6 +452,16 @@ class ProjectController extends PHPCensor\Controller $field->setClass('form-control')->setContainerClass('form-group')->setValue(''); $form->addField($field); + $field = Form\Element\Checkbox::create( + 'default_branch_only', + Lang::get('default_branch_only'), + false + ); + $field->setContainerClass('form-group'); + $field->setCheckedValue(1); + $field->setValue(0); + $form->addField($field); + $field = Form\Element\TextArea::create('key', Lang::get('project_private_key'), false); $field->setClass('form-control')->setContainerClass('form-group'); $field->setRows(6); diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index c9016682..61f5de01 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -636,6 +636,14 @@ class WebhookController extends Controller } } + // Check if this branch is to be built. + if ($project->getDefaultBranchOnly() && ($branch !== $project->getBranch())) { + return [ + 'status' => 'ignored', + 'message' => 'The branch is not a branch by default. Build is allowed only for the branch by default.' + ]; + } + $environments = $project->getEnvironmentsObjects(); if ($environments['count']) { $created_builds = []; diff --git a/src/PHPCensor/Languages/lang.en.php b/src/PHPCensor/Languages/lang.en.php index 60df69f7..5fa56d22 100644 --- a/src/PHPCensor/Languages/lang.en.php +++ b/src/PHPCensor/Languages/lang.en.php @@ -115,12 +115,13 @@ PHP Censor', (leave blank for local and/or anonymous remotes)', 'build_config' => 'PHP Censor build config for this project (if you cannot add a .php-censor.yml (.phpci.yml|phpci.yml) file in the project repository)', - 'default_branch' => 'Default branch name', + 'default_branch' => 'Default branch name', + 'default_branch_only' => 'Build default branch only', 'allow_public_status' => 'Enable public status page and image for this project?', - 'archived' => 'Archived', - 'archived_menu' => 'Archived', - 'save_project' => 'Save Project', - 'environments_label' => 'Environments (yaml)', + 'archived' => 'Archived', + 'archived_menu' => 'Archived', + 'save_project' => 'Save Project', + 'environments_label' => 'Environments (yaml)', 'error_mercurial' => 'Mercurial repository URL must be start with http:// or https://', 'error_remote' => 'Repository URL must be start with git://, http:// or https://', diff --git a/src/PHPCensor/Languages/lang.ru.php b/src/PHPCensor/Languages/lang.ru.php index 3a97b132..9f3fcaac 100644 --- a/src/PHPCensor/Languages/lang.ru.php +++ b/src/PHPCensor/Languages/lang.ru.php @@ -112,12 +112,13 @@ PHP Censor', (оставьте поле пустым для локального использования и/или анонимного доступа)', 'build_config' => 'Конфигурация сборки проекта для PHP Censor (если вы не добавили файл .php-censor.yml (.phpci.yml|phpci.yml) в репозиторий вашего проекта)', - 'default_branch' => 'Ветка по умолчанию', + 'default_branch' => 'Ветка по умолчанию', + 'default_branch_only' => 'Собирать только ветку по умолчанию', 'allow_public_status' => 'Разрешить публичный статус и изображение (статуса) для проекта', - 'archived' => 'Архивный', - 'archived_menu' => 'Архив', - 'save_project' => 'Сохранить проект', - 'environments_label' => 'Окружения (yaml)', + 'archived' => 'Архивный', + 'archived_menu' => 'Архив', + 'save_project' => 'Сохранить проект', + 'environments_label' => 'Окружения (yaml)', 'error_mercurial' => 'URL репозитория Mercurial должен начинаться с http:// или https://', 'error_remote' => 'URL репозитория должен начинаться с git://, http:// или https://', diff --git a/src/PHPCensor/Migrations/20170913141438_added_default_branch_only.php b/src/PHPCensor/Migrations/20170913141438_added_default_branch_only.php new file mode 100644 index 00000000..ba513c18 --- /dev/null +++ b/src/PHPCensor/Migrations/20170913141438_added_default_branch_only.php @@ -0,0 +1,24 @@ +table('project'); + + if (!$project->hasColumn('default_branch_only')) { + $project->addColumn('default_branch_only', 'integer'); + } + } + + public function down() + { + $project = $this->table('project'); + + if ($project->hasColumn('default_branch_only')) { + $project->removeColumn('default_branch_only')->save(); + } + } +} diff --git a/src/PHPCensor/Model/Project.php b/src/PHPCensor/Model/Project.php index e8f2db9c..9e20d91d 100644 --- a/src/PHPCensor/Model/Project.php +++ b/src/PHPCensor/Model/Project.php @@ -37,6 +37,7 @@ class Project extends Model 'title' => null, 'reference' => null, 'branch' => null, + 'default_branch_only' => null, 'ssh_private_key' => null, 'type' => null, 'access_information' => null, @@ -57,6 +58,7 @@ class Project extends Model 'title' => 'getTitle', 'reference' => 'getReference', 'branch' => 'getBranch', + 'default_branch_only' => 'getDefaultBranchOnly', 'ssh_private_key' => 'getSshPrivateKey', 'type' => 'getType', 'access_information' => 'getAccessInformation', @@ -79,6 +81,7 @@ class Project extends Model 'title' => 'setTitle', 'reference' => 'setReference', 'branch' => 'setBranch', + 'default_branch_only' => 'setDefaultBranchOnly', 'ssh_private_key' => 'setSshPrivateKey', 'type' => 'setType', 'access_information' => 'setAccessInformation', @@ -118,6 +121,10 @@ class Project extends Model 'length' => 250, 'default' => 'master', ], + 'default_branch_only' => [ + 'type' => 'int', + 'length' => 11, + ], 'ssh_private_key' => [ 'type' => 'text', 'nullable' => true, @@ -303,7 +310,7 @@ class Project extends Model */ public function getArchived() { - $rtn = $this->data['archived']; + $rtn = $this->data['archived']; return $rtn; } @@ -315,7 +322,19 @@ class Project extends Model */ public function getGroupId() { - $rtn = $this->data['group_id']; + $rtn = $this->data['group_id']; + + return $rtn; + } + + /** + * Get the value of DefaultBranchOnly / default_branch_only. + * + * @return int + */ + public function getDefaultBranchOnly() + { + $rtn = $this->data['default_branch_only']; return $rtn; } @@ -400,6 +419,26 @@ class Project extends Model $this->setModified('branch'); } + /** + * Set the value of DefaultBranchOnly / default_branch_only. + * + * Must not be null. + * @param $value int + */ + public function setDefaultBranchOnly($value) + { + $this->validateNotNull('DefaultBranchOnly', $value); + $this->validateInt('DefaultBranchOnly', $value); + + if ($this->data['default_branch_only'] === $value) { + return; + } + + $this->data['default_branch_only'] = $value; + + $this->setModified('default_branch_only'); + } + /** * Set the value of SshPrivateKey / ssh_private_key. * diff --git a/src/PHPCensor/Service/ProjectService.php b/src/PHPCensor/Service/ProjectService.php index f800ab14..f8887b4a 100644 --- a/src/PHPCensor/Service/ProjectService.php +++ b/src/PHPCensor/Service/ProjectService.php @@ -54,6 +54,7 @@ class ProjectService $project->setType($type); $project->setReference($reference); $project->setAllowPublicStatus(0); + $project->setDefaultBranchOnly(0); // Handle extra project options: if (array_key_exists('ssh_private_key', $options)) { @@ -80,6 +81,10 @@ class ProjectService $project->setBranch($options['branch']); } + if (array_key_exists('default_branch_only', $options)) { + $project->setDefaultBranchOnly((int)$options['default_branch_only']); + } + if (array_key_exists('group', $options)) { $project->setGroup($options['group']); }