From 98c9461a15f8a6399bc5ca7e81a7e6e3c96ec1e5 Mon Sep 17 00:00:00 2001 From: Amine Ben hammou Date: Tue, 7 May 2019 14:26:50 +0000 Subject: [PATCH] Check if all issues PRs are merged --- RoboFile.php | 17 +++++++++++++++++ tasks/release/JiraController.php | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/RoboFile.php b/RoboFile.php index 8aea568ad4..56170e28e7 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -518,6 +518,9 @@ class RoboFile extends \Robo\Tasks { $version = $this->releaseVersionAssign($version, ['return' => true]); return $this->collectionBuilder() + ->addCode(function () use ($version) { + return $this->releaseCheckIssues($version); + }) ->addCode(function () use ($version) { return $this->releaseVersionWrite($version); }) @@ -527,6 +530,20 @@ class RoboFile extends \Robo\Tasks { ->run(); } + public function releaseCheckIssues($version = null) { + $jira = $this->createJiraController(); + $version = $jira->getVersion($this->releaseVersionGetNext($version)); + $issues = $jira->getIssuesDataForVersion($version); + $pull_requests_id = \MailPoetTasks\Release\JiraController::PULL_REQUESTS_ID; + foreach ($issues as $issue) { + if (strpos($issue['fields'][$pull_requests_id], 'state=OPEN') !== false) { + $key = $issue['key']; + $this->yell("Some pull request associated to task {$key} is not merged yet!", 40, 'red'); + exit(1); + } + } + } + public function releasePublish($version = null) { $version = $this->releaseVersionGetNext($version); return $this->collectionBuilder() diff --git a/tasks/release/JiraController.php b/tasks/release/JiraController.php index f121986ba6..06d212936a 100644 --- a/tasks/release/JiraController.php +++ b/tasks/release/JiraController.php @@ -9,6 +9,7 @@ class JiraController { const CHANGELOG_FIELD_ID = 'customfield_10500'; const RELEASENOTE_FIELD_ID = 'customfield_10504'; const VERSION_INCREMENT_FIELD_ID = 'customfield_10509'; + const PULL_REQUESTS_ID = 'customfield_10000'; const WONT_DO_RESOLUTION_ID = '10001'; @@ -100,7 +101,8 @@ class JiraController { function getIssuesDataForVersion($version) { $changelog_id = self::CHANGELOG_FIELD_ID; $release_note_id = self::RELEASENOTE_FIELD_ID; - $issues_data = $this->search("fixVersion={$version['id']}", ['key', $changelog_id, $release_note_id, 'status', 'resolution']); + $pull_requests_id = self::PULL_REQUESTS_ID; + $issues_data = $this->search("fixVersion={$version['id']}", ['key', $changelog_id, $release_note_id, 'status', 'resolution', $pull_requests_id]); // Sort issues by importance of change (Added -> Updated -> Improved -> Changed -> Fixed -> Others) usort($issues_data['issues'], function($a, $b) use ($changelog_id) { $order = array_flip(['added', 'updat', 'impro', 'chang', 'fixed']);