diff --git a/Mage/Config.php b/Mage/Config.php index 2260e1a..dedeb9c 100644 --- a/Mage/Config.php +++ b/Mage/Config.php @@ -3,6 +3,8 @@ class Mage_Config { private $_environment = null; private $_scm = null; + private $_host = null; + private $_releaseId = null; public function loadEnvironment($environment) { @@ -40,6 +42,28 @@ class Mage_Config return $hosts; } + public function setHost($host) + { + $this->_host = $host; + return $this; + } + + public function getHost() + { + return $this->_host; + } + + public function setReleaseId($id) + { + $this->_releaseId = $id; + return $this; + } + + public function getReleaseId() + { + return $this->_releaseId; + } + public function getTasks($stage = 'on-deploy') { switch ($stage) { @@ -87,4 +111,34 @@ class Mage_Config return $taskConfig; } + + public function deployment($option, $default = false) + { + $options = $this->getEnvironment(); + if (isset($options['deployment'][$option])) { + return $options['deployment'][$option]; + } else { + return $default; + } + } + + public function release($option, $default = false) + { + $options = $this->getEnvironment(); + if (isset($options['releases'][$option])) { + return $options['releases'][$option]; + } else { + return $default; + } + } + + public function scm($option, $default = false) + { + $options = $this->_scm; + if (isset($options[$option])) { + return $options[$option]; + } else { + return $default; + } + } } \ No newline at end of file diff --git a/Mage/Task/BuiltIn/Deployment/Releases.php b/Mage/Task/BuiltIn/Deployment/Releases.php index c07e945..7e6fddf 100644 --- a/Mage/Task/BuiltIn/Deployment/Releases.php +++ b/Mage/Task/BuiltIn/Deployment/Releases.php @@ -9,28 +9,15 @@ class Mage_Task_BuiltIn_Deployment_Releases public function run() { - if (isset($this->_config['deploy']['releases']['enabled'])) { - if ($this->_config['deploy']['releases']['enabled'] == 'true') { - if (isset($this->_config['deploy']['releases']['directory'])) { - $releasesDirectory = $this->_config['deploy']['releases']['directory']; - } else { - $releasesDirectory = 'releases'; - } - if (isset($this->_config['deploy']['releases']['symlink'])) { - $symlink = $this->_config['deploy']['releases']['symlink']; - } else { - $symlink = 'current'; - } + if ($this->_config->release('enabled', false) == true) { + $releasesDirectory = $this->_config->release('directory', 'releases'); + $symlink = $this->_config->release('symlink', 'current'); - $currentCopy = $releasesDirectory - . '/' . $this->_config['deploy']['releases']['_id']; + $currentCopy = $releasesDirectory . '/' . $this->_config->getReleaseId(); - $result = $this->_runRemoteCommand('ln -sf ' . $currentCopy . ' ' . $symlink); - return $result; + $result = $this->_runRemoteCommand('ln -sf ' . $currentCopy . ' ' . $symlink); + return $result; - } else { - return false; - } } else { return false; } diff --git a/Mage/Task/BuiltIn/Deployment/Rsync.php b/Mage/Task/BuiltIn/Deployment/Rsync.php index bbc5359..8f2dc9b 100644 --- a/Mage/Task/BuiltIn/Deployment/Rsync.php +++ b/Mage/Task/BuiltIn/Deployment/Rsync.php @@ -4,14 +4,10 @@ class Mage_Task_BuiltIn_Deployment_Rsync { public function getName() { - if (isset($this->_config['deploy']['releases']['enabled'])) { - if ($this->_config['deploy']['releases']['enabled'] == 'true') { - return 'Rsync (with Releases) [built-in]'; - } else { - return 'Rsync [built-in]'; - } + if ($this->_config->release('enabled', false) == true) { + return 'Rsync (with Releases) [built-in]'; } else { - return 'Rsync [built-in]'; + return 'Rsync [built-in]'; } } @@ -25,33 +21,23 @@ class Mage_Task_BuiltIn_Deployment_Rsync ); // Look for User Excludes - if (isset($this->_config['deploy']['deployment']['excludes'])) { - $userExcludes = (array) $this->_config['deploy']['deployment']['excludes']; - } else { - $userExcludes = array(); - } + $userExcludes = $this->_config->deployment('excludes', array()); // If we are working with releases - $deployToDirectory = $this->_config['deploy']['deployment']['to']; - if (isset($this->_config['deploy']['releases']['enabled'])) { - if ($this->_config['deploy']['releases']['enabled'] == 'true') { - if (isset($this->_config['deploy']['releases']['directory'])) { - $releasesDirectory = $this->_config['deploy']['releases']['directory']; - } else { - $releasesDirectory = 'releases'; - } + $deployToDirectory = $this->_config->deployment('to'); + if ($this->_config->release('enabled', false) == true) { + $releasesDirectory = $this->_config->release('directory', 'releases'); - $deployToDirectory = rtrim($this->_config['deploy']['deployment']['to'], '/') - . '/' . $releasesDirectory - . '/' . $this->_config['deploy']['releases']['_id']; - $this->_runRemoteCommand('mkdir -p ' . $releasesDirectory . '/' . $this->_config['deploy']['releases']['_id']); - } + $deployToDirectory = rtrim($this->_config->deployment('to'), '/') + . '/' . $releasesDirectory + . '/' . $this->_config->getReleaseId(); + $this->_runRemoteCommand('mkdir -p ' . $releasesDirectory . '/' . $this->_config->getReleaseId()); } $command = 'rsync -avz ' . $this->_excludes(array_merge($excludes, $userExcludes)) . ' ' - . $this->_config['deploy']['deployment']['from'] . ' ' - . $this->_config['deploy']['deployment']['user'] . '@' . $this->_config['deploy']['host'] . ':' . $deployToDirectory; + . $this->_config->deployment('from') . ' ' + . $this->_config->deployment('user') . '@' . $this->_config->getHost() . ':' . $deployToDirectory; $result = $this->_runLocalCommand($command); diff --git a/Mage/Task/BuiltIn/Releases/List.php b/Mage/Task/BuiltIn/Releases/List.php index f0df6b1..e681043 100644 --- a/Mage/Task/BuiltIn/Releases/List.php +++ b/Mage/Task/BuiltIn/Releases/List.php @@ -9,39 +9,44 @@ class Mage_Task_BuiltIn_Releases_List public function run() { - if (isset($this->_config['deploy']['releases']['enabled'])) { - if ($this->_config['deploy']['releases']['enabled'] == 'true') { - if (isset($this->_config['deploy']['releases']['directory'])) { - $releasesDirectory = $this->_config['deploy']['releases']['directory']; - } else { - $releasesDirectory = 'releases'; - } - if (isset($this->_config['deploy']['releases']['symlink'])) { - $symlink = $this->_config['deploy']['releases']['symlink']; - } else { - $symlink = 'current'; - } + if ($this->_config->release('enabled', false) == true) { + $releasesDirectory = $this->_config->release('directory', 'releases'); + $symlink = $this->_config->release('symlink', 'current'); - Mage_Console::output('Releases available on ' . $this->_config['deploy']['host'] . ''); - - $output = ''; - $result = $this->_runRemoteCommand('ls -1 ' . $releasesDirectory, $output); - $releases = ($output == '') ? array() : explode(PHP_EOL, $output); - - if (count($releases) == 0) { - Mage_Console::output('No releases available ... ', 2); - } else { - rsort($releases); - foreach ($releases as $releaseIndex => $releaseDate) { - Mage_Console::output('Index: ' . $releaseIndex . ' - ' . $releaseDate . '', 2); - } - } - - return $result; - + Mage_Console::output('Releases available on ' . $this->_config->getHost() . ''); + + $output = ''; + $result = $this->_runRemoteCommand('ls -1 ' . $releasesDirectory, $output); + $releases = ($output == '') ? array() : explode(PHP_EOL, $output); + + if (count($releases) == 0) { + Mage_Console::output('No releases available ... ', 2); } else { - return false; + rsort($releases); + $releases = array_slice($releases, 0, 10); + + foreach ($releases as $releaseIndex => $release) { + $releaseIndex = str_pad($releaseIndex * -1, 2, ' ', STR_PAD_LEFT); + $releaseDate = $release[0] . $release[1] . $release[2] .$release[3] + . '-' + . $release[4] . $release[5] + . '-' + . $release[6] . $release[7] + . ' ' + . $release[8] . $release[9] + . ':' + . $release[10] . $release[11] + . ':' + . $release[12] . $release[13]; + + Mage_Console::output( + 'Release: ' . $release . ' ' + . '- Date: ' . $releaseDate . ' ' + . '- Index: ' . $releaseIndex . '', 2); + } } + + return $result; } else { return false; } diff --git a/Mage/Task/BuiltIn/Scm/Update.php b/Mage/Task/BuiltIn/Scm/Update.php index ef7a00f..f4b7676 100644 --- a/Mage/Task/BuiltIn/Scm/Update.php +++ b/Mage/Task/BuiltIn/Scm/Update.php @@ -11,7 +11,7 @@ class Mage_Task_BuiltIn_Scm_Update public function init() { - switch ($this->_config['scm']['type']) { + switch ($this->_config->scm('type')) { case 'git': $this->_name = 'SCM Update (GIT) [built-in]'; break; @@ -24,7 +24,7 @@ class Mage_Task_BuiltIn_Scm_Update public function run() { - switch ($this->_config['scm']['type']) { + switch ($this->_config->scm('type')) { case 'git': $command = 'git pull'; break; diff --git a/Mage/Task/Deploy.php b/Mage/Task/Deploy.php index 83b39f2..434fd6b 100644 --- a/Mage/Task/Deploy.php +++ b/Mage/Task/Deploy.php @@ -24,21 +24,18 @@ class Mage_Task_Deploy } else { foreach ($hosts as $host) { - $taskConfig = $config->getConfig($host); + $config->setHost($host); $tasks = 0; $completedTasks = 0; Mage_Console::output('Deploying to ' . $host . ''); $tasksToRun = $config->getTasks(); - if (isset($taskConfig['deploy']['releases'])) { - if (isset($taskConfig['deploy']['releases']['enabled'])) { - if ($taskConfig['deploy']['releases']['enabled'] == 'true') { - $taskConfig['deploy']['releases']['_id'] = $this->_releaseId; - array_push($tasksToRun, 'deployment/releases'); - } - } + if ($config->release('enabled', false) == true) { + $config->setReleaseId($this->_releaseId); + array_push($tasksToRun, 'deployment/releases'); } + if (count($tasksToRun) == 0) { Mage_Console::output('Warning! No Deployment tasks defined.', 2); Mage_Console::output('Deployment to ' . $host . ' skipped!', 1, 3); @@ -46,7 +43,7 @@ class Mage_Task_Deploy } else { foreach ($tasksToRun as $taskName) { $tasks++; - $task = Mage_Task_Factory::get($taskName, $taskConfig); + $task = Mage_Task_Factory::get($taskName, $config); $task->init(); Mage_Console::output('Running ' . $task->getName() . ' ... ', 2, false); @@ -87,13 +84,12 @@ class Mage_Task_Deploy } else { Mage_Console::output('Starting ' . $title . ' tasks:'); - $taskConfig = $config->getConfig(); $tasks = 0; $completedTasks = 0; foreach ($tasksToRun as $taskName) { $tasks++; - $task = Mage_Task_Factory::get($taskName, $taskConfig); + $task = Mage_Task_Factory::get($taskName, $config); $task->init(); Mage_Console::output('Running ' . $task->getName() . ' ... ', 2, 0); diff --git a/Mage/Task/Factory.php b/Mage/Task/Factory.php index 34ee2b5..34644f0 100644 --- a/Mage/Task/Factory.php +++ b/Mage/Task/Factory.php @@ -7,7 +7,7 @@ class Mage_Task_Factory * @param string $taskName * @return Mage_Task_TaskAbstract */ - public static function get($taskName, $taskConfig) + public static function get($taskName, Mage_Config $taskConfig) { $instance = null; diff --git a/Mage/Task/Releases.php b/Mage/Task/Releases.php index af7804c..190e65c 100644 --- a/Mage/Task/Releases.php +++ b/Mage/Task/Releases.php @@ -27,15 +27,15 @@ class Mage_Task_Releases } else { foreach ($hosts as $host) { - $taskConfig = $config->getConfig($host); - + $config->setHost($host); switch ($this->getAction()) { case 'list': - $task = Mage_Task_Factory::get('releases/list', $taskConfig); + $task = Mage_Task_Factory::get('releases/list', $config); $task->init(); $result = $task->run(); break; } + Mage_Console::output(''); } } diff --git a/Mage/Task/TaskAbstract.php b/Mage/Task/TaskAbstract.php index b142bcc..a8f7226 100644 --- a/Mage/Task/TaskAbstract.php +++ b/Mage/Task/TaskAbstract.php @@ -7,7 +7,7 @@ abstract class Mage_Task_TaskAbstract public abstract function run(); - public final function __construct($config) + public final function __construct(Mage_Config $config) { $this->_config = $config; } @@ -24,8 +24,8 @@ abstract class Mage_Task_TaskAbstract protected final function _runRemoteCommand($command, &$output = null) { $localCommand = 'ssh ' - . $this->_config['deploy']['deployment']['user'] . '@' . $this->_config['deploy']['host'] . ' ' - . '"cd ' . $this->_config['deploy']['deployment']['to'] . ' && ' + . $this->_config->deployment('user') . '@' . $this->_config->getHost() . ' ' + . '"cd ' . $this->_config->deployment('to') . ' && ' . $command . '"'; return $this->_runLocalCommand($localCommand, $output);