<?php /* * This file is part of the Magallanes package. * * (c) Andrés Montañez <andres@andresmontanez.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Mage\Command\BuiltIn; use Mage\Command\AbstractCommand; use Mage\Console; use Exception; /** * Command for Adding elements to the Configuration. * Currently elements allowed to add: * - environments * * @author Andrés Montañez <andres@andresmontanez.com> */ class AddCommand extends AbstractCommand { /** * Adds new Configuration Elements * @see \Mage\Command\AbstractCommand::run() * @throws Exception */ public function run() { $subCommand = $this->getConfig()->getArgument(1); try { switch ($subCommand) { case 'environment': $this->addEnvironment(); break; default; throw new Exception('The Type of Add is needed.'); break; } } catch (Exception $exception) { Console::output('<red>' . $exception->getMessage() . '</red>', 1, 2); } } /** * Adds an Environment * * @throws Exception */ protected function addEnvironment() { $withReleases = $this->getConfig()->getParameter('enableReleases', false); $environmentName = strtolower($this->getConfig()->getParameter('name')); if ($environmentName == '') { throw new Exception('You must specify a name for the environment.'); } $environmentConfigFile = getcwd() . '/.mage/config/environment/' . $environmentName . '.yml'; if (file_exists($environmentConfigFile)) { throw new Exception('The environment already exists.'); } Console::output('Adding new environment: <bold>' . $environmentName . '</bold>'); $releasesConfig = 'releases:' . PHP_EOL . ' enabled: true' . PHP_EOL . ' max: 10' . PHP_EOL . ' symlink: current' . PHP_EOL . ' directory: releases' . PHP_EOL; $baseConfig = '#' . $environmentName . PHP_EOL . 'deployment:' . PHP_EOL . ' user: dummy' . PHP_EOL . ' from: ./' . PHP_EOL . ' to: /var/www/vhosts/example.com/www' . PHP_EOL . ' excludes:' . PHP_EOL . ($withReleases ? $releasesConfig : '') . 'hosts:' . PHP_EOL . 'tasks:' . PHP_EOL . ' pre-deploy:' . PHP_EOL . ' on-deploy:' . PHP_EOL . ($withReleases ? (' post-release:' . PHP_EOL) : '') . ' post-deploy:' . PHP_EOL; $result = file_put_contents($environmentConfigFile, $baseConfig); if ($result) { Console::output('<light_green>Success!!</light_green> Environment config file for <bold>' . $environmentName . '</bold> created successfully at <blue>' . $environmentConfigFile . '</blue>'); Console::output('<bold>So please! Review and adjust its configuration.</bold>', 2, 2); } else { Console::output('<light_red>Error!!</light_red> Unable to create config file for environment called <bold>' . $environmentName . '</bold>', 1, 2); } } }