diff --git a/Mage/Command/BuiltIn/Deploy.php b/Mage/Command/BuiltIn/Deploy.php index fbec452..47a76a9 100644 --- a/Mage/Command/BuiltIn/Deploy.php +++ b/Mage/Command/BuiltIn/Deploy.php @@ -37,8 +37,20 @@ class Mage_Command_BuiltIn_Deploy } else { $this->_startTimeHosts = time(); - foreach ($hosts as $host) { + foreach ($hosts as $_hostKey => $host) { + + // Check if Host has specific configuration + $hostConfig = null; + if (is_array($host)) { + $hostConfig = $host; + $host = $_hostKey; + } + + // Set Host and Host Specific Config $this->getConfig()->setHost($host); + $this->getConfig()->setHostConfig($hostConfig); + + // Prepare Tasks $tasks = 0; $completedTasks = 0; @@ -71,6 +83,9 @@ class Mage_Command_BuiltIn_Deploy Mage_Console::output('Deployment to ' . $this->getConfig()->getHost() . ' completed: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . ' tasks done.', 1, 3); } + + // Reset Host Config + $this->getConfig()->setHostConfig(null); } $this->_endTimeHosts = time(); diff --git a/Mage/Config.php b/Mage/Config.php index c018f34..fd1285d 100644 --- a/Mage/Config.php +++ b/Mage/Config.php @@ -5,6 +5,7 @@ class Mage_Config private $_parameters = array(); private $_environment = false; private $_host = null; + private $_hostConfig = null; private $_releaseId = null; private $_config = array( 'general' => array(), @@ -115,6 +116,14 @@ class Mage_Config { $tasks = array(); $config = $this->_getEnvironmentOption('tasks', array()); + + // Host Config + if (is_array($this->_hostConfig) && isset($this->_hostConfig['tasks'])) { + if (isset($this->_hostConfig['tasks'][$stage])) { + $config[$stage] = $this->_hostConfig['tasks'][$stage]; + } + } + if (isset($config[$stage])) { $tasksData = ($config[$stage] ? (array) $config[$stage] : array()); foreach ($tasksData as $taskName => $taskData) { @@ -171,6 +180,18 @@ class Mage_Config return $this; } + /** + * Set the host specific configuration + * + * @param array $hostConfig + * @return Mage_Config + */ + public function setHostConfig($hostConfig = null) + { + $this->_hostConfig = $hostConfig; + return $this; + } + /** * Get the current host name * @@ -234,6 +255,14 @@ class Mage_Config */ public function deployment($option, $default = false) { + // Host Config + if (is_array($this->_hostConfig) && isset($this->_hostConfig['deployment'])) { + if (isset($this->_hostConfig['deployment'][$option])) { + return $this->_hostConfig['deployment'][$option]; + } + } + + // Global Config $config = $this->_getEnvironmentOption('deployment', array()); if (isset($config[$option])) { if (is_array($default) && ($config[$option] == '')) { @@ -254,7 +283,14 @@ class Mage_Config * @return mixed */ public function release($option, $default = false) - { + { + // Host Config + if (is_array($this->_hostConfig) && isset($this->_hostConfig['releases'])) { + if (isset($this->_hostConfig['releases'][$option])) { + return $this->_hostConfig['releases'][$option]; + } + } + $config = $this->_getEnvironmentOption('releases', array()); if (isset($config[$option])) { if (is_array($default) && ($config[$option] == '')) { diff --git a/docs/example-config/.mage/config/environment/production.yml b/docs/example-config/.mage/config/environment/production.yml index 9132522..4ff2629 100644 --- a/docs/example-config/.mage/config/environment/production.yml +++ b/docs/example-config/.mage/config/environment/production.yml @@ -1,12 +1,12 @@ #production deployment: user: root -# from: ./ - source: - type: git - repository: git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git - from: production - temporal: /tmp/myAppClone + from: ./ +# source: +# type: git +# repository: git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git +# from: production +# temporal: /tmp/myAppClone to: /var/www/vhosts/example.com/www excludes: - application/data/cache/twig/* @@ -16,8 +16,19 @@ releases: symlink: current directory: releases hosts: - - s01.example.com:22 - - s02.example.com + s01.example.com:22: + deployment: + user: nobody + s02.example.com: + deployment: + user: toor + to: /home/web/public + releases: + max: 10 + tasks: + on-deploy: + - privileges + - s03.example.com tasks: pre-deploy: - scm/update diff --git a/docs/example-config/.mage/config/general.yml b/docs/example-config/.mage/config/general.yml index 66f79ce..f601999 100644 --- a/docs/example-config/.mage/config/general.yml +++ b/docs/example-config/.mage/config/general.yml @@ -3,3 +3,6 @@ name: My fantastic App email: andresmontanez@gmail.com notifications: true logging: true +scm: + type: git + url: git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git \ No newline at end of file diff --git a/docs/example-config/.mage/config/scm.yml b/docs/example-config/.mage/config/scm.yml deleted file mode 100644 index 0affbaa..0000000 --- a/docs/example-config/.mage/config/scm.yml +++ /dev/null @@ -1,3 +0,0 @@ -#scm settings -type: git -uri: git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git \ No newline at end of file