diff --git a/Mage/Command/BuiltIn/Deploy.php b/Mage/Command/BuiltIn/Deploy.php index c3e7957..eca4e78 100644 --- a/Mage/Command/BuiltIn/Deploy.php +++ b/Mage/Command/BuiltIn/Deploy.php @@ -10,11 +10,12 @@ class Mage_Command_BuiltIn_Deploy public function __construct() { - $this->_releaseId = date('YmdHis'); } public function run() { + $this->getConfig()->setReleaseId(date('YmdHis')); + $this->_startTime = time(); $lockFile = '.mage/' . $this->getConfig()->getEnvironment() . '.lock'; @@ -28,14 +29,14 @@ class Mage_Command_BuiltIn_Deploy // Run Tasks for Deployment $hosts = $this->getConfig()->getHosts(); + $this->_hostsCount = count($hosts); - if (count($hosts) == 0) { + if ($this->_hostsCount == 0) { Mage_Console::output('Warning! No hosts defined, skipping deployment tasks.', 1, 3); } else { $this->_startTimeHosts = time(); foreach ($hosts as $host) { - $this->_hostsCount++; $this->getConfig()->setHost($host); $tasks = 0; $completedTasks = 0; @@ -45,13 +46,6 @@ class Mage_Command_BuiltIn_Deploy $tasksToRun = $this->getConfig()->getTasks(); array_unshift($tasksToRun, 'deployment/rsync'); - if ($this->getConfig()->release('enabled', false) == true) { - $this->getConfig()->setReleaseId($this->_releaseId); - array_push($tasksToRun, 'deployment/releases'); - } - - $tasksToRun = $tasksToRun + $this->getConfig()->getTasks('post-release'); - if (count($tasksToRun) == 0) { Mage_Console::output('Warning! No Deployment tasks defined.', 2); Mage_Console::output('Deployment to ' . $config->getHost() . ' skipped!', 1, 3); @@ -60,26 +54,9 @@ class Mage_Command_BuiltIn_Deploy foreach ($tasksToRun as $taskData) { $tasks++; $task = Mage_Task_Factory::get($taskData, $this->getConfig(), false, 'deploy'); - $task->init(); - - $runTask = true; - Mage_Console::output('Running ' . $task->getName() . ' ... ', 2, false); - - if (($task instanceOf Mage_Task_Releases_SkipOnOverride) && $this->getConfig()->getParameter('overrideRelease', false)) { - $runTask == false; - } - if ($runTask == true) { - $result = $task->run(); - - if ($result == true) { - Mage_Console::output('OK', 0); - $completedTasks++; - } else { - Mage_Console::output('FAIL', 0); - } - } else { - Mage_Console::output('SKIPPED', 0); + if ($this->_runTask($task)) { + $completedTasks++; } } @@ -93,6 +70,45 @@ class Mage_Command_BuiltIn_Deploy } } $this->_endTimeHosts = time(); + + // Releasing + if ($this->getConfig()->release('enabled', false) == true) { + // Execute the Releases + Mage_Console::output('Starting the Releaseing'); + foreach ($hosts as $host) { + $this->getConfig()->setHost($host); + $task = Mage_Task_Factory::get('deployment/release', $this->getConfig(), false, 'deploy'); + + if ($this->_runTask($task, 'Releasing on host ' . $host . ' ... ')) { + $completedTasks++; + } + } + Mage_Console::output('Finished the Releaseing', 1, 3); + + // Execute the Post-Release Tasks + foreach ($hosts as $host) { + Mage_Console::output('Starting Post-Release tasks for ' . $host . ':'); + $this->getConfig()->setHost($host); + $tasksToRun = $this->getConfig()->getTasks('post-release'); + $tasks = count($tasksToRun); + $completedTasks = 0; + + foreach ($tasksToRun as $task) { + $task = Mage_Task_Factory::get($task, $this->getConfig(), false, 'post-release'); + + if ($this->_runTask($task)) { + $completedTasks++; + } + } + + if ($completedTasks == $tasks) { + $tasksColor = 'green'; + } else { + $tasksColor = 'red'; + } + Mage_Console::output('Finished Post-Release tasks for ' . $host . ': <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . ' tasks done.', 1, 3); + } + } } // Run Post-Deployment Tasks @@ -144,16 +160,9 @@ class Mage_Command_BuiltIn_Deploy foreach ($tasksToRun as $taskData) { $tasks++; $task = Mage_Task_Factory::get($taskData, $config, false, $stage); - $task->init(); - - Mage_Console::output('Running ' . $task->getName() . ' ... ', 2, 0); - $result = $task->run(); - - if ($result == true) { - Mage_Console::output('OK', 0); + + if ($this->_runTask($task)) { $completedTasks++; - } else { - Mage_Console::output('FAIL', 0); } } @@ -165,8 +174,49 @@ class Mage_Command_BuiltIn_Deploy Mage_Console::output('Finished ' . $title . ' tasks: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . ' tasks done.', 1, 3); } + } + + private function _runTask($task, $title = null) + { + $task->init(); + + if ($title == null) { + $title = 'Running ' . $task->getName() . ' ... '; + } + Mage_Console::output($title, 2, 0); + + $runTask = true; + if (($task instanceOf Mage_Task_Releases_SkipOnOverride) && $this->getConfig()->getParameter('overrideRelease', false)) { + $runTask == false; + } + + $result = false; + if ($runTask == true) { + try { + $result = $task->run(); + + if ($result == true) { + Mage_Console::output('OK', 0); + $result = true; + } else { + Mage_Console::output('FAIL', 0); + $result = true; + } + } catch (Mage_Task_SkipException $e) { + Mage_Console::output('SKIPPED', 0); + $result = true; + } catch (Exception $e) { + Mage_Console::output('FAIL', 0); + $result = false; + } + } else { + Mage_Console::output('SKIPPED', 0); + $result = true; + } + + return $result; } /** diff --git a/Mage/Task/BuiltIn/Deployment/Releases.php b/Mage/Task/BuiltIn/Deployment/Release.php similarity index 95% rename from Mage/Task/BuiltIn/Deployment/Releases.php rename to Mage/Task/BuiltIn/Deployment/Release.php index 94cfeef..20d43b6 100644 --- a/Mage/Task/BuiltIn/Deployment/Releases.php +++ b/Mage/Task/BuiltIn/Deployment/Release.php @@ -1,7 +1,7 @@