From 6b207eb4806708da435d7f605043fb9ad59fa674 Mon Sep 17 00:00:00 2001 From: Kuba Turek Date: Sat, 17 Jan 2015 23:29:12 +0100 Subject: [PATCH 1/4] Obtain environment variables --- Mage/Task/AbstractTask.php | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Mage/Task/AbstractTask.php b/Mage/Task/AbstractTask.php index 491adfb..3637148 100644 --- a/Mage/Task/AbstractTask.php +++ b/Mage/Task/AbstractTask.php @@ -307,4 +307,53 @@ abstract class AbstractTask } return $result; } + + /** + * Returns the array of environment variables + * Returned array contains both system variables and variables set in config + * WARNING: To access system's variables you need to set proper value in your php.ini at variables_order key + * @see http://php.net/manual/en/ini.core.php#ini.variables-order + * + * @return array + */ + protected function getEnvVariables() + { + $configVars = array_merge( + $this->getConfig()->general('env', []), + $this->getConfig()->environmentConfig('env', []), + $this->getConfig()->getParameter('env', []) + ); + + if (isset($configVars['variables'])) { + $configVars = $configVars['variables']; + } + + $envVariables = array_merge( + $_ENV, + $configVars + ); + + return $envVariables; + } + + /** + * Returns ready to inject environment string + * The string is build from env vars array in schema: + * key1=value1 key2=value3 ... + * + * @return string + */ + protected function getEnvVarsString() + { + $envVarsArray = $this->getEnvVariables(); + $envVars = array_map( + function ($key, $value) { + return "$key=$value"; + }, + array_keys($envVarsArray), + $this->getEnvVariables() + ); + + return join(' ', $envVars); + } } From e4ba19679a456d8861d079d44e3d061127404cca Mon Sep 17 00:00:00 2001 From: Kuba Turek Date: Sat, 17 Jan 2015 23:34:47 +0100 Subject: [PATCH 2/4] Prepend environment variables to command --- Mage/Task/AbstractTask.php | 1 + 1 file changed, 1 insertion(+) diff --git a/Mage/Task/AbstractTask.php b/Mage/Task/AbstractTask.php index 3637148..14bf390 100644 --- a/Mage/Task/AbstractTask.php +++ b/Mage/Task/AbstractTask.php @@ -224,6 +224,7 @@ abstract class AbstractTask */ protected final function runCommand($command, &$output = null) { + $command = ltrim($this->getEnvVarsString() . ' ' . $command); if ($this->getStage() == self::STAGE_DEPLOY || $this->getStage() == self::STAGE_POST_RELEASE) { return $this->runCommandRemote($command, $output); } else { From d7db7cb66d0a7c1b469ccc63045131130c6aa27a Mon Sep 17 00:00:00 2001 From: Kuba Turek Date: Sun, 18 Jan 2015 14:17:26 +0100 Subject: [PATCH 3/4] Add some usage examples --- docs/example-config/.mage/config/environment/production.yml | 3 +++ docs/example-config/.mage/config/general.yml | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/docs/example-config/.mage/config/environment/production.yml b/docs/example-config/.mage/config/environment/production.yml index 97a3fcc..1af997f 100644 --- a/docs/example-config/.mage/config/environment/production.yml +++ b/docs/example-config/.mage/config/environment/production.yml @@ -22,3 +22,6 @@ tasks: - sampleTask - sampleTaskRollbackAware verbose_logging: true +env: + variables: + symfony_env: prod diff --git a/docs/example-config/.mage/config/general.yml b/docs/example-config/.mage/config/general.yml index c3a9b6d..3accc0e 100644 --- a/docs/example-config/.mage/config/general.yml +++ b/docs/example-config/.mage/config/general.yml @@ -7,3 +7,7 @@ verbose_logging: false scm: type: git url: git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git +env: + variables: + node_path: "/bin/node" + symfony_env: prod From acd1891c66c3fd7f9eb518ae350e8e500bf12276 Mon Sep 17 00:00:00 2001 From: Kuba Turek Date: Sun, 18 Jan 2015 20:10:26 +0100 Subject: [PATCH 4/4] Add shorten version for env.variables in task config --- Mage/Task/AbstractTask.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Mage/Task/AbstractTask.php b/Mage/Task/AbstractTask.php index 14bf390..1ac923e 100644 --- a/Mage/Task/AbstractTask.php +++ b/Mage/Task/AbstractTask.php @@ -322,7 +322,10 @@ abstract class AbstractTask $configVars = array_merge( $this->getConfig()->general('env', []), $this->getConfig()->environmentConfig('env', []), - $this->getConfig()->getParameter('env', []) + $this->getConfig()->getParameter('env', []), + [ + 'variables' => $this->getConfig()->getParameter('env.variables', []) + ] ); if (isset($configVars['variables'])) {