From dc48f19b265150c4cc584cf6c0726d7cb78cef17 Mon Sep 17 00:00:00 2001 From: Yanick Witschi Date: Wed, 1 Feb 2017 15:23:31 +0100 Subject: [PATCH 1/3] Added a a helper method to the runtime that merges env specific options with global ones --- src/Runtime/Runtime.php | 21 +++++++++++++++++++ src/Task/BuiltIn/Symfony/AsseticDumpTask.php | 5 +---- .../BuiltIn/Symfony/AssetsInstallTask.php | 5 +---- src/Task/BuiltIn/Symfony/CacheClearTask.php | 5 +---- src/Task/BuiltIn/Symfony/CacheWarmupTask.php | 5 +---- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/Runtime/Runtime.php b/src/Runtime/Runtime.php index e03cc48..8952c37 100644 --- a/src/Runtime/Runtime.php +++ b/src/Runtime/Runtime.php @@ -229,6 +229,27 @@ class Runtime return $default; } + /** + * Shortcut to get the the configuration option for a specific environment and merge it with + * the global one (environment specific overrides the global one if present). + * + * @param $key + * @param null $defaultEnv + * @param null $defaultConfig + * + * @return array + */ + public function getMergedEnvAndConfigOption($key, $defaultEnv = null, $defaultConfig = null) + { + $userGlobalOptions = $this->getConfigOption($key, $defaultConfig); + $userEnvOptions = $this->getEnvOption($key, $defaultEnv); + + return array_merge( + (is_array($userGlobalOptions) ? $userGlobalOptions : []), + (is_array($userEnvOptions) ? $userEnvOptions : []) + ); + } + /** * Overwrites an Environment Configuration Option * diff --git a/src/Task/BuiltIn/Symfony/AsseticDumpTask.php b/src/Task/BuiltIn/Symfony/AsseticDumpTask.php index 4c4404c..3229721 100644 --- a/src/Task/BuiltIn/Symfony/AsseticDumpTask.php +++ b/src/Task/BuiltIn/Symfony/AsseticDumpTask.php @@ -43,12 +43,9 @@ class AsseticDumpTask extends AbstractTask protected function getOptions() { - $userGlobalOptions = $this->runtime->getConfigOption('symfony', []); - $userEnvOptions = $this->runtime->getEnvOption('symfony', []); $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'flags' => ''], - (is_array($userGlobalOptions) ? $userGlobalOptions : []), - (is_array($userEnvOptions) ? $userEnvOptions : []), + $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), $this->options ); diff --git a/src/Task/BuiltIn/Symfony/AssetsInstallTask.php b/src/Task/BuiltIn/Symfony/AssetsInstallTask.php index a6a63c4..8f313ef 100644 --- a/src/Task/BuiltIn/Symfony/AssetsInstallTask.php +++ b/src/Task/BuiltIn/Symfony/AssetsInstallTask.php @@ -43,12 +43,9 @@ class AssetsInstallTask extends AbstractTask protected function getOptions() { - $userGlobalOptions = $this->runtime->getConfigOption('symfony', []); - $userEnvOptions = $this->runtime->getEnvOption('symfony', []); $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'target' => 'web', 'flags' => '--symlink --relative'], - (is_array($userGlobalOptions) ? $userGlobalOptions : []), - (is_array($userEnvOptions) ? $userEnvOptions : []), + $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), $this->options ); diff --git a/src/Task/BuiltIn/Symfony/CacheClearTask.php b/src/Task/BuiltIn/Symfony/CacheClearTask.php index bd5b77a..f9df326 100644 --- a/src/Task/BuiltIn/Symfony/CacheClearTask.php +++ b/src/Task/BuiltIn/Symfony/CacheClearTask.php @@ -43,12 +43,9 @@ class CacheClearTask extends AbstractTask protected function getOptions() { - $userGlobalOptions = $this->runtime->getConfigOption('symfony', []); - $userEnvOptions = $this->runtime->getEnvOption('symfony', []); $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'flags' => ''], - (is_array($userGlobalOptions) ? $userGlobalOptions : []), - (is_array($userEnvOptions) ? $userEnvOptions : []), + $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), $this->options ); diff --git a/src/Task/BuiltIn/Symfony/CacheWarmupTask.php b/src/Task/BuiltIn/Symfony/CacheWarmupTask.php index a2e30f0..f0b6229 100644 --- a/src/Task/BuiltIn/Symfony/CacheWarmupTask.php +++ b/src/Task/BuiltIn/Symfony/CacheWarmupTask.php @@ -43,12 +43,9 @@ class CacheWarmupTask extends AbstractTask protected function getOptions() { - $userGlobalOptions = $this->runtime->getConfigOption('symfony', []); - $userEnvOptions = $this->runtime->getEnvOption('symfony', []); $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'flags' => ''], - (is_array($userGlobalOptions) ? $userGlobalOptions : []), - (is_array($userEnvOptions) ? $userEnvOptions : []), + $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), $this->options ); From b2099105fcce18eca0db71b6d471351c1dbf9361 Mon Sep 17 00:00:00 2001 From: Yanick Witschi Date: Wed, 1 Feb 2017 15:23:44 +0100 Subject: [PATCH 2/3] Added support for environment specific composer settings --- .../BuiltIn/Composer/DumpAutoloadTask.php | 3 +- src/Task/BuiltIn/Composer/InstallTask.php | 3 +- .../BuiltIn/DeployCommandMiscTasksTest.php | 30 +++++++++++++++++++ tests/Resources/composer-env.yml | 19 ++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 tests/Resources/composer-env.yml diff --git a/src/Task/BuiltIn/Composer/DumpAutoloadTask.php b/src/Task/BuiltIn/Composer/DumpAutoloadTask.php index b778413..39e44da 100644 --- a/src/Task/BuiltIn/Composer/DumpAutoloadTask.php +++ b/src/Task/BuiltIn/Composer/DumpAutoloadTask.php @@ -43,10 +43,9 @@ class DumpAutoloadTask extends AbstractTask protected function getOptions() { - $userOptions = $this->runtime->getConfigOption('composer', []); $options = array_merge( ['path' => 'composer', 'flags' => '--optimize'], - (is_array($userOptions) ? $userOptions : []), + $this->runtime->getMergedEnvAndConfigOption('composer', [], []), $this->options ); diff --git a/src/Task/BuiltIn/Composer/InstallTask.php b/src/Task/BuiltIn/Composer/InstallTask.php index ce97361..5596864 100644 --- a/src/Task/BuiltIn/Composer/InstallTask.php +++ b/src/Task/BuiltIn/Composer/InstallTask.php @@ -43,10 +43,9 @@ class InstallTask extends AbstractTask protected function getOptions() { - $userOptions = $this->runtime->getConfigOption('composer', []); $options = array_merge( ['path' => 'composer', 'flags' => '--optimize-autoloader'], - (is_array($userOptions) ? $userOptions : []), + $this->runtime->getMergedEnvAndConfigOption('composer', [], []), $this->options ); diff --git a/tests/Command/BuiltIn/DeployCommandMiscTasksTest.php b/tests/Command/BuiltIn/DeployCommandMiscTasksTest.php index 4d5efd6..a4beb90 100644 --- a/tests/Command/BuiltIn/DeployCommandMiscTasksTest.php +++ b/tests/Command/BuiltIn/DeployCommandMiscTasksTest.php @@ -80,6 +80,36 @@ class DeployCommandMiscTasksTest extends TestCase $this->assertEquals(0, $tester->getStatusCode()); } + public function testComposerEnvFlags() + { + $application = new MageApplicationMockup(__DIR__ . '/../../Resources/composer-env.yml'); + + /** @var AbstractCommand $command */ + $command = $application->find('deploy'); + $this->assertTrue($command instanceof DeployCommand); + + $tester = new CommandTester($command); + $tester->execute(['command' => $command->getName(), 'environment' => 'test']); + + $ranCommands = $application->getRuntime()->getRanCommands(); + + $testCase = array( + 0 => '/usr/foobar/composer install --prefer-source', + 1 => '/usr/foobar/composer dump-autoload --no-scripts', + 2 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=./var/cache/* --exclude=./var/log/* --exclude=./web/app_dev.php ./ tester@testhost:/var/www/test', + ); + + // Check total of Executed Commands + $this->assertEquals(count($testCase), count($ranCommands)); + + // Check Generated Commands + foreach ($testCase as $index => $command) { + $this->assertEquals($command, $ranCommands[$index]); + } + + $this->assertEquals(0, $tester->getStatusCode()); + } + public function testInvalidTaskName() { $application = new MageApplicationMockup(__DIR__ . '/../../Resources/invalid-task.yml'); diff --git a/tests/Resources/composer-env.yml b/tests/Resources/composer-env.yml new file mode 100644 index 0000000..2421fdf --- /dev/null +++ b/tests/Resources/composer-env.yml @@ -0,0 +1,19 @@ +magephp: + log_dir: /tmp + composer: + path: /usr/bin/composer.phar + environments: + test: + composer: + path: /usr/foobar/composer + user: tester + host_path: /var/www/test + exclude: + - ./var/cache/* + - ./var/log/* + - ./web/app_dev.php + hosts: + - testhost + pre-deploy: + - composer/install: { flags: '--prefer-source' } + - composer/dump-autoload: { flags: '--no-scripts' } From 532a3146b07ea9eeeaf979e8b0228c4d0d4895d3 Mon Sep 17 00:00:00 2001 From: Yanick Witschi Date: Fri, 3 Feb 2017 08:43:24 +0100 Subject: [PATCH 3/3] Renamed method --- src/Runtime/Runtime.php | 9 ++++----- src/Task/BuiltIn/Composer/DumpAutoloadTask.php | 2 +- src/Task/BuiltIn/Composer/InstallTask.php | 2 +- src/Task/BuiltIn/Symfony/AsseticDumpTask.php | 2 +- src/Task/BuiltIn/Symfony/AssetsInstallTask.php | 2 +- src/Task/BuiltIn/Symfony/CacheClearTask.php | 2 +- src/Task/BuiltIn/Symfony/CacheWarmupTask.php | 2 +- 7 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Runtime/Runtime.php b/src/Runtime/Runtime.php index 8952c37..a9b2c24 100644 --- a/src/Runtime/Runtime.php +++ b/src/Runtime/Runtime.php @@ -233,15 +233,14 @@ class Runtime * Shortcut to get the the configuration option for a specific environment and merge it with * the global one (environment specific overrides the global one if present). * - * @param $key - * @param null $defaultEnv - * @param null $defaultConfig + * @param $key + * @param array $defaultEnv * * @return array */ - public function getMergedEnvAndConfigOption($key, $defaultEnv = null, $defaultConfig = null) + public function getMergedOption($key, $defaultEnv = []) { - $userGlobalOptions = $this->getConfigOption($key, $defaultConfig); + $userGlobalOptions = $this->getConfigOption($key, $defaultEnv); $userEnvOptions = $this->getEnvOption($key, $defaultEnv); return array_merge( diff --git a/src/Task/BuiltIn/Composer/DumpAutoloadTask.php b/src/Task/BuiltIn/Composer/DumpAutoloadTask.php index 39e44da..9078283 100644 --- a/src/Task/BuiltIn/Composer/DumpAutoloadTask.php +++ b/src/Task/BuiltIn/Composer/DumpAutoloadTask.php @@ -45,7 +45,7 @@ class DumpAutoloadTask extends AbstractTask { $options = array_merge( ['path' => 'composer', 'flags' => '--optimize'], - $this->runtime->getMergedEnvAndConfigOption('composer', [], []), + $this->runtime->getMergedOption('composer'), $this->options ); diff --git a/src/Task/BuiltIn/Composer/InstallTask.php b/src/Task/BuiltIn/Composer/InstallTask.php index 5596864..7a63672 100644 --- a/src/Task/BuiltIn/Composer/InstallTask.php +++ b/src/Task/BuiltIn/Composer/InstallTask.php @@ -45,7 +45,7 @@ class InstallTask extends AbstractTask { $options = array_merge( ['path' => 'composer', 'flags' => '--optimize-autoloader'], - $this->runtime->getMergedEnvAndConfigOption('composer', [], []), + $this->runtime->getMergedOption('composer'), $this->options ); diff --git a/src/Task/BuiltIn/Symfony/AsseticDumpTask.php b/src/Task/BuiltIn/Symfony/AsseticDumpTask.php index 3229721..3f23d19 100644 --- a/src/Task/BuiltIn/Symfony/AsseticDumpTask.php +++ b/src/Task/BuiltIn/Symfony/AsseticDumpTask.php @@ -45,7 +45,7 @@ class AsseticDumpTask extends AbstractTask { $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'flags' => ''], - $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), + $this->runtime->getMergedOption('symfony'), $this->options ); diff --git a/src/Task/BuiltIn/Symfony/AssetsInstallTask.php b/src/Task/BuiltIn/Symfony/AssetsInstallTask.php index 8f313ef..001d100 100644 --- a/src/Task/BuiltIn/Symfony/AssetsInstallTask.php +++ b/src/Task/BuiltIn/Symfony/AssetsInstallTask.php @@ -45,7 +45,7 @@ class AssetsInstallTask extends AbstractTask { $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'target' => 'web', 'flags' => '--symlink --relative'], - $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), + $this->runtime->getMergedOption('symfony'), $this->options ); diff --git a/src/Task/BuiltIn/Symfony/CacheClearTask.php b/src/Task/BuiltIn/Symfony/CacheClearTask.php index f9df326..a0b6475 100644 --- a/src/Task/BuiltIn/Symfony/CacheClearTask.php +++ b/src/Task/BuiltIn/Symfony/CacheClearTask.php @@ -45,7 +45,7 @@ class CacheClearTask extends AbstractTask { $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'flags' => ''], - $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), + $this->runtime->getMergedOption('symfony'), $this->options ); diff --git a/src/Task/BuiltIn/Symfony/CacheWarmupTask.php b/src/Task/BuiltIn/Symfony/CacheWarmupTask.php index f0b6229..8584beb 100644 --- a/src/Task/BuiltIn/Symfony/CacheWarmupTask.php +++ b/src/Task/BuiltIn/Symfony/CacheWarmupTask.php @@ -45,7 +45,7 @@ class CacheWarmupTask extends AbstractTask { $options = array_merge( ['console' => 'bin/console', 'env' => 'dev', 'flags' => ''], - $this->runtime->getMergedEnvAndConfigOption('symfony', [], []), + $this->runtime->getMergedOption('symfony'), $this->options );