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 . '' . $tasksColor . '> 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 . '' . $tasksColor . '> 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 @@