diff --git a/Mage/Command/BuiltIn/Deploy.php b/Mage/Command/BuiltIn/Deploy.php index f592f89..c3e7957 100644 --- a/Mage/Command/BuiltIn/Deploy.php +++ b/Mage/Command/BuiltIn/Deploy.php @@ -57,9 +57,9 @@ class Mage_Command_BuiltIn_Deploy Mage_Console::output('Deployment to ' . $config->getHost() . ' skipped!', 1, 3); } else { - foreach ($tasksToRun as $taskName) { + foreach ($tasksToRun as $taskData) { $tasks++; - $task = Mage_Task_Factory::get($taskName, $this->getConfig(), false, 'deploy'); + $task = Mage_Task_Factory::get($taskData, $this->getConfig(), false, 'deploy'); $task->init(); $runTask = true; @@ -141,9 +141,9 @@ class Mage_Command_BuiltIn_Deploy $tasks = 0; $completedTasks = 0; - foreach ($tasksToRun as $taskName) { + foreach ($tasksToRun as $taskData) { $tasks++; - $task = Mage_Task_Factory::get($taskName, $config, false, $stage); + $task = Mage_Task_Factory::get($taskData, $config, false, $stage); $task->init(); Mage_Console::output('Running ' . $task->getName() . ' ... ', 2, 0); diff --git a/Mage/Config.php b/Mage/Config.php index 76ea9fd..caa8bdb 100644 --- a/Mage/Config.php +++ b/Mage/Config.php @@ -57,10 +57,12 @@ class Mage_Config * @param string $name * @return mixed */ - public function getParameter($name, $default = null) + public function getParameter($name, $default = null, $extraParameters = array()) { if (isset($this->_parameters[$name])) { return $this->_parameters[$name]; + } else if (isset($extraParameters[$name])) { + return $extraParameters[$name]; } else { return $default; } @@ -107,7 +109,18 @@ class Mage_Config $tasks = array(); $config = $this->_getEnvironmentOption('tasks', array()); if (isset($config[$stage])) { - $tasks = ($config[$stage] ? (array) $config[$stage] : array()); + $tasksData = ($config[$stage] ? (array) $config[$stage] : array()); + foreach ($tasksData as $taskName => $taskData) { + if (is_array($taskData)) { + ; + $tasks[] = array( + 'name' => key($taskData), + 'parameters' => current($taskData), + ); + } else { + $tasks[] = $taskData; + } + } } return $tasks; @@ -317,7 +330,13 @@ class Mage_Config if (count($optionValue) == 1) { $this->_parameters[$optionValue[0]] = true; } else if (count($optionValue) == 2) { - $this->_parameters[$optionValue[0]] = $optionValue[1]; + if (strtolower($optionValue[1]) == 'true') { + $this->_parameters[$optionValue[0]] = true; + } else if (strtolower($optionValue[1]) == 'false') { + $this->_parameters[$optionValue[0]] = false; + } else { + $this->_parameters[$optionValue[0]] = $optionValue[1]; + } } } else { $this->_arguments[] = $argument; diff --git a/Mage/Task/BuiltIn/Releases/Rollback.php b/Mage/Task/BuiltIn/Releases/Rollback.php index 47d6cc6..e739788 100644 --- a/Mage/Task/BuiltIn/Releases/Rollback.php +++ b/Mage/Task/BuiltIn/Releases/Rollback.php @@ -73,8 +73,8 @@ class Mage_Task_BuiltIn_Releases_Rollback Mage_Console::output('Deployment to ' . $this->getConfig()->getHost() . ' skipped!', 1, 3); } else { - foreach ($tasksToRun as $taskName) { - $task = Mage_Task_Factory::get($taskName, $this->getConfig(), true, 'deploy'); + foreach ($tasksToRun as $taskData) { + $task = Mage_Task_Factory::get($taskData, $this->getConfig(), true, 'deploy'); $task->init(); Mage_Console::output('Running ' . $task->getName() . ' ... ', 2, false); diff --git a/Mage/Task/Factory.php b/Mage/Task/Factory.php index b59c63f..fbde107 100644 --- a/Mage/Task/Factory.php +++ b/Mage/Task/Factory.php @@ -2,27 +2,35 @@ class Mage_Task_Factory { /** - * - * - * @param string $taskName + * + * + * @param string|array $taskData * @param boolean $inRollback * @return Mage_Task_TaskAbstract */ - public static function get($taskName, Mage_Config $taskConfig, $inRollback = false, $stage = null) + public static function get($taskData, Mage_Config $taskConfig, $inRollback = false, $stage = null) { + if (is_array($taskData)) { + $taskName = $taskData['name']; + $taskParameters = $taskData['parameters']; + } else { + $taskName = $taskData; + $taskParameters = array(); + } + $instance = null; $taskName = ucwords(str_replace('-', ' ', $taskName)); $taskName = str_replace(' ', '', $taskName); - + if (strpos($taskName, '/') === false) { Mage_Autoload::loadUserTask($taskName); $className = 'Task_' . ucfirst($taskName); - $instance = new $className($taskConfig, $inRollback, $stage); + $instance = new $className($taskConfig, $inRollback, $stage, $taskParameters); } else { $taskName = str_replace(' ', '_', ucwords(str_replace('/', ' ', $taskName))); $className = 'Mage_Task_BuiltIn_' . $taskName; - $instance = new $className($taskConfig, $inRollback, $stage); + $instance = new $className($taskConfig, $inRollback, $stage, $taskParameters); } assert($instance instanceOf Mage_Task_TaskAbstract); diff --git a/Mage/Task/TaskAbstract.php b/Mage/Task/TaskAbstract.php index e4bbdd6..442d1c1 100644 --- a/Mage/Task/TaskAbstract.php +++ b/Mage/Task/TaskAbstract.php @@ -4,16 +4,18 @@ abstract class Mage_Task_TaskAbstract protected $_config = null; protected $_inRollback = false; protected $_stage = null; + protected $_parameters = array(); public abstract function getName(); public abstract function run(); - public final function __construct(Mage_Config $config, $inRollback = false, $stage = null) + public final function __construct(Mage_Config $config, $inRollback = false, $stage = null, $parameters = array()) { $this->_config = $config; $this->_inRollback = $inRollback; $this->_stage = $stage; + $this->_parameters = $parameters; } public function inRollback() @@ -35,6 +37,17 @@ abstract class Mage_Task_TaskAbstract { } + /** + * Return the a parameter + * + * @param string $name + * @return mixed + */ + public function getParameter($name, $default = null) + { + return $this->getConfig()->getParameter($name, $default, $this->_parameters); + } + protected final function _runLocalCommand($command, &$output = null) { return Mage_Console::executeCommand($command, $output); diff --git a/docs/example-config/.mage/config/environment/staging.yml b/docs/example-config/.mage/config/environment/staging.yml index 639e723..cd37405 100644 --- a/docs/example-config/.mage/config/environment/staging.yml +++ b/docs/example-config/.mage/config/environment/staging.yml @@ -17,5 +17,8 @@ tasks: - privileges - sampleTask - sampleTaskRollbackAware + - taskWithParameters: + booleanOption: true + - taskWithParameters #post-release #post-deploy: diff --git a/docs/example-config/.mage/tasks/SampleTask.php b/docs/example-config/.mage/tasks/SampleTask.php index 5664e52..3646ae9 100644 --- a/docs/example-config/.mage/tasks/SampleTask.php +++ b/docs/example-config/.mage/tasks/SampleTask.php @@ -8,7 +8,7 @@ class Task_SampleTask } public function run() - { + { return true; } } \ No newline at end of file diff --git a/docs/example-config/.mage/tasks/TaskWithParameters.php b/docs/example-config/.mage/tasks/TaskWithParameters.php new file mode 100644 index 0000000..e56b8bf --- /dev/null +++ b/docs/example-config/.mage/tasks/TaskWithParameters.php @@ -0,0 +1,20 @@ +getParameter('booleanOption', false); + if ($booleanOption) { + return 'A Sample Task With Parameters [booleanOption=true]'; + } else { + return 'A Sample Task With Parameters [booleanOption=false]'; + } + + } + + public function run() + { + return true; + } +} \ No newline at end of file