From 89218d7047c2bb9b9448bb0bfb3fd57363bfdb6c Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Thu, 20 Apr 2017 19:35:26 +0700 Subject: [PATCH 01/10] Added ability to build only head commit from push (Initial). --- .../Controller/WebhookController.php | 65 +++++++++++-------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index 98293057..3ce93f5c 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -197,7 +197,11 @@ class WebhookController extends Controller $payload = json_decode($this->getParam('payload'), true); break; default: - return ['status' => 'failed', 'error' => 'Content type not supported.', 'responseCode' => 401]; + return [ + 'status' => 'failed', + 'error' => 'Content type not supported.', + 'responseCode' => 401 + ]; } // Handle Pull Request web hooks: @@ -206,7 +210,7 @@ class WebhookController extends Controller } // Handle Push web hooks: - if (array_key_exists('commits', $payload)) { + if (array_key_exists('head_commit', $payload)) { return $this->githubCommitRequest($project, $payload); } @@ -229,41 +233,46 @@ class WebhookController extends Controller return ['status' => 'ignored']; } - if (isset($payload['commits']) && is_array($payload['commits'])) { - // If we have a list of commits, then add them all as builds to be tested: - + if (isset($payload['head_commit']) && $payload['head_commit']) { $results = []; $status = 'failed'; - foreach ($payload['commits'] as $commit) { - if (!$commit['distinct']) { - $results[$commit['id']] = ['status' => 'ignored']; - continue; - } - - try { - $branch = str_replace('refs/heads/', '', $payload['ref']); - $committer = $commit['committer']['email']; - $results[$commit['id']] = $this->createBuild( - $project, - $commit['id'], - $branch, - $committer, - $commit['message'] - ); - $status = 'ok'; - } catch (Exception $ex) { - $results[$commit['id']] = ['status' => 'failed', 'error' => $ex->getMessage()]; - } + + if (!$payload['head_commit']['distinct']) { + $results[$payload['head_commit']['id']] = ['status' => 'ignored']; } + + try { + $branch = str_replace('refs/heads/', '', $payload['ref']); + $committer = $payload['head_commit']['committer']['email']; + + $results[$payload['head_commit']['id']] = $this->createBuild( + $project, + $payload['head_commit']['id'], + $branch, + $committer, + $payload['head_commit']['message'] + ); + $status = 'ok'; + } catch (Exception $ex) { + $results[$payload['head_commit']['id']] = ['status' => 'failed', 'error' => $ex->getMessage()]; + } + return ['status' => $status, 'commits' => $results]; } if (substr($payload['ref'], 0, 10) == 'refs/tags/') { // If we don't, but we're dealing with a tag, add that instead: - $branch = str_replace('refs/tags/', 'Tag: ', $payload['ref']); + $branch = str_replace('refs/tags/', 'Tag: ', $payload['ref']); $committer = $payload['pusher']['email']; - $message = $payload['head_commit']['message']; - return $this->createBuild($project, $payload['after'], $branch, $committer, $message); + $message = $payload['head_commit']['message']; + + return $this->createBuild( + $project, + $payload['after'], + $branch, + $committer, + $message + ); } return ['status' => 'ignored', 'message' => 'Unusable payload.']; From 6e60c07103ff1eb3700e72e0c95692d3ebeba6f1 Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Thu, 20 Apr 2017 20:24:53 +0700 Subject: [PATCH 02/10] Refactored push and tag webhooks for Github. --- .../Controller/WebhookController.php | 67 +++++++++---------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index 3ce93f5c..c17564ec 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -204,12 +204,12 @@ class WebhookController extends Controller ]; } - // Handle Pull Request web hooks: + // Handle Pull Request webhooks: if (array_key_exists('pull_request', $payload)) { return $this->githubPullRequest($project, $payload); } - // Handle Push web hooks: + // Handle Push (and Tag) webhooks: if (array_key_exists('head_commit', $payload)) { return $this->githubCommitRequest($project, $payload); } @@ -227,54 +227,49 @@ class WebhookController extends Controller */ protected function githubCommitRequest(Project $project, array $payload) { - // Github sends a payload when you close a pull request with a - // non-existent commit. We don't want this. - if (array_key_exists('after', $payload) && $payload['after'] === '0000000000000000000000000000000000000000') { + // Github sends a payload when you close a pull request with a non-existent commit. We don't want this. + if ( + array_key_exists('after', $payload) && + $payload['after'] === '0000000000000000000000000000000000000000' + ) { return ['status' => 'ignored']; } if (isset($payload['head_commit']) && $payload['head_commit']) { + $isTag = (substr($payload['ref'], 0, 10) == 'refs/tags/') ? true : false; + $commit = $payload['head_commit']; $results = []; $status = 'failed'; - if (!$payload['head_commit']['distinct']) { - $results[$payload['head_commit']['id']] = ['status' => 'ignored']; - } + if (!$commit['distinct']) { + $results[$commit['id']] = ['status' => 'ignored']; + } else { + try { + if ($isTag) { + $branch = str_replace('refs/tags/', 'Tag: ', $payload['ref']); + $committer = $payload['pusher']['email']; + } else { + $branch = str_replace('refs/heads/', '', $payload['ref']); + $committer = $commit['committer']['email']; + } - try { - $branch = str_replace('refs/heads/', '', $payload['ref']); - $committer = $payload['head_commit']['committer']['email']; + $results[$commit['id']] = $this->createBuild( + $project, + $commit['id'], + $branch, + $committer, + $commit['message'] + ); - $results[$payload['head_commit']['id']] = $this->createBuild( - $project, - $payload['head_commit']['id'], - $branch, - $committer, - $payload['head_commit']['message'] - ); - $status = 'ok'; - } catch (Exception $ex) { - $results[$payload['head_commit']['id']] = ['status' => 'failed', 'error' => $ex->getMessage()]; + $status = 'ok'; + } catch (Exception $ex) { + $results[$commit['id']] = ['status' => 'failed', 'error' => $ex->getMessage()]; + } } return ['status' => $status, 'commits' => $results]; } - if (substr($payload['ref'], 0, 10) == 'refs/tags/') { - // If we don't, but we're dealing with a tag, add that instead: - $branch = str_replace('refs/tags/', 'Tag: ', $payload['ref']); - $committer = $payload['pusher']['email']; - $message = $payload['head_commit']['message']; - - return $this->createBuild( - $project, - $payload['after'], - $branch, - $committer, - $message - ); - } - return ['status' => 'ignored', 'message' => 'Unusable payload.']; } From 0e83599b9f402fa9a7b0a6aea787501257337e5a Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Thu, 20 Apr 2017 20:38:02 +0700 Subject: [PATCH 03/10] Refactored push and tag webhooks for Github (Fixes). --- src/PHPCensor/Controller/WebhookController.php | 2 +- src/PHPCensor/Store/BuildStore.php | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index c17564ec..37a27766 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -513,7 +513,7 @@ class WebhookController extends Controller } // Check if a build already exists for this commit ID: - $builds = $this->buildStore->getByProjectAndCommit($project->getId(), $commitId); + $builds = $this->buildStore->getByProjectAndCommit($project->getId(), $commitId, $branch); $ignore_environments = []; if ($builds['count']) { diff --git a/src/PHPCensor/Store/BuildStore.php b/src/PHPCensor/Store/BuildStore.php index 793d9a5f..47485e3f 100644 --- a/src/PHPCensor/Store/BuildStore.php +++ b/src/PHPCensor/Store/BuildStore.php @@ -177,16 +177,21 @@ class BuildStore extends Store /** * Return an array of builds for a given project and commit ID. - * @param $projectId - * @param $commitId + * + * @param integer $projectId + * @param string $commitId + * @param string $branch + * * @return array */ - public function getByProjectAndCommit($projectId, $commitId) + public function getByProjectAndCommit($projectId, $commitId, $branch) { - $query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :project_id AND {{commit_id}} = :commit_id'; - $stmt = Database::getConnection('read')->prepareCommon($query); + $query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :project_id AND {{commit_id}} = :commit_id AND {{branch}} = :branch'; + $stmt = Database::getConnection('read')->prepareCommon($query); + $stmt->bindValue(':project_id', $projectId); $stmt->bindValue(':commit_id', $commitId); + $stmt->bindValue(':branch', $branch); if ($stmt->execute()) { $res = $stmt->fetchAll(\PDO::FETCH_ASSOC); From f26f000bb4ba2cbf5e8335381dd0c24db6f29e05 Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Thu, 20 Apr 2017 21:14:48 +0700 Subject: [PATCH 04/10] Refactored push and tag webhooks for Github (Fixes +++). --- src/PHPCensor/Controller/WebhookController.php | 4 ++-- src/PHPCensor/Store/BuildStore.php | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index 37a27766..58ac9ec6 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -246,7 +246,7 @@ class WebhookController extends Controller } else { try { if ($isTag) { - $branch = str_replace('refs/tags/', 'Tag: ', $payload['ref']); + $branch = str_replace('refs/heads/', '', $payload['base_ref']); $committer = $payload['pusher']['email']; } else { $branch = str_replace('refs/heads/', '', $payload['ref']); @@ -513,7 +513,7 @@ class WebhookController extends Controller } // Check if a build already exists for this commit ID: - $builds = $this->buildStore->getByProjectAndCommit($project->getId(), $commitId, $branch); + $builds = $this->buildStore->getByProjectAndCommit($project->getId(), $commitId); $ignore_environments = []; if ($builds['count']) { diff --git a/src/PHPCensor/Store/BuildStore.php b/src/PHPCensor/Store/BuildStore.php index 47485e3f..9c1e1751 100644 --- a/src/PHPCensor/Store/BuildStore.php +++ b/src/PHPCensor/Store/BuildStore.php @@ -180,18 +180,16 @@ class BuildStore extends Store * * @param integer $projectId * @param string $commitId - * @param string $branch * * @return array */ - public function getByProjectAndCommit($projectId, $commitId, $branch) + public function getByProjectAndCommit($projectId, $commitId) { - $query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :project_id AND {{commit_id}} = :commit_id AND {{branch}} = :branch'; + $query = 'SELECT * FROM {{build}} WHERE {{project_id}} = :project_id AND {{commit_id}} = :commit_id'; $stmt = Database::getConnection('read')->prepareCommon($query); $stmt->bindValue(':project_id', $projectId); $stmt->bindValue(':commit_id', $commitId); - $stmt->bindValue(':branch', $branch); if ($stmt->execute()) { $res = $stmt->fetchAll(\PDO::FETCH_ASSOC); From 647a5cedcd534a7cce06c9c81aa0eeb81713684e Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Sat, 22 Apr 2017 20:02:24 +0700 Subject: [PATCH 05/10] Added tags for Github builds. --- src/PHPCensor/Command/CreateBuildCommand.php | 6 +- .../Controller/ProjectController.php | 11 +++- .../Controller/WebhookController.php | 59 ++++++++++++++----- ...142131_added_tag_column_to_build_table.php | 24 ++++++++ src/PHPCensor/Model/Build.php | 38 ++++++++++++ src/PHPCensor/Service/BuildService.php | 6 ++ src/PHPCensor/View/Build/view.phtml | 3 + src/PHPCensor/View/Project/ajax-builds.phtml | 5 +- tests/PHPCensor/Service/BuildServiceTest.php | 21 ++++++- 9 files changed, 151 insertions(+), 22 deletions(-) create mode 100644 src/PHPCensor/Migrations/20170420142131_added_tag_column_to_build_table.php diff --git a/src/PHPCensor/Command/CreateBuildCommand.php b/src/PHPCensor/Command/CreateBuildCommand.php index 027fded1..29eab6be 100644 --- a/src/PHPCensor/Command/CreateBuildCommand.php +++ b/src/PHPCensor/Command/CreateBuildCommand.php @@ -57,9 +57,9 @@ class CreateBuildCommand extends Command */ public function execute(InputInterface $input, OutputInterface $output) { - $projectId = $input->getArgument('projectId'); - $commitId = $input->getOption('commit'); - $branch = $input->getOption('branch'); + $projectId = $input->getArgument('projectId'); + $commitId = $input->getOption('commit'); + $branch = $input->getOption('branch'); $environment = $input->hasOption('environment') ? $input->getOption('environment') : null; $project = $this->projectStore->getById($projectId); diff --git a/src/PHPCensor/Controller/ProjectController.php b/src/PHPCensor/Controller/ProjectController.php index d2d82874..72c5d92d 100644 --- a/src/PHPCensor/Controller/ProjectController.php +++ b/src/PHPCensor/Controller/ProjectController.php @@ -148,7 +148,16 @@ class ProjectController extends PHPCensor\Controller } $email = $_SESSION['php-censor-user']->getEmail(); - $build = $this->buildService->createBuild($project, $environment, null, urldecode($branch), $email, null, $extra); + $build = $this->buildService->createBuild( + $project, + $environment, + null, + urldecode($branch), + null, + $email, + null, + $extra + ); if ($this->buildService->queueError) { $_SESSION['global_error'] = Lang::get('add_to_queue_failed'); diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index 58ac9ec6..cd5688db 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -121,6 +121,7 @@ class WebhookController extends Controller $project, $commit['new']['target']['hash'], $commit['new']['name'], + null, $email, $commit['new']['target']['message'] ); @@ -152,6 +153,7 @@ class WebhookController extends Controller $project, $commit['raw_node'], $commit['branch'], + null, $email, $commit['message'] ); @@ -179,7 +181,7 @@ class WebhookController extends Controller $commitMessage = $this->getParam('message'); $committer = $this->getParam('committer'); - return $this->createBuild($project, $commit, $branch, $committer, $commitMessage); + return $this->createBuild($project, $commit, $branch, null, $committer, $commitMessage); } /** @@ -245,7 +247,9 @@ class WebhookController extends Controller $results[$commit['id']] = ['status' => 'ignored']; } else { try { + $tag = null; if ($isTag) { + $tag = str_replace('refs/tags/', '', $payload['ref']); $branch = str_replace('refs/heads/', '', $payload['base_ref']); $committer = $payload['pusher']['email']; } else { @@ -257,6 +261,7 @@ class WebhookController extends Controller $project, $commit['id'], $branch, + $tag, $committer, $commit['message'] ); @@ -339,7 +344,7 @@ class WebhookController extends Controller 'remote_url' => $payload['pull_request']['head']['repo'][$remoteUrlKey], ]; - $results[$id] = $this->createBuild($project, $id, $branch, $committer, $message, $extra); + $results[$id] = $this->createBuild($project, $id, $branch, null, $committer, $message, $extra); $status = 'ok'; } catch (Exception $ex) { $results[$id] = ['status' => 'failed', 'error' => $ex->getMessage()]; @@ -367,7 +372,7 @@ class WebhookController extends Controller $commit = $attributes['last_commit']; $committer = $commit['author']['email']; - return $this->createBuild($project, $commit['id'], $branch, $committer, $commit['message']); + return $this->createBuild($project, $commit['id'], $branch, null, $committer, $commit['message']); } } @@ -385,6 +390,7 @@ class WebhookController extends Controller $project, $commit['id'], $branch, + null, $committer, $commit['message'] ); @@ -417,7 +423,7 @@ class WebhookController extends Controller $commitMessage = $this->getParam('message'); $committer = $this->getParam('committer'); - return $this->createBuild($project, $commit, $branch, $committer, $commitMessage); + return $this->createBuild($project, $commit, $branch, null, $committer, $commitMessage); } /** @@ -471,6 +477,7 @@ class WebhookController extends Controller $project, $commit['id'], $branch, + null, $committer, $commit['message'] ); @@ -490,11 +497,12 @@ class WebhookController extends Controller * Wrapper for creating a new build. * * @param Project $project - * @param string $commitId - * @param string $branch - * @param string $committer - * @param string $commitMessage - * @param array $extra + * @param string $commitId + * @param string $branch + * @param string $tag + * @param string $committer + * @param string $commitMessage + * @param array $extra * * @return array * @@ -504,6 +512,7 @@ class WebhookController extends Controller Project $project, $commitId, $branch, + $tag, $committer, $commitMessage, array $extra = null @@ -533,11 +542,21 @@ class WebhookController extends Controller foreach ($environment_names as $environment_name) { if (!in_array($environment_name, $ignore_environments)) { // If not, create a new build job for it: - $build = $this->buildService->createBuild($project, $environment_name, $commitId, $project->getBranch(), $committer, $commitMessage, $extra); - $created_builds[] = array( - 'id' => $build->getID(), - 'environment' => $environment_name, + $build = $this->buildService->createBuild( + $project, + $environment_name, + $commitId, + $project->getBranch(), + $tag, + $committer, + $commitMessage, + $extra ); + + $created_builds[] = [ + 'id' => $build->getID(), + 'environment' => $environment_name, + ]; } else { $duplicates[] = array_search($environment_name, $ignore_environments); } @@ -556,8 +575,18 @@ class WebhookController extends Controller } } else { $environment_name = null; - if (!in_array($environment_name, $ignore_environments)) { - $build = $this->buildService->createBuild($project, null, $commitId, $branch, $committer, $commitMessage, $extra); + if (!in_array($environment_name, $ignore_environments) ||$tag) { + $build = $this->buildService->createBuild( + $project, + null, + $commitId, + $branch, + $tag, + $committer, + $commitMessage, + $extra + ); + return ['status' => 'ok', 'buildID' => $build->getID()]; } else { return [ diff --git a/src/PHPCensor/Migrations/20170420142131_added_tag_column_to_build_table.php b/src/PHPCensor/Migrations/20170420142131_added_tag_column_to_build_table.php new file mode 100644 index 00000000..cc5f80e5 --- /dev/null +++ b/src/PHPCensor/Migrations/20170420142131_added_tag_column_to_build_table.php @@ -0,0 +1,24 @@ +table('build'); + + if (!$table->hasColumn('tag')) { + $table->addColumn('tag', 'string', ['limit' => 250, 'null' => true])->save(); + } + } + + public function down() + { + $table = $this->table('build'); + + if ($table->hasColumn('tag')) { + $table->removeColumn('tag')->save(); + } + } +} diff --git a/src/PHPCensor/Model/Build.php b/src/PHPCensor/Model/Build.php index a4b6aced..03cb0ff2 100644 --- a/src/PHPCensor/Model/Build.php +++ b/src/PHPCensor/Model/Build.php @@ -51,6 +51,7 @@ class Build extends Model 'status' => null, 'log' => null, 'branch' => null, + 'tag' => null, 'created' => null, 'started' => null, 'finished' => null, @@ -71,6 +72,7 @@ class Build extends Model 'status' => 'getStatus', 'log' => 'getLog', 'branch' => 'getBranch', + 'tag' => 'getTag', 'created' => 'getCreated', 'started' => 'getStarted', 'finished' => 'getFinished', @@ -94,6 +96,7 @@ class Build extends Model 'status' => 'setStatus', 'log' => 'setLog', 'branch' => 'setBranch', + 'setTag' => 'setTag', 'created' => 'setCreated', 'started' => 'setStarted', 'finished' => 'setFinished', @@ -142,6 +145,11 @@ class Build extends Model 'length' => 250, 'default' => 'master', ], + 'tag' => [ + 'type' => 'varchar', + 'length' => 250, + 'default' => null, + ], 'created' => [ 'type' => 'datetime', 'nullable' => true, @@ -986,6 +994,36 @@ class Build extends Model return false; } + /** + * Get the value of Tag / tag. + * + * @return string + */ + public function getTag() + { + $rtn = $this->data['tag']; + + return $rtn; + } + + /** + * Set the value of Tag / tag. + * + * @param $value string + */ + public function setTag($value) + { + $this->validateString('Tag', $value); + + if ($this->data['tag'] === $value) { + return; + } + + $this->data['tag'] = $value; + + $this->setModified('tag'); + } + /** * Get the value of Environment / environment. * diff --git a/src/PHPCensor/Service/BuildService.php b/src/PHPCensor/Service/BuildService.php index 89ac4f15..5e789cc6 100644 --- a/src/PHPCensor/Service/BuildService.php +++ b/src/PHPCensor/Service/BuildService.php @@ -38,6 +38,7 @@ class BuildService * @param string $environment * @param string|null $commitId * @param string|null $branch + * @param string|null $tag * @param string|null $committerEmail * @param string|null $commitMessage * @param string|null $extra @@ -49,6 +50,7 @@ class BuildService $environment, $commitId = null, $branch = null, + $tag = null, $committerEmail = null, $commitMessage = null, $extra = null @@ -75,6 +77,10 @@ class BuildService $build->setBranch($project->getBranch()); } + if (!is_null($tag)) { + $build->setTag($tag); + } + if (!is_null($committerEmail)) { $build->setCommitterEmail($committerEmail); } diff --git a/src/PHPCensor/View/Build/view.phtml b/src/PHPCensor/View/Build/view.phtml index bae17ff4..6b1d4d07 100644 --- a/src/PHPCensor/View/Build/view.phtml +++ b/src/PHPCensor/View/Build/view.phtml @@ -27,6 +27,9 @@ getBranch(); ?> + getTag()): ?> / + + diff --git a/src/PHPCensor/View/Project/ajax-builds.phtml b/src/PHPCensor/View/Project/ajax-builds.phtml index 4b800e49..6724c27c 100644 --- a/src/PHPCensor/View/Project/ajax-builds.phtml +++ b/src/PHPCensor/View/Project/ajax-builds.phtml @@ -59,7 +59,10 @@ $branches = $build->getExtra('branches'); getBranch(); ?> - + + getTag()): ?> / + + setType('hg'); $project->setId(101); - $returnValue = $this->testedService->createBuild($project, null, '123', 'testbranch', 'test@example.com', 'test'); + $returnValue = $this->testedService->createBuild( + $project, + null, + '123', + 'testbranch', + null, + 'test@example.com', + 'test' + ); $this->assertEquals('testbranch', $returnValue->getBranch()); $this->assertEquals('123', $returnValue->getCommitId()); @@ -109,7 +117,16 @@ class BuildServiceTest extends \PHPUnit_Framework_TestCase $project->setType('bitbucket'); $project->setId(101); - $returnValue = $this->testedService->createBuild($project, null, null, null, null, null, ['item1' => 1001]); + $returnValue = $this->testedService->createBuild( + $project, + null, + null, + null, + null, + null, + null, + ['item1' => 1001] + ); $this->assertEquals(1001, $returnValue->getExtra('item1')); } From 12805d58d98f59af34f1c3c107419098d516d01d Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Sat, 22 Apr 2017 21:06:53 +0700 Subject: [PATCH 06/10] Added tags for Github builds (Fixes). --- src/PHPCensor/Controller/WebhookController.php | 14 +++++++++++--- src/PHPCensor/Model/Build.php | 8 ++++++++ src/PHPCensor/Model/Build/GithubBuild.php | 8 ++++++++ src/PHPCensor/View/Build/view.phtml | 10 ++++++---- src/PHPCensor/View/Project/ajax-builds.phtml | 10 +++++++--- 5 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index cd5688db..001af4cb 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -525,22 +525,27 @@ class WebhookController extends Controller $builds = $this->buildStore->getByProjectAndCommit($project->getId(), $commitId); $ignore_environments = []; + $ignore_tags = []; if ($builds['count']) { foreach($builds['items'] as $build) { /** @var Build $build */ $ignore_environments[$build->getId()] = $build->getEnvironment(); + $ignore_tags[$build->getId()] = $build->getTag(); } } $environments = $project->getEnvironmentsObjects(); if ($environments['count']) { - $created_builds = []; + $created_builds = []; $environment_names = $project->getEnvironmentsNamesByBranch($branch); // use base branch from project if (!empty($environment_names)) { $duplicates = []; foreach ($environment_names as $environment_name) { - if (!in_array($environment_name, $ignore_environments)) { + if ( + !in_array($environment_name, $ignore_environments) || + ($tag && !in_array($tag, $ignore_tags, true)) + ) { // If not, create a new build job for it: $build = $this->buildService->createBuild( $project, @@ -575,7 +580,10 @@ class WebhookController extends Controller } } else { $environment_name = null; - if (!in_array($environment_name, $ignore_environments) ||$tag) { + if ( + !in_array($environment_name, $ignore_environments, true) || + ($tag && !in_array($tag, $ignore_tags, true)) + ) { $build = $this->buildService->createBuild( $project, null, diff --git a/src/PHPCensor/Model/Build.php b/src/PHPCensor/Model/Build.php index 03cb0ff2..de502d72 100644 --- a/src/PHPCensor/Model/Build.php +++ b/src/PHPCensor/Model/Build.php @@ -720,6 +720,14 @@ class Build extends Model return '#'; } + /** + * Get link to tag from another source (i.e. Github) + */ + public function getTagLink() + { + return '#'; + } + /** * Return a template to use to generate a link to a specific file. * diff --git a/src/PHPCensor/Model/Build/GithubBuild.php b/src/PHPCensor/Model/Build/GithubBuild.php index c2847269..61694ee1 100644 --- a/src/PHPCensor/Model/Build/GithubBuild.php +++ b/src/PHPCensor/Model/Build/GithubBuild.php @@ -32,6 +32,14 @@ class GithubBuild extends RemoteGitBuild return 'https://github.com/' . $this->getProject()->getReference() . '/tree/' . $this->getBranch(); } + /** + * Get link to tag from another source (i.e. Github) + */ + public function getTagLink() + { + return 'https://github.com/' . $this->getProject()->getReference() . '/tree/' . $this->getTag(); + } + /** * Send status updates to any relevant third parties (i.e. Github) */ diff --git a/src/PHPCensor/View/Build/view.phtml b/src/PHPCensor/View/Build/view.phtml index 6b1d4d07..7c3068aa 100644 --- a/src/PHPCensor/View/Build/view.phtml +++ b/src/PHPCensor/View/Build/view.phtml @@ -24,11 +24,13 @@ - - getBranch(); ?> + + getBranch(); ?> - getTag()): ?> / - + getTag()): ?> / + + + diff --git a/src/PHPCensor/View/Project/ajax-builds.phtml b/src/PHPCensor/View/Project/ajax-builds.phtml index 6724c27c..81b892e5 100644 --- a/src/PHPCensor/View/Project/ajax-builds.phtml +++ b/src/PHPCensor/View/Project/ajax-builds.phtml @@ -58,10 +58,14 @@ $branches = $build->getExtra('branches'); ?> - getBranch(); ?> + + getBranch(); ?> + - getTag()): ?> / - + getTag()): ?> / + + + From bf067e4fdae82467f2fec08e1cc10c07fada369f Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Sat, 22 Apr 2017 21:48:54 +0700 Subject: [PATCH 07/10] Added tags for Github builds (UI Fixes). --- src/PHPCensor/View/Build/view.phtml | 18 ++++++++++-------- src/PHPCensor/View/Home/ajax-timeline.phtml | 17 ++++++++++++----- src/PHPCensor/View/Home/index.phtml | 17 ++++++++++++----- src/PHPCensor/View/Project/ajax-builds.phtml | 10 +++++----- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/PHPCensor/View/Build/view.phtml b/src/PHPCensor/View/Build/view.phtml index 7c3068aa..1c6917e0 100644 --- a/src/PHPCensor/View/Build/view.phtml +++ b/src/PHPCensor/View/Build/view.phtml @@ -25,12 +25,12 @@ - getBranch(); ?> + getBranch(); ?> - getTag()): ?> / - - - + getTag()): ?> + ( + + ) @@ -40,7 +40,7 @@ getEnvironment(); - echo !empty($environment) ? ('' . $environment . '') : '—' ; + echo !empty($environment) ? (' ' . $environment) : '—' ; ?> @@ -48,12 +48,14 @@ - getBranch() ?> + + getBranch(); ?> + + getExtra('branches'); if (!empty($branches)) { foreach($branches as $branch) { - ?> getProject()->getTitle(); ?> - - + — Build #getId(); ?> - - + —
- getBranch(); ?> - - + getBranch(); ?> + + getTag()): ?> + ( + + ) + + — getCommitId() !== 'Manual') { print sprintf( @@ -92,7 +98,8 @@ use PHPCensor\Model\Build; print Lang::get('manual_build'); } ?> - - getCommitMessage(); ?> + — + getCommitMessage(); ?>
diff --git a/src/PHPCensor/View/Home/index.phtml b/src/PHPCensor/View/Home/index.phtml index 7dcc8f3b..220cdda5 100644 --- a/src/PHPCensor/View/Home/index.phtml +++ b/src/PHPCensor/View/Home/index.phtml @@ -100,17 +100,23 @@ use PHPCensor\Model\Build; getProject()->getTitle(); ?> - - + — Build #getId(); ?> - - + —
- getBranch(); ?> - - + getBranch(); ?> + + getTag()): ?> + ( + + ) + + — getCommitId() !== 'Manual') { print sprintf( @@ -123,7 +129,8 @@ use PHPCensor\Model\Build; print Lang::get('manual_build'); } ?> - - getCommitMessage(); ?> + — + getCommitMessage(); ?>
diff --git a/src/PHPCensor/View/Project/ajax-builds.phtml b/src/PHPCensor/View/Project/ajax-builds.phtml index 81b892e5..d5529e27 100644 --- a/src/PHPCensor/View/Project/ajax-builds.phtml +++ b/src/PHPCensor/View/Project/ajax-builds.phtml @@ -59,13 +59,13 @@ $branches = $build->getExtra('branches'); - getBranch(); ?> + getBranch(); ?> - getTag()): ?> / - - - + getTag()): ?> + ( + + ) From 9d269a4ccac61d4830ffed784e6570568990fa5c Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Sat, 22 Apr 2017 21:56:51 +0700 Subject: [PATCH 08/10] Added tags for Github builds (UI Fixes +++). --- src/PHPCensor/View/Build/view.phtml | 6 +++--- src/PHPCensor/View/Home/ajax-timeline.phtml | 6 +++--- src/PHPCensor/View/Home/index.phtml | 6 +++--- src/PHPCensor/View/Project/ajax-builds.phtml | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/PHPCensor/View/Build/view.phtml b/src/PHPCensor/View/Build/view.phtml index 1c6917e0..9e972182 100644 --- a/src/PHPCensor/View/Build/view.phtml +++ b/src/PHPCensor/View/Build/view.phtml @@ -27,10 +27,10 @@ getBranch(); ?> - getTag()): ?> - ( + getTag()): ?> / + - ) + diff --git a/src/PHPCensor/View/Home/ajax-timeline.phtml b/src/PHPCensor/View/Home/ajax-timeline.phtml index bd13c520..eba34fba 100644 --- a/src/PHPCensor/View/Home/ajax-timeline.phtml +++ b/src/PHPCensor/View/Home/ajax-timeline.phtml @@ -80,10 +80,10 @@ use PHPCensor\Model\Build;
getBranch(); ?> - getTag()): ?> - ( + getTag()): ?> / + - ) + getBranch(); ?> - getTag()): ?> - ( + getTag()): ?> / + - ) + getExtra('branches'); getBranch(); ?> - getTag()): ?> - ( + getTag()): ?> / + - ) + From 36243ca9cb2f7b2a083405e4ef277f22c8d8ce7e Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Sat, 22 Apr 2017 22:02:27 +0700 Subject: [PATCH 09/10] Fixed build duration localization in timeline --- src/PHPCensor/View/Home/ajax-timeline.phtml | 10 +++++----- src/PHPCensor/View/Home/index.phtml | 8 ++++---- src/PHPCensor/View/Project/ajax-builds.phtml | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/PHPCensor/View/Home/ajax-timeline.phtml b/src/PHPCensor/View/Home/ajax-timeline.phtml index eba34fba..010831c5 100644 --- a/src/PHPCensor/View/Home/ajax-timeline.phtml +++ b/src/PHPCensor/View/Home/ajax-timeline.phtml @@ -57,11 +57,11 @@ use PHPCensor\Model\Build;
- format('H:i:s'); - if ($build->getStatus() != Build::STATUS_PENDING) { - echo ' (' . $build->getPrettyDuration() . ')'; - } + format('H:i:s'); + if ($build->getStatus() != Build::STATUS_PENDING) { + echo ' — ' . $build->getDuration(); ?>

diff --git a/src/PHPCensor/View/Home/index.phtml b/src/PHPCensor/View/Home/index.phtml index bf836c5c..e85a800a 100644 --- a/src/PHPCensor/View/Home/index.phtml +++ b/src/PHPCensor/View/Home/index.phtml @@ -89,10 +89,10 @@ use PHPCensor\Model\Build;
format('H:i:s'); - if ($build->getStatus() != Build::STATUS_PENDING) { - echo ' (' . $build->getPrettyDuration() . ')'; - } + echo $updated->format('H:i:s'); + if ($build->getStatus() != Build::STATUS_PENDING) { + echo ' — ' . $build->getDuration(); ?>

diff --git a/src/PHPCensor/View/Project/ajax-builds.phtml b/src/PHPCensor/View/Project/ajax-builds.phtml index 8105dced..a67a52f6 100644 --- a/src/PHPCensor/View/Project/ajax-builds.phtml +++ b/src/PHPCensor/View/Project/ajax-builds.phtml @@ -75,7 +75,7 @@ $branches = $build->getExtra('branches'); ?> - getDuration(); ?> + getDuration(); ?>
From 1b70128c832304789539271cb21db79f2e97feaa Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Sat, 22 Apr 2017 22:29:09 +0700 Subject: [PATCH 10/10] Added public/private project status icon to dashboard. --- src/PHPCensor/Controller/ProjectController.php | 8 +++++--- src/PHPCensor/View/Home/ajax-dashboard-project.phtml | 7 +++++++ src/PHPCensor/View/Home/dashboard-projects.phtml | 7 +++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/PHPCensor/Controller/ProjectController.php b/src/PHPCensor/Controller/ProjectController.php index 72c5d92d..8f77e26b 100644 --- a/src/PHPCensor/Controller/ProjectController.php +++ b/src/PHPCensor/Controller/ProjectController.php @@ -94,10 +94,12 @@ class ProjectController extends PHPCensor\Controller $this->view->perPage = $perPage; $this->layout->title = $project->getTitle(); + + $this->layout->subtitle = ''; if (!empty($this->view->environment)) { - $this->layout->subtitle = $this->view->environment; - } else { - $this->layout->subtitle = $this->view->branch; + $this->layout->subtitle = ' ' . $this->view->environment; + } elseif (!empty($this->view->branch)) { + $this->layout->subtitle = ' ' . $this->view->branch; } return $this->view->render(); diff --git a/src/PHPCensor/View/Home/ajax-dashboard-project.phtml b/src/PHPCensor/View/Home/ajax-dashboard-project.phtml index 892b8fa6..ff5cafee 100644 --- a/src/PHPCensor/View/Home/ajax-dashboard-project.phtml +++ b/src/PHPCensor/View/Home/ajax-dashboard-project.phtml @@ -98,6 +98,13 @@ if ($buildCount > 0) {
+
+ getAllowPublicStatus()): ?> + + + + +
()
diff --git a/src/PHPCensor/View/Home/dashboard-projects.phtml b/src/PHPCensor/View/Home/dashboard-projects.phtml index 764b7936..ca3718a6 100644 --- a/src/PHPCensor/View/Home/dashboard-projects.phtml +++ b/src/PHPCensor/View/Home/dashboard-projects.phtml @@ -99,6 +99,13 @@ foreach($projects as $project):

+
+ getAllowPublicStatus()): ?> + + + + +
(getId()]; ?>)