mirror of
				https://github.com/hauke68/Magallanes.git
				synced 2025-11-04 00:50:18 +01:00 
			
		
		
		
	Merge branch 'develop'
This commit is contained in:
		
						commit
						5199a915b6
					
				
							
								
								
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,13 +1,9 @@
 | 
			
		||||
.settings
 | 
			
		||||
.settings/*
 | 
			
		||||
.project
 | 
			
		||||
.buildpath
 | 
			
		||||
.idea
 | 
			
		||||
vendor
 | 
			
		||||
mage.phar
 | 
			
		||||
 | 
			
		||||
# OS generated files # // GitHub Recommendation
 | 
			
		||||
######################
 | 
			
		||||
.DS_Store*
 | 
			
		||||
ehthumbs.db
 | 
			
		||||
Icon?
 | 
			
		||||
Thumbs.db
 | 
			
		||||
Thumbs.db
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@ -24,4 +24,4 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
--------
 | 
			
		||||
The Yaml Library Parser is (c) by Fabien Potencier, and belongs to the Symfony Proyect
 | 
			
		||||
--------
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
@ -52,4 +52,4 @@ abstract class AbstractCommand
 | 
			
		||||
    {
 | 
			
		||||
        return $this->config;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -68,7 +68,7 @@ class AddCommand extends AbstractCommand
 | 
			
		||||
            throw new Exception('The environment already exists.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Console::output('Adding new environment: <dark_gray>' . $environmentName . '</dark_gray>');
 | 
			
		||||
        Console::output('Adding new environment: <bold>' . $environmentName . '</bold>');
 | 
			
		||||
 | 
			
		||||
        $releasesConfig = 'releases:' . PHP_EOL
 | 
			
		||||
            . '  enabled: true' . PHP_EOL
 | 
			
		||||
@ -93,10 +93,10 @@ class AddCommand extends AbstractCommand
 | 
			
		||||
        $result = file_put_contents($environmentConfigFile, $baseConfig);
 | 
			
		||||
 | 
			
		||||
        if ($result) {
 | 
			
		||||
            Console::output('<light_green>Success!!</light_green> Environment config file for <dark_gray>' . $environmentName . '</dark_gray> created successfully at <blue>' . $environmentConfigFile . '</blue>');
 | 
			
		||||
            Console::output('<dark_gray>So please! Review and adjust its configuration.</dark_gray>', 2, 2);
 | 
			
		||||
            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 <dark_gray>' . $environmentName . '</dark_gray>', 1, 2);
 | 
			
		||||
            Console::output('<light_red>Error!!</light_red> Unable to create config file for environment called <bold>' . $environmentName . '</bold>', 1, 2);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ class CompileCommand extends AbstractCommand
 | 
			
		||||
    {
 | 
			
		||||
        if (ini_get('phar.readonly')) {
 | 
			
		||||
            Console::output('The <purple>php.ini</purple> variable <light_red>phar.readonly</light_red> must be <yellow>Off</yellow>.', 1, 2);
 | 
			
		||||
            return 300;
 | 
			
		||||
            return 200;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $compiler = new Compiler;
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@
 | 
			
		||||
 * This file is part of the Magallanes package.
 | 
			
		||||
*
 | 
			
		||||
* (c) Andrés Montañez <andres@andresmontanez.com>
 | 
			
		||||
* (c) Alex V Kotelnikov <gudron@gudron.me>
 | 
			
		||||
*
 | 
			
		||||
* For the full copyright and license information, please view the LICENSE
 | 
			
		||||
* file that was distributed with this source code.
 | 
			
		||||
@ -16,6 +17,7 @@ use Mage\Task\Factory;
 | 
			
		||||
use Mage\Task\AbstractTask;
 | 
			
		||||
use Mage\Task\Releases\SkipOnOverride;
 | 
			
		||||
use Mage\Task\ErrorWithMessageException;
 | 
			
		||||
use Mage\Task\RollbackException;
 | 
			
		||||
use Mage\Task\SkipException;
 | 
			
		||||
use Mage\Console;
 | 
			
		||||
use Mage\Config;
 | 
			
		||||
@ -109,20 +111,20 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $exitCode = 1000;
 | 
			
		||||
        $exitCode = 240;
 | 
			
		||||
 | 
			
		||||
        // Check if Environment is not Locked
 | 
			
		||||
        $lockFile = getcwd() . '/.mage/' . $this->getConfig()->getEnvironment() . '.lock';
 | 
			
		||||
        if (file_exists($lockFile)) {
 | 
			
		||||
            Console::output('<red>This environment is locked!</red>', 1, 2);
 | 
			
		||||
            echo file_get_contents($lockFile);
 | 
			
		||||
            return 1010;
 | 
			
		||||
            return 231;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Check for running instance and Lock
 | 
			
		||||
        if (file_exists(getcwd() . '/.mage/~working.lock')) {
 | 
			
		||||
            Console::output('<red>There is already an instance of Magallanes running!</red>', 1, 2);
 | 
			
		||||
            return 1020;
 | 
			
		||||
            return 230;
 | 
			
		||||
        } else {
 | 
			
		||||
            touch(getcwd() . '/.mage/~working.lock');
 | 
			
		||||
        }
 | 
			
		||||
@ -131,21 +133,21 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
        $this->getConfig()->setReleaseId(date('YmdHis'));
 | 
			
		||||
 | 
			
		||||
        // Deploy Summary
 | 
			
		||||
        Console::output('<dark_gray>Deploy summary</dark_gray>', 1, 1);
 | 
			
		||||
        Console::output('<bold>Deploy summary</bold>', 1, 1);
 | 
			
		||||
 | 
			
		||||
        // Deploy Summary - Environment
 | 
			
		||||
        Console::output('<dark_gray>Environment:</dark_gray> <purple>' . $this->getConfig()->getEnvironment() . '</purple>', 2, 1);
 | 
			
		||||
        Console::output('<bold>Environment:</bold> <purple>' . $this->getConfig()->getEnvironment() . '</purple>', 2, 1);
 | 
			
		||||
 | 
			
		||||
        // Deploy Summary - Releases
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false)) {
 | 
			
		||||
            Console::output('<dark_gray>Release ID:</dark_gray>  <purple>' . $this->getConfig()->getReleaseId() . '</purple>', 2, 1);
 | 
			
		||||
            Console::output('<bold>Release ID:</bold>  <purple>' . $this->getConfig()->getReleaseId() . '</purple>', 2, 1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Deploy Summary - SCM
 | 
			
		||||
        if ($this->getConfig()->deployment('scm', false)) {
 | 
			
		||||
            $scmConfig = $this->getConfig()->deployment('scm');
 | 
			
		||||
            if (isset($scmConfig['branch'])) {
 | 
			
		||||
                Console::output('<dark_gray>SCM Branch:</dark_gray>  <purple>' . $scmConfig['branch'] . '</purple>', 2, 1);
 | 
			
		||||
                Console::output('<bold>SCM Branch:</bold>  <purple>' . $scmConfig['branch'] . '</purple>', 2, 1);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -160,7 +162,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
        // Check Status
 | 
			
		||||
        if (self::$failedTasks > 0) {
 | 
			
		||||
            self::$deployStatus = self::FAILED;
 | 
			
		||||
            Console::output('A total of <dark_gray>' . self::$failedTasks . '</dark_gray> deployment tasks failed: <red>ABORTING</red>', 1, 2);
 | 
			
		||||
            Console::output('A total of <bold>' . self::$failedTasks . '</bold> deployment tasks failed: <red>ABORTING</red>', 1, 2);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            // Run Deployment Tasks
 | 
			
		||||
@ -169,7 +171,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
            // Check Status
 | 
			
		||||
            if (self::$failedTasks > 0) {
 | 
			
		||||
                self::$deployStatus = self::FAILED;
 | 
			
		||||
                Console::output('A total of <dark_gray>' . self::$failedTasks . '</dark_gray> deployment tasks failed: <red>ABORTING</red>', 1, 2);
 | 
			
		||||
                Console::output('A total of <bold>' . self::$failedTasks . '</bold> deployment tasks failed: <red>ABORTING</red>', 1, 2);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Run Post-Deployment Tasks
 | 
			
		||||
@ -179,15 +181,15 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
        // Time Information Hosts
 | 
			
		||||
        if ($this->hostsCount > 0) {
 | 
			
		||||
            $timeTextHost = $this->transcurredTime($this->endTimeHosts - $this->startTimeHosts);
 | 
			
		||||
            Console::output('Time for deployment: <dark_gray>' . $timeTextHost . '</dark_gray>.');
 | 
			
		||||
            Console::output('Time for deployment: <bold>' . $timeTextHost . '</bold>.');
 | 
			
		||||
 | 
			
		||||
            $timeTextPerHost = $this->transcurredTime(round(($this->endTimeHosts - $this->startTimeHosts) / $this->hostsCount));
 | 
			
		||||
            Console::output('Average time per host: <dark_gray>' . $timeTextPerHost . '</dark_gray>.');
 | 
			
		||||
            Console::output('Average time per host: <bold>' . $timeTextPerHost . '</bold>.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Time Information General
 | 
			
		||||
        $timeText = $this->transcurredTime(time() - $this->startTime);
 | 
			
		||||
        Console::output('Total time: <dark_gray>' . $timeText . '</dark_gray>.', 1, 2);
 | 
			
		||||
        Console::output('Total time: <bold>' . $timeText . '</bold>.', 1, 2);
 | 
			
		||||
 | 
			
		||||
        // Send Notifications
 | 
			
		||||
        $this->sendNotification(self::$failedTasks > 0 ? false : true);
 | 
			
		||||
@ -249,10 +251,10 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (count($tasksToRun) == 0) {
 | 
			
		||||
            Console::output('<dark_gray>No </dark_gray><light_cyan>' . $title . '</light_cyan> <dark_gray>tasks defined.</dark_gray>', 1, 3);
 | 
			
		||||
            Console::output('<bold>No </bold><light_cyan>' . $title . '</light_cyan> <bold>tasks defined.</bold>', 1, 3);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            Console::output('Starting <dark_gray>' . $title . '</dark_gray> tasks:');
 | 
			
		||||
            Console::output('Starting <bold>' . $title . '</bold> tasks:');
 | 
			
		||||
 | 
			
		||||
            $tasks = 0;
 | 
			
		||||
            $completedTasks = 0;
 | 
			
		||||
@ -274,7 +276,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                $tasksColor = 'red';
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Console::output('Finished <dark_gray>' . $title . '</dark_gray> tasks: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
            Console::output('Finished <bold>' . $title . '</bold> tasks: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -290,7 +292,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
        self::$failedTasks = 0;
 | 
			
		||||
 | 
			
		||||
        if ($this->hostsCount == 0) {
 | 
			
		||||
            Console::output('<light_purple>Warning!</light_purple> <dark_gray>No hosts defined, skipping deployment tasks.</dark_gray>', 1, 3);
 | 
			
		||||
            Console::output('<light_purple>Warning!</light_purple> <bold>No hosts defined, skipping deployment tasks.</bold>', 1, 3);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->startTimeHosts = time();
 | 
			
		||||
@ -311,7 +313,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                $tasks = 0;
 | 
			
		||||
                $completedTasks = 0;
 | 
			
		||||
 | 
			
		||||
                Console::output('Deploying to <dark_gray>' . $this->getConfig()->getHost() . '</dark_gray>');
 | 
			
		||||
                Console::output('Deploying to <bold>' . $this->getConfig()->getHost() . '</bold>');
 | 
			
		||||
 | 
			
		||||
                $tasksToRun = $this->getConfig()->getTasks();
 | 
			
		||||
 | 
			
		||||
@ -320,8 +322,8 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                array_unshift($tasksToRun, $deployStrategy);
 | 
			
		||||
 | 
			
		||||
                if (count($tasksToRun) == 0) {
 | 
			
		||||
                    Console::output('<light_purple>Warning!</light_purple> <dark_gray>No </dark_gray><light_cyan>Deployment</light_cyan> <dark_gray>tasks defined.</dark_gray>', 2);
 | 
			
		||||
                    Console::output('Deployment to <dark_gray>' . $host . '</dark_gray> skipped!', 1, 3);
 | 
			
		||||
                    Console::output('<light_purple>Warning!</light_purple> <bold>No </bold><light_cyan>Deployment</light_cyan> <bold>tasks defined.</bold>', 2);
 | 
			
		||||
                    Console::output('Deployment to <bold>' . $host . '</bold> skipped!', 1, 3);
 | 
			
		||||
 | 
			
		||||
                } else {
 | 
			
		||||
                    foreach ($tasksToRun as $taskData) {
 | 
			
		||||
@ -341,7 +343,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                        $tasksColor = 'red';
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Console::output('Deployment to <dark_gray>' . $this->getConfig()->getHost() . '</dark_gray> completed: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
                    Console::output('Deployment to <bold>' . $this->getConfig()->getHost() . '</bold> completed: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Reset Host Config
 | 
			
		||||
@ -356,9 +358,9 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Releasing
 | 
			
		||||
            if (self::$deployStatus == self::SUCCEDED && $this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
            if (self::$deployStatus == self::SUCCEDED && $this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
                // Execute the Releases
 | 
			
		||||
                Console::output('Starting the <dark_gray>Releasing</dark_gray>');
 | 
			
		||||
                Console::output('Starting the <bold>Releasing</bold>');
 | 
			
		||||
                $completedTasks = 0;
 | 
			
		||||
                foreach ($hosts as $hostKey => $host) {
 | 
			
		||||
 | 
			
		||||
@ -382,7 +384,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                    // Reset Host Config
 | 
			
		||||
                    $this->getConfig()->setHostConfig(null);
 | 
			
		||||
                }
 | 
			
		||||
                Console::output('Finished the <dark_gray>Releasing</dark_gray>', 1, 3);
 | 
			
		||||
                Console::output('Finished the <bold>Releasing</bold>', 1, 3);
 | 
			
		||||
 | 
			
		||||
                // Execute the Post-Release Tasks
 | 
			
		||||
                foreach ($hosts as $hostKey => $host) {
 | 
			
		||||
@ -403,7 +405,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                    $completedTasks = 0;
 | 
			
		||||
 | 
			
		||||
                    if (count($tasksToRun) > 0) {
 | 
			
		||||
                        Console::output('Starting <dark_gray>Post-Release</dark_gray> tasks for <dark_gray>' . $host . '</dark_gray>:');
 | 
			
		||||
                        Console::output('Starting <bold>Post-Release</bold> tasks for <bold>' . $host . '</bold>:');
 | 
			
		||||
 | 
			
		||||
                        foreach ($tasksToRun as $task) {
 | 
			
		||||
                            $task = Factory::get($task, $this->getConfig(), false, AbstractTask::STAGE_POST_RELEASE);
 | 
			
		||||
@ -418,7 +420,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                        } else {
 | 
			
		||||
                            $tasksColor = 'red';
 | 
			
		||||
                        }
 | 
			
		||||
                        Console::output('Finished <dark_gray>Post-Release</dark_gray> tasks for <dark_gray>' . $host . '</dark_gray>: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
                        Console::output('Finished <bold>Post-Release</bold> tasks for <bold>' . $host . '</bold>: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    // Reset Host Config
 | 
			
		||||
@ -428,6 +430,28 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function runRollbackTask(){
 | 
			
		||||
        $this->getConfig()->reload();
 | 
			
		||||
        $hosts = $this->getConfig()->getHosts();
 | 
			
		||||
 | 
			
		||||
        if (count($hosts) == 0) {
 | 
			
		||||
            Console::output('<light_purple>Warning!</light_purple> <bold>No hosts defined, unable to get releases.</bold>', 1, 3);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            $result = true;
 | 
			
		||||
            foreach ($hosts as $host) {
 | 
			
		||||
                $this->getConfig()->setHost($host);
 | 
			
		||||
 | 
			
		||||
                $this->getConfig()->setReleaseId(-1);
 | 
			
		||||
                $task = Factory::get('releases/rollback', $this->getConfig());
 | 
			
		||||
                $task->init();
 | 
			
		||||
                $result = $task->run() && $result;
 | 
			
		||||
            }
 | 
			
		||||
            return $result;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs a Task
 | 
			
		||||
     *
 | 
			
		||||
@ -439,7 +463,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
    {
 | 
			
		||||
        $task->init();
 | 
			
		||||
 | 
			
		||||
        if ($title == null) {
 | 
			
		||||
        if ($title === null) {
 | 
			
		||||
            $title = 'Running <purple>' . $task->getName() . '</purple> ... ';
 | 
			
		||||
        }
 | 
			
		||||
        Console::output($title, 2, 0);
 | 
			
		||||
@ -449,11 +473,11 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
            $runTask = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($runTask == true) {
 | 
			
		||||
        if ($runTask === true) {
 | 
			
		||||
            try {
 | 
			
		||||
                $result = $task->run();
 | 
			
		||||
 | 
			
		||||
                if ($result == true) {
 | 
			
		||||
                if ($result === true) {
 | 
			
		||||
                    Console::output('<green>OK</green>', 0);
 | 
			
		||||
                    $result = true;
 | 
			
		||||
 | 
			
		||||
@ -461,6 +485,11 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                    Console::output('<red>FAIL</red>', 0);
 | 
			
		||||
                    $result = false;
 | 
			
		||||
                }
 | 
			
		||||
            } catch (RollbackException $e) {
 | 
			
		||||
                Console::output('<red>FAIL, Rollback started</red> [Message: ' . $e->getMessage() . ']', 0);
 | 
			
		||||
                $this->runRollbackTask();
 | 
			
		||||
                $result = false;
 | 
			
		||||
 | 
			
		||||
            } catch (ErrorWithMessageException $e) {
 | 
			
		||||
                Console::output('<red>FAIL</red> [Message: ' . $e->getMessage() . ']', 0);
 | 
			
		||||
                $result = false;
 | 
			
		||||
@ -564,7 +593,7 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
 | 
			
		||||
            case self::DEPLOY_STRATEGY_GUESS:
 | 
			
		||||
            default:
 | 
			
		||||
                if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
                if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
                    $deployStrategy = 'deployment/strategy/tar-gz';
 | 
			
		||||
                } else {
 | 
			
		||||
                    $deployStrategy = 'deployment/strategy/rsync';
 | 
			
		||||
 | 
			
		||||
@ -30,11 +30,11 @@ class InitCommand extends AbstractCommand
 | 
			
		||||
        $exitCode = 50;
 | 
			
		||||
        $configDir = getcwd() . '/.mage';
 | 
			
		||||
 | 
			
		||||
        Console::output('Initiating managing process for application with <dark_gray>Magallanes</dark_gray>');
 | 
			
		||||
        Console::output('Initiating managing process for application with <bold>Magallanes</bold>');
 | 
			
		||||
 | 
			
		||||
        // Check if there is already a config dir
 | 
			
		||||
        if (file_exists($configDir)) {
 | 
			
		||||
            Console::output('<light_red>Error!!</light_red> Already exists <dark_gray>.mage</dark_gray> directory.', 1, 2);
 | 
			
		||||
            Console::output('<light_red>Error!!</light_red> Already exists <bold>.mage</bold> directory.', 1, 2);
 | 
			
		||||
        } else {
 | 
			
		||||
            $results = array();
 | 
			
		||||
            $results[] = mkdir($configDir);
 | 
			
		||||
@ -48,8 +48,8 @@ class InitCommand extends AbstractCommand
 | 
			
		||||
            $results[] = file_put_contents($configDir . '/config/general.yml', $this->getGeneralConfig());
 | 
			
		||||
 | 
			
		||||
            if (!in_array(false, $results)) {
 | 
			
		||||
                Console::output('<light_green>Success!!</light_green> The configuration for <dark_gray>Magallanes</dark_gray> has been generated at <blue>.mage</blue> directory.');
 | 
			
		||||
                Console::output('<dark_gray>Please!! Review and adjust the configuration.</dark_gray>', 2, 2);
 | 
			
		||||
                Console::output('<light_green>Success!!</light_green> The configuration for <bold>Magallanes</bold> has been generated at <blue>.mage</blue> directory.');
 | 
			
		||||
                Console::output('<bold>Please!! Review and adjust the configuration.</bold>', 2, 2);
 | 
			
		||||
                $exitCode = 0;
 | 
			
		||||
 | 
			
		||||
            } else {
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@ class InstallCommand extends AbstractCommand
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $exitCode = 88;
 | 
			
		||||
        Console::output('Installing <dark_gray>Magallanes</dark_gray>... ', 1, 0);
 | 
			
		||||
        Console::output('Installing <bold>Magallanes</bold>... ', 1, 0);
 | 
			
		||||
 | 
			
		||||
        // Vars
 | 
			
		||||
        $installDir = $this->getConfig()->getParameter('installDir', '/opt/magallanes');
 | 
			
		||||
@ -122,4 +122,4 @@ class InstallCommand extends AbstractCommand
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ class ListCommand extends AbstractCommand
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $exitCode = 600;
 | 
			
		||||
        $exitCode = 221;
 | 
			
		||||
        $subCommand = $this->getConfig()->getArgument(1);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
@ -56,7 +56,7 @@ class ListCommand extends AbstractCommand
 | 
			
		||||
     */
 | 
			
		||||
    protected function listEnvironments()
 | 
			
		||||
    {
 | 
			
		||||
        $exitCode = 600;
 | 
			
		||||
        $exitCode = 220;
 | 
			
		||||
        $environments = array();
 | 
			
		||||
        $content = scandir(getcwd() . '/.mage/config/environment/');
 | 
			
		||||
        foreach ($content as $file) {
 | 
			
		||||
@ -67,7 +67,7 @@ class ListCommand extends AbstractCommand
 | 
			
		||||
        sort($environments);
 | 
			
		||||
 | 
			
		||||
        if (count($environments) > 0) {
 | 
			
		||||
            Console::output('<dark_gray>These are your configured environments:</dark_gray>', 1, 1);
 | 
			
		||||
            Console::output('<bold>These are your configured environments:</bold>', 1, 1);
 | 
			
		||||
            foreach ($environments as $environment) {
 | 
			
		||||
                Console::output('* <light_red>' . $environment . '</light_red>', 2, 1);
 | 
			
		||||
            }
 | 
			
		||||
@ -75,7 +75,7 @@ class ListCommand extends AbstractCommand
 | 
			
		||||
            $exitCode = 0;
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            Console::output('<dark_gray>You don\'t have any environment configured.</dark_gray>', 1, 2);
 | 
			
		||||
            Console::output('<bold>You don\'t have any environment configured.</bold>', 1, 2);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $exitCode;
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ class ReleasesCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $exitCode = 400;
 | 
			
		||||
        $exitCode = 100;
 | 
			
		||||
        $subCommand = $this->getConfig()->getArgument(1);
 | 
			
		||||
 | 
			
		||||
        // Run Tasks for Deployment
 | 
			
		||||
@ -36,16 +36,25 @@ class ReleasesCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
 | 
			
		||||
        if (count($hosts) == 0) {
 | 
			
		||||
            Console::output(
 | 
			
		||||
                '<light_purple>Warning!</light_purple> <dark_gray>No hosts defined, unable to get releases.</dark_gray>',
 | 
			
		||||
                '<light_purple>Warning!</light_purple> <bold>No hosts defined, unable to get releases.</bold>',
 | 
			
		||||
                1, 3
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            return 401;
 | 
			
		||||
            return 101;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $result = true;
 | 
			
		||||
        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);
 | 
			
		||||
 | 
			
		||||
            switch ($subCommand) {
 | 
			
		||||
                case 'list':
 | 
			
		||||
@ -58,7 +67,7 @@ class ReleasesCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                    if (!is_numeric($this->getConfig()->getParameter('release', ''))) {
 | 
			
		||||
                        Console::output('<red>Missing required releaseid.</red>', 1, 2);
 | 
			
		||||
 | 
			
		||||
                        return 410;
 | 
			
		||||
                        return 102;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    $lockFile = getcwd() . '/.mage/' . $this->getConfig()->getEnvironment() . '.lock';
 | 
			
		||||
@ -66,7 +75,7 @@ class ReleasesCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
                        Console::output('<red>This environment is locked!</red>', 1, 2);
 | 
			
		||||
                        echo file_get_contents($lockFile);
 | 
			
		||||
 | 
			
		||||
                        return 420;
 | 
			
		||||
                        return 103;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    $releaseId = $this->getConfig()->getParameter('release', '');
 | 
			
		||||
 | 
			
		||||
@ -28,31 +28,40 @@ class RollbackCommand extends AbstractCommand implements RequiresEnvironment
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $exitCode = 450;
 | 
			
		||||
        $exitCode = 105;
 | 
			
		||||
        $releaseId = $this->getConfig()->getArgument(1);
 | 
			
		||||
 | 
			
		||||
        if (!is_numeric($releaseId)) {
 | 
			
		||||
            Console::output('<red>This release is mandatory.</red>', 1, 2);
 | 
			
		||||
            return 451;
 | 
			
		||||
            return 104;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $lockFile = getcwd() . '/.mage/' . $this->getConfig()->getEnvironment() . '.lock';
 | 
			
		||||
        if (file_exists($lockFile)) {
 | 
			
		||||
            Console::output('<red>This environment is locked!</red>', 1, 2);
 | 
			
		||||
            echo file_get_contents($lockFile);
 | 
			
		||||
            return 20;
 | 
			
		||||
            return 106;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Run Tasks for Deployment
 | 
			
		||||
        $hosts = $this->getConfig()->getHosts();
 | 
			
		||||
 | 
			
		||||
        if (count($hosts) == 0) {
 | 
			
		||||
            Console::output('<light_purple>Warning!</light_purple> <dark_gray>No hosts defined, unable to get releases.</dark_gray>', 1, 3);
 | 
			
		||||
            Console::output('<light_purple>Warning!</light_purple> <bold>No hosts defined, unable to get releases.</bold>', 1, 3);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            $result = true;
 | 
			
		||||
            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);
 | 
			
		||||
 | 
			
		||||
                $this->getConfig()->setReleaseId($releaseId);
 | 
			
		||||
                $task = Factory::get('releases/rollback', $this->getConfig());
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@ class UpdateCommand extends AbstractCommand
 | 
			
		||||
        Console::output('Updating application via ' . $task->getName() . ' ... ', 1, 0);
 | 
			
		||||
        $result = $task->run();
 | 
			
		||||
 | 
			
		||||
        if ($result == true) {
 | 
			
		||||
        if ($result === true) {
 | 
			
		||||
            Console::output('<green>OK</green>' . PHP_EOL, 0);
 | 
			
		||||
            $exitCode = 0;
 | 
			
		||||
 | 
			
		||||
@ -45,5 +45,4 @@ class UpdateCommand extends AbstractCommand
 | 
			
		||||
 | 
			
		||||
        return $exitCode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -38,8 +38,8 @@ class UpgradeCommand extends AbstractCommand
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $exitCode = 100;
 | 
			
		||||
        Console::output('Upgrading <dark_gray>Magallanes</dark_gray> ... ', 1, 0);
 | 
			
		||||
        $exitCode = 99;
 | 
			
		||||
        Console::output('Upgrading <bold>Magallanes</bold> ... ', 1, 0);
 | 
			
		||||
 | 
			
		||||
        $user = '';
 | 
			
		||||
        // Check if user is root
 | 
			
		||||
@ -49,7 +49,7 @@ class UpgradeCommand extends AbstractCommand
 | 
			
		||||
 | 
			
		||||
        if ($user != 'root' && $user != $owner) {
 | 
			
		||||
            Console::output('<red>FAIL</red>', 0, 1);
 | 
			
		||||
            Console::output('You need to be the <dark_gray>' . $owner . '</dark_gray> user to perform the upgrade, or <dark_gray>root</dark_gray>.', 2);
 | 
			
		||||
            Console::output('You need to be the <bold>' . $owner . '</bold> user to perform the upgrade, or <bold>root</bold>.', 2);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            // Check version
 | 
			
		||||
 | 
			
		||||
@ -26,9 +26,8 @@ class VersionCommand extends AbstractCommand
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        Console::output('Running <blue>Magallanes</blue> version <dark_gray>' . MAGALLANES_VERSION . '</dark_gray>', 0, 2);
 | 
			
		||||
        Console::output('Running <blue>Magallanes</blue> version <bold>' . MAGALLANES_VERSION . '</bold>', 0, 2);
 | 
			
		||||
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,6 @@ namespace Mage\Command;
 | 
			
		||||
 | 
			
		||||
use Mage\Command\AbstractCommand;
 | 
			
		||||
use Mage\Config;
 | 
			
		||||
use Mage\Autoload;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
@ -59,4 +58,4 @@ class Factory
 | 
			
		||||
 | 
			
		||||
        return $instance;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -17,4 +17,4 @@ namespace Mage\Command;
 | 
			
		||||
 */
 | 
			
		||||
interface RequiresEnvironment
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,6 @@ namespace Mage;
 | 
			
		||||
use Mage\Config\ConfigNotFoundException;
 | 
			
		||||
use Mage\Config\RequiredConfigNotFoundException;
 | 
			
		||||
use Mage\Console;
 | 
			
		||||
use Mage\Yaml\Exception\RuntimeException;
 | 
			
		||||
use Mage\Yaml\Yaml;
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
@ -121,29 +120,6 @@ class Config
 | 
			
		||||
        return $this->parseConfigFile($filePath);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Obviously this method is a HACK.  It was refactored from ::loadEnvironment()
 | 
			
		||||
     * TODO Please put it to SCM functionality.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $settings
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function updateSCMTempDir(array $settings)
 | 
			
		||||
    {
 | 
			
		||||
        // Create temporal directory for clone
 | 
			
		||||
        if (isset($settings['deployment']['source']) && is_array($settings['deployment']['source'])) {
 | 
			
		||||
            if (trim($settings['deployment']['source']['temporal']) == '') {
 | 
			
		||||
                $settings['deployment']['source']['temporal'] = sys_get_temp_dir();
 | 
			
		||||
            }
 | 
			
		||||
            $settings['deployment']['source']['temporal']
 | 
			
		||||
                = rtrim($settings['deployment']['source']['temporal'], '/') . '/' . md5(microtime()) . '/';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $settings;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Loads the Environment configuration
 | 
			
		||||
     * @param $filePath string
 | 
			
		||||
@ -156,9 +132,6 @@ class Config
 | 
			
		||||
 | 
			
		||||
        $settings = $this->parseConfigFile($filePath);
 | 
			
		||||
 | 
			
		||||
        //this is a HACK in the old code - no time to remove it now, so I factored it out in own method
 | 
			
		||||
        $settings = $this->updateSCMTempDir($settings);
 | 
			
		||||
 | 
			
		||||
        return $settings;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
@ -490,6 +463,11 @@ class Config
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setSourceTemporal($directory)
 | 
			
		||||
    {
 | 
			
		||||
        $this->environmentConfig['deployment']['source']['temporal'] = $directory;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns Releasing Options
 | 
			
		||||
     *
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,6 @@ use SplFileInfo;
 | 
			
		||||
class Console
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * TODO refactor into own static class
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    public static $paramsNotRequiringEnvironment = array('install' => 'install', 'upgrade' => 'upgrade', 'version' => 'version');
 | 
			
		||||
@ -116,11 +115,10 @@ class Console
 | 
			
		||||
            } else {
 | 
			
		||||
                self::output('Starting <blue>Magallanes</blue>', 0, 1);
 | 
			
		||||
                self::log("Logging enabled");
 | 
			
		||||
                self::output('<dark_gray>Logging enabled:</dark_gray> <purple>' . self::getLogFile() . '</purple>', 1, 2);
 | 
			
		||||
                self::output('<bold>Logging enabled:</bold> <purple>' . self::getLogFile() . '</purple>', 1, 2);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Run Command - Check if there is a Configuration Error
 | 
			
		||||
        if ($configError !== false) {
 | 
			
		||||
            self::output('<red>' . $configError . '</red>', 1, 2);
 | 
			
		||||
@ -131,12 +129,21 @@ class Console
 | 
			
		||||
                $command = Factory::get($commandName, $config);
 | 
			
		||||
 | 
			
		||||
                if ($command instanceOf RequiresEnvironment) {
 | 
			
		||||
                    if ($config->getEnvironment() == false) {
 | 
			
		||||
                    if ($config->getEnvironment() === false) {
 | 
			
		||||
                        throw new Exception('You must specify an environment for this command.');
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Run the Command
 | 
			
		||||
                $exitCode = $command->run();
 | 
			
		||||
 | 
			
		||||
                // Check for errors
 | 
			
		||||
                if (is_int($exitCode) && $exitCode !== 0) {
 | 
			
		||||
                    throw new Exception('Command execution failed with following exit code: ' . $exitCode, $exitCode);
 | 
			
		||||
                } elseif (is_bool($exitCode) && !$exitCode) {
 | 
			
		||||
                    $exitCode = 1;
 | 
			
		||||
                    throw new Exception('Command execution failed.', $exitCode);
 | 
			
		||||
                }
 | 
			
		||||
            } catch (Exception $exception) {
 | 
			
		||||
                self::output('<red>' . $exception->getMessage() . '</red>', 1, 2);
 | 
			
		||||
            }
 | 
			
		||||
@ -213,7 +220,7 @@ class Console
 | 
			
		||||
    public static function log($message)
 | 
			
		||||
    {
 | 
			
		||||
        if (self::$logEnabled) {
 | 
			
		||||
            if (self::$log == null) {
 | 
			
		||||
            if (self::$log === null) {
 | 
			
		||||
                self::$logFile = realpath(getcwd() . '/.mage/logs') . '/log-' . date('Ymd-His') . '.log';
 | 
			
		||||
                self::$log = fopen(self::$logFile, 'w');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,7 @@ class Colors
 | 
			
		||||
     */
 | 
			
		||||
    private static $foregroundColors = array(
 | 
			
		||||
        'black' => '0;30',
 | 
			
		||||
        'dark_gray' => '1;30',
 | 
			
		||||
        'bold' => '1',
 | 
			
		||||
        'blue' => '0;34',
 | 
			
		||||
        'light_blue' => '1;34',
 | 
			
		||||
        'green' => '0;32',
 | 
			
		||||
 | 
			
		||||
@ -84,6 +84,6 @@ class Mailer
 | 
			
		||||
            . $attachment . self::EOL
 | 
			
		||||
            . '--Mage-mixed-' . $boundary . '--' . self::EOL;
 | 
			
		||||
 | 
			
		||||
        @mail($this->address, $subject, $message, $headers);
 | 
			
		||||
        mail($this->address, $subject, $message, $headers);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -181,7 +181,7 @@ abstract class AbstractTask
 | 
			
		||||
     */
 | 
			
		||||
    protected final function runCommandRemote($command, &$output = null, $cdToDirectoryFirst = true)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            if ($this instanceOf IsReleaseAware) {
 | 
			
		||||
                $releasesDirectory = '';
 | 
			
		||||
 | 
			
		||||
@ -223,7 +223,7 @@ abstract class AbstractTask
 | 
			
		||||
     */
 | 
			
		||||
    protected final function runCommand($command, &$output = null)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getStage() == self::STAGE_DEPLOY) {
 | 
			
		||||
        if ($this->getStage() == self::STAGE_DEPLOY || $this->getStage() == self::STAGE_POST_RELEASE) {
 | 
			
		||||
            return $this->runCommandRemote($command, $output);
 | 
			
		||||
        } else {
 | 
			
		||||
            return $this->runCommandLocal($command, $output);
 | 
			
		||||
@ -238,7 +238,7 @@ abstract class AbstractTask
 | 
			
		||||
     */
 | 
			
		||||
    protected function getReleasesAwareCommand($command)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
 | 
			
		||||
            $deployToDirectory = $releasesDirectory . '/' . $this->getConfig()->getReleaseId();
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@ class ReleaseTask extends AbstractTask implements IsReleaseAware, SkipOnOverride
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $resultFetch = false;
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
            $symlink = $this->getConfig()->release('symlink', 'current');
 | 
			
		||||
 | 
			
		||||
@ -107,7 +107,7 @@ class ReleaseTask extends AbstractTask implements IsReleaseAware, SkipOnOverride
 | 
			
		||||
    protected function cleanUpReleases()
 | 
			
		||||
    {
 | 
			
		||||
        // Count Releases
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
            $symlink = $this->getConfig()->release('symlink', 'current');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ abstract class BaseStrategyTaskAbstract extends AbstractTask implements IsReleas
 | 
			
		||||
        $overrideRelease = $this->getParameter('overrideRelease', false);
 | 
			
		||||
        $symlink = $this->getConfig()->release('symlink', 'current');
 | 
			
		||||
 | 
			
		||||
        if ($overrideRelease == true) {
 | 
			
		||||
        if ($overrideRelease === true) {
 | 
			
		||||
            $releaseToOverride = false;
 | 
			
		||||
            $resultFetch = $this->runCommandRemote('ls -ld ' . $symlink . ' | cut -d"/" -f2', $releaseToOverride);
 | 
			
		||||
            if ($resultFetch && is_numeric($releaseToOverride)) {
 | 
			
		||||
 | 
			
		||||
@ -38,5 +38,4 @@ class DisabledTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
    {
 | 
			
		||||
        throw new SkipException;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Mage\Task\BuiltIn\Deployment\Strategy;
 | 
			
		||||
 | 
			
		||||
use Mage\Task\AbstractTask;
 | 
			
		||||
use Mage\Task\Releases\IsReleaseAware;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -35,20 +34,6 @@ class GitRebaseTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $this->checkOverrideRelease();
 | 
			
		||||
        $excludes = $this->getExcludes();
 | 
			
		||||
 | 
			
		||||
        // If we are working with releases
 | 
			
		||||
        $deployToDirectory = $this->getConfig()->deployment('to');
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
 | 
			
		||||
            $deployToDirectory = rtrim($this->getConfig()->deployment('to'), '/')
 | 
			
		||||
                . '/' . $releasesDirectory
 | 
			
		||||
                . '/' . $this->getConfig()->getReleaseId();
 | 
			
		||||
            $this->runCommandRemote('mkdir -p ' . $releasesDirectory . '/' . $this->getConfig()->getReleaseId());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $branch = $this->getParameter('branch', 'master');
 | 
			
		||||
        $remote = $this->getParameter('remote', 'origin');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,7 @@ class GitRemoteCacheTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
    {
 | 
			
		||||
        $overrideRelease = $this->getParameter('overrideRelease', false);
 | 
			
		||||
 | 
			
		||||
        if ($overrideRelease == true) {
 | 
			
		||||
        if ($overrideRelease === true) {
 | 
			
		||||
            $releaseToOverride = false;
 | 
			
		||||
            $resultFetch = $this->runCommandRemote('ls -ld current | cut -d"/" -f2', $releaseToOverride);
 | 
			
		||||
            if ($resultFetch && is_numeric($releaseToOverride)) {
 | 
			
		||||
@ -63,7 +63,7 @@ class GitRemoteCacheTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
        $userExcludes = $this->getConfig()->deployment('excludes', array());
 | 
			
		||||
 | 
			
		||||
        $deployToDirectory = $this->getConfig()->deployment('to');
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
 | 
			
		||||
            $deployToDirectory = rtrim($this->getConfig()->deployment('to'), '/')
 | 
			
		||||
@ -97,39 +97,8 @@ class GitRemoteCacheTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
        $command = 'cd ' . $remoteCacheFolder . ' && /usr/bin/env git archive ' . $branch . ' | tar -x -C ' . $deployToDirectory . ' ' . $excludeCmd;
 | 
			
		||||
        $result = $this->runCommandRemote($command) && $result;
 | 
			
		||||
 | 
			
		||||
        // Count Releases
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
            $symlink = $this->getConfig()->release('symlink', 'current');
 | 
			
		||||
 | 
			
		||||
            if (substr($symlink, 0, 1) == '/') {
 | 
			
		||||
                $releasesDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $maxReleases = $this->getConfig()->release('max', false);
 | 
			
		||||
            if (($maxReleases !== false) && ($maxReleases > 0)) {
 | 
			
		||||
                $releasesList = '';
 | 
			
		||||
                $countReleasesFetch = $this->runCommandRemote('ls -1 ' . $releasesDirectory, $releasesList);
 | 
			
		||||
                $releasesList = trim($releasesList);
 | 
			
		||||
 | 
			
		||||
                if ($countReleasesFetch && $releasesList != '') {
 | 
			
		||||
                    $releasesList = explode(PHP_EOL, $releasesList);
 | 
			
		||||
                    if (count($releasesList) > $maxReleases) {
 | 
			
		||||
                        $releasesToDelete = array_diff($releasesList, array($this->getConfig()->getReleaseId()));
 | 
			
		||||
                        sort($releasesToDelete);
 | 
			
		||||
                        $releasesToDeleteCount = count($releasesToDelete) - $maxReleases;
 | 
			
		||||
                        $releasesToDelete = array_slice($releasesToDelete, 0, $releasesToDeleteCount + 1);
 | 
			
		||||
 | 
			
		||||
                        foreach ($releasesToDelete as $releaseIdToDelete) {
 | 
			
		||||
                            $directoryToDelete = $releasesDirectory . '/' . $releaseIdToDelete;
 | 
			
		||||
                            if ($directoryToDelete != '/') {
 | 
			
		||||
                                $command = 'rm -rf ' . $directoryToDelete;
 | 
			
		||||
                                $result = $result && $this->runCommandRemote($command);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        if ($result) {
 | 
			
		||||
            $this->cleanUpReleases();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
 | 
			
		||||
@ -27,8 +27,8 @@ class RsyncTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
     */
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
            if ($this->getConfig()->getParameter('overrideRelease', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            if ($this->getConfig()->getParameter('overrideRelease', false) === true) {
 | 
			
		||||
                return 'Deploy via Rsync (with Releases override) [built-in]';
 | 
			
		||||
            } else {
 | 
			
		||||
                $rsync_copy = $this->getConfig()->deployment("rsync");
 | 
			
		||||
@ -52,10 +52,11 @@ class RsyncTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
        $this->checkOverrideRelease();
 | 
			
		||||
 | 
			
		||||
        $excludes = $this->getExcludes();
 | 
			
		||||
        $excludesListFilePath = $this->getConfig()->deployment('excludes_file', '');
 | 
			
		||||
 | 
			
		||||
        // If we are working with releases
 | 
			
		||||
        $deployToDirectory = $this->getConfig()->deployment('to');
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
            $symlink = $this->getConfig()->release('symlink', 'current');
 | 
			
		||||
 | 
			
		||||
@ -95,6 +96,7 @@ class RsyncTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
                 . $strategyFlags . ' '
 | 
			
		||||
                 . '--rsh="ssh ' . $this->getConfig()->getHostIdentityFileOption() . '-p' . $this->getConfig()->getHostPort() . '" '
 | 
			
		||||
                 . $this->excludes($excludes) . ' '
 | 
			
		||||
                 . $this->excludesListFile($excludesListFilePath) . ' '
 | 
			
		||||
                 . $this->getConfig()->deployment('from') . ' '
 | 
			
		||||
                 . $this->getConfig()->deployment('user') . '@' . $this->getConfig()->getHostName() . ':' . $deployToDirectory;
 | 
			
		||||
        $result = $this->runCommandLocal($command);
 | 
			
		||||
@ -117,4 +119,18 @@ class RsyncTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
        $excludesRsync = trim($excludesRsync);
 | 
			
		||||
        return $excludesRsync;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generates the Exclude from file for rsync
 | 
			
		||||
     * @param string $excludesFile
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function excludesListFile($excludesFile)
 | 
			
		||||
    {
 | 
			
		||||
        $excludesListFileRsync = '';
 | 
			
		||||
        if(!empty($excludesFile) && file_exists($excludesFile) && is_file($excludesFile) && is_readable($excludesFile)) {
 | 
			
		||||
            $excludesListFileRsync = ' --exclude-from=' . $excludesFile;
 | 
			
		||||
        }
 | 
			
		||||
        return $excludesListFileRsync;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Mage\Task\BuiltIn\Deployment\Strategy;
 | 
			
		||||
 | 
			
		||||
use Mage\Console;
 | 
			
		||||
use Mage\Task\BuiltIn\Deployment\Strategy\BaseStrategyTaskAbstract;
 | 
			
		||||
use Mage\Task\Releases\IsReleaseAware;
 | 
			
		||||
 | 
			
		||||
@ -27,8 +26,8 @@ class TarGzTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
     */
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
            if ($this->getConfig()->getParameter('overrideRelease', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            if ($this->getConfig()->getParameter('overrideRelease', false) === true) {
 | 
			
		||||
                return 'Deploy via TarGz (with Releases override) [built-in]';
 | 
			
		||||
            } else {
 | 
			
		||||
                return 'Deploy via TarGz (with Releases) [built-in]';
 | 
			
		||||
@ -47,10 +46,11 @@ class TarGzTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
        $this->checkOverrideRelease();
 | 
			
		||||
 | 
			
		||||
        $excludes = $this->getExcludes();
 | 
			
		||||
        $excludesListFilePath   = $this->getConfig()->deployment('excludes_file', '');;
 | 
			
		||||
 | 
			
		||||
        // If we are working with releases
 | 
			
		||||
        $deployToDirectory = $this->getConfig()->deployment('to');
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
            $deployToDirectory = rtrim($this->getConfig()->deployment('to'), '/')
 | 
			
		||||
                . '/' . $releasesDirectory
 | 
			
		||||
@ -67,6 +67,8 @@ class TarGzTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
            $excludeCmd .= ' --exclude=' . $excludeFile;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $excludeFromFileCmd = $this->excludesListFile($excludesListFilePath);
 | 
			
		||||
 | 
			
		||||
        // Strategy Flags
 | 
			
		||||
        $strategyFlags = $this->getConfig()->deployment('strategy_flags', $this->getConfig()->general('strategy_flags', array()));
 | 
			
		||||
        if (isset($strategyFlags['targz']) && isset($strategyFlags['targz']['create'])) {
 | 
			
		||||
@ -75,7 +77,7 @@ class TarGzTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
            $strategyFlags = '';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $command = 'tar cfzh' . $strategyFlags . ' ' . $localTarGz . '.tar.gz ' . $excludeCmd . ' -C ' . $this->getConfig()->deployment('from') . ' .';
 | 
			
		||||
        $command = 'tar cfzh' . $strategyFlags . ' ' . $localTarGz . '.tar.gz ' . $excludeCmd . $excludeFromFileCmd . ' -C ' . $this->getConfig()->deployment('from') . ' .';
 | 
			
		||||
        $result = $this->runCommandLocal($command);
 | 
			
		||||
 | 
			
		||||
        // Strategy Flags
 | 
			
		||||
@ -113,4 +115,18 @@ class TarGzTask extends BaseStrategyTaskAbstract implements IsReleaseAware
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generates the Exclude from file for rsync
 | 
			
		||||
     * @param string $excludesFile
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function excludesListFile($excludesFile)
 | 
			
		||||
    {
 | 
			
		||||
        $excludesListFileRsync = '';
 | 
			
		||||
        if(!empty($excludesFile) && file_exists($excludesFile) && is_file($excludesFile) && is_readable($excludesFile)) {
 | 
			
		||||
            $excludesListFileRsync = ' --exclude-from=' . $excludesFile;
 | 
			
		||||
        }
 | 
			
		||||
        return $excludesListFileRsync;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,16 @@ use Mage\Task\SkipException;
 | 
			
		||||
class LinkSharedFilesTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    const LINKED_FOLDERS   = 'linked_folders';
 | 
			
		||||
    const LINKED_STRATEGY  = 'linking_strategy';
 | 
			
		||||
 | 
			
		||||
    const ABSOLUTE_LINKING = 'absolute';
 | 
			
		||||
    const RELATIVE_LINKING = 'relative';
 | 
			
		||||
 | 
			
		||||
    public $linkingStrategies = array(
 | 
			
		||||
        self::ABSOLUTE_LINKING,
 | 
			
		||||
        self::RELATIVE_LINKING
 | 
			
		||||
    );
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the Title of the Task
 | 
			
		||||
     * @return string
 | 
			
		||||
@ -25,28 +35,41 @@ class LinkSharedFilesTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $linkedFiles = $this->getParameter('linked_files', []);
 | 
			
		||||
        $linkedFolders = $this->getParameter('linked_folders', []);
 | 
			
		||||
        $linkedFiles    = $this->getParameter('linked_files', []);
 | 
			
		||||
        $linkedFolders  = $this->getParameter(self::LINKED_FOLDERS, []);
 | 
			
		||||
        $linkingStrategy = $this->getParameter(self::LINKED_STRATEGY, self::ABSOLUTE_LINKING);
 | 
			
		||||
 | 
			
		||||
        $linkedEntities = array_merge($linkedFiles,$linkedFolders);
 | 
			
		||||
 | 
			
		||||
        if (sizeof($linkedFiles) == 0 && sizeof($linkedFolders) == 0) {
 | 
			
		||||
            throw new SkipException('No files and folders configured for sym-linking.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $sharedFolderName = $this->getParameter('shared', 'shared');
 | 
			
		||||
        $sharedFolderName = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $sharedFolderName;
 | 
			
		||||
        $sharedFolderPath = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $sharedFolderName;
 | 
			
		||||
        $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
        $releasesDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory;
 | 
			
		||||
        $releasesDirectoryPath = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory;
 | 
			
		||||
 | 
			
		||||
        $currentCopy = $releasesDirectory . '/' . $this->getConfig()->getReleaseId();
 | 
			
		||||
        foreach ($linkedFolders as $folder) {
 | 
			
		||||
            $command = "ln -nfs $sharedFolderName/$folder $currentCopy/$folder";
 | 
			
		||||
            $this->runCommandRemote($command);
 | 
			
		||||
        }
 | 
			
		||||
        $currentCopy = $releasesDirectoryPath . '/' . $this->getConfig()->getReleaseId();
 | 
			
		||||
        $relativeDiffPath = str_replace($this->getConfig()->deployment('to'),'',$currentCopy) . '/';
 | 
			
		||||
 | 
			
		||||
        foreach ($linkedFiles as $folder) {
 | 
			
		||||
            $command = "ln -nfs $sharedFolderName/$folder $currentCopy/$folder";
 | 
			
		||||
        foreach ($linkedEntities as $ePath) {
 | 
			
		||||
            if(is_array($ePath) && in_array($strategy = reset($ePath), $this->linkingStrategies ) ) {
 | 
			
		||||
                $entityPath = key($ePath);
 | 
			
		||||
            } else {
 | 
			
		||||
                $strategy = $linkingStrategy;
 | 
			
		||||
                $entityPath = $ePath;
 | 
			
		||||
            }
 | 
			
		||||
            $sharedEntityLinkedPath = "$sharedFolderPath/$entityPath";
 | 
			
		||||
            if($strategy==self::RELATIVE_LINKING) {
 | 
			
		||||
                $parentFolderPath = dirname($entityPath);
 | 
			
		||||
                $relativePath = $parentFolderPath=='.'?$relativeDiffPath:$relativeDiffPath.$parentFolderPath.'/';
 | 
			
		||||
                $sharedEntityLinkedPath = ltrim(preg_replace('/(\w+\/)/', '../', $relativePath),'/').$sharedFolderName .'/'. $entityPath;
 | 
			
		||||
            }
 | 
			
		||||
            $command = "ln -nfs $sharedEntityLinkedPath $currentCopy/$entityPath";
 | 
			
		||||
            $this->runCommandRemote($command);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@ -39,4 +39,4 @@ class ClearCacheTask extends AbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -39,4 +39,4 @@ class ClearFullPageCacheTask extends AbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -34,11 +34,11 @@ class ListTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
            $symlink = $this->getConfig()->release('symlink', 'current');
 | 
			
		||||
 | 
			
		||||
            Console::output('Releases available on <dark_gray>' . $this->getConfig()->getHost() . '</dark_gray>');
 | 
			
		||||
            Console::output('Releases available on <bold>' . $this->getConfig()->getHost() . '</bold>');
 | 
			
		||||
 | 
			
		||||
            // Get Releases
 | 
			
		||||
            $output = '';
 | 
			
		||||
@ -51,7 +51,7 @@ class ListTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
            $currentRelease = trim(array_pop($currentRelease));
 | 
			
		||||
 | 
			
		||||
            if (count($releases) == 0) {
 | 
			
		||||
                Console::output('<dark_gray>No releases available</dark_gray> ... ', 2);
 | 
			
		||||
                Console::output('<bold>No releases available</bold> ... ', 2);
 | 
			
		||||
            } else {
 | 
			
		||||
                rsort($releases);
 | 
			
		||||
                $releases = array_slice($releases, 0, 10);
 | 
			
		||||
@ -80,8 +80,8 @@ class ListTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
 | 
			
		||||
                    Console::output(
 | 
			
		||||
                        'Release: <purple>' . $release . '</purple> '
 | 
			
		||||
                        . '- Date: <dark_gray>' . $releaseDate . '</dark_gray> '
 | 
			
		||||
                        . '- Index: <dark_gray>' . $releaseIndex . '</dark_gray>' . $dateDiff . $isCurrent, 2);
 | 
			
		||||
                        . '- Date: <bold>' . $releaseDate . '</bold> '
 | 
			
		||||
                        . '- Index: <bold>' . $releaseIndex . '</bold>' . $dateDiff . $isCurrent, 2);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -146,5 +146,4 @@ class ListTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
 | 
			
		||||
        return $textDiff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -47,7 +47,7 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) == true) {
 | 
			
		||||
        if ($this->getConfig()->release('enabled', false) === true) {
 | 
			
		||||
            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
 | 
			
		||||
            $symlink = $this->getConfig()->release('symlink', 'current');
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
            $releases = ($output == '') ? array() : explode(PHP_EOL, $output);
 | 
			
		||||
 | 
			
		||||
            if (count($releases) == 0) {
 | 
			
		||||
                Console::output('Release are not available for <dark_gray>' . $this->getConfig()->getHost() . '</dark_gray> ... <red>FAIL</red>');
 | 
			
		||||
                Console::output('Release are not available for <bold>' . $this->getConfig()->getHost() . '</bold> ... <red>FAIL</red>');
 | 
			
		||||
 | 
			
		||||
            } else {
 | 
			
		||||
                rsort($releases);
 | 
			
		||||
@ -81,10 +81,10 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!$releaseIsAvailable) {
 | 
			
		||||
                    Console::output('Release <dark_gray>' . $this->getReleaseId() . '</dark_gray> is invalid or unavailable for <dark_gray>' . $this->getConfig()->getHost() . '</dark_gray> ... <red>FAIL</red>');
 | 
			
		||||
                    Console::output('Release <bold>' . $this->getReleaseId() . '</bold> is invalid or unavailable for <bold>' . $this->getConfig()->getHost() . '</bold> ... <red>FAIL</red>');
 | 
			
		||||
 | 
			
		||||
                } else {
 | 
			
		||||
                    Console::output('Rollback release on <dark_gray>' . $this->getConfig()->getHost() . '</dark_gray>');
 | 
			
		||||
                    Console::output('Rollback release on <bold>' . $this->getConfig()->getHost() . '</bold>');
 | 
			
		||||
                    $rollbackTo = $releasesDirectory . '/' . $releaseId;
 | 
			
		||||
 | 
			
		||||
                    // Get Current Release
 | 
			
		||||
@ -111,7 +111,7 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
                            $tasks++;
 | 
			
		||||
                            $result = $task->run();
 | 
			
		||||
 | 
			
		||||
                            if ($result == true) {
 | 
			
		||||
                            if ($result === true) {
 | 
			
		||||
                                Console::output('<green>OK</green>', 0);
 | 
			
		||||
                                $completedTasks++;
 | 
			
		||||
                            } else {
 | 
			
		||||
@ -161,7 +161,7 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
                            $tasks++;
 | 
			
		||||
                            $result = $task->run();
 | 
			
		||||
 | 
			
		||||
                            if ($result == true) {
 | 
			
		||||
                            if ($result === true) {
 | 
			
		||||
                                Console::output('<green>OK</green>', 0);
 | 
			
		||||
                                $completedTasks++;
 | 
			
		||||
                            } else {
 | 
			
		||||
@ -178,7 +178,7 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
                        $tasksColor = 'red';
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    Console::output('Release rollback on <dark_gray>' . $this->getConfig()->getHost() . '</dark_gray> compted: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
                    Console::output('Release rollback on <bold>' . $this->getConfig()->getHost() . '</bold> compted: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '</' . $tasksColor . '> tasks done.', 1, 3);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -188,5 +188,4 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -105,4 +105,4 @@ class ChangeBranchTask extends AbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -53,6 +53,15 @@ class CloneTask extends AbstractTask
 | 
			
		||||
                $this->name = 'SCM Clone (GIT) [built-in]';
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Create temporal directory for clone
 | 
			
		||||
        if (is_array($this->source)) {
 | 
			
		||||
            if (trim($this->source['temporal']) == '') {
 | 
			
		||||
                $this->source['temporal'] = sys_get_temp_dir();
 | 
			
		||||
            }
 | 
			
		||||
            $this->source['temporal'] = rtrim($this->source['temporal'], '/') . '/' . md5(microtime()) . '/';
 | 
			
		||||
            $this->getConfig()->setSourceTemporal($this->source['temporal']);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										87
									
								
								Mage/Task/BuiltIn/Scm/ForceUpdateTask.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								Mage/Task/BuiltIn/Scm/ForceUpdateTask.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
			
		||||
<?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\Task\BuiltIn\Scm;
 | 
			
		||||
 | 
			
		||||
use Mage\Task\AbstractTask;
 | 
			
		||||
use Mage\Task\SkipException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Task for Force Updating a Working Copy
 | 
			
		||||
 * 
 | 
			
		||||
 * 'git fetch' downloads the latest from remote without trying to merge or rebase anything.
 | 
			
		||||
 * 'git reset' resets the master branch to what you just fetched. 
 | 
			
		||||
 * The '--hard' option changes all the files in your working tree to match the files in origin/master,
 | 
			
		||||
 * so if you have any local changes, they will be lost.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Samuel Chiriluta <samuel4x4@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
class ForceUpdateTask extends AbstractTask
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Name of the Task
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $name = 'SCM Force Update [built-in]';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * (non-PHPdoc)
 | 
			
		||||
     * @see \Mage\Task\AbstractTask::getName()
 | 
			
		||||
     */
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * (non-PHPdoc)
 | 
			
		||||
     * @see \Mage\Task\AbstractTask::init()
 | 
			
		||||
     */
 | 
			
		||||
    public function init()
 | 
			
		||||
    {
 | 
			
		||||
        switch ($this->getConfig()->general('scm')) {
 | 
			
		||||
            case 'git':
 | 
			
		||||
                $this->name = 'SCM Force Update (GIT) [built-in]';
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Force Updates the Working Copy
 | 
			
		||||
     * @see \Mage\Task\AbstractTask::run()
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        switch ($this->getConfig()->general('scm')) {
 | 
			
		||||
            case 'git':
 | 
			
		||||
                $branch = $this->getParameter('branch', 'master');
 | 
			
		||||
                $remote = $this->getParameter('remote', 'origin');
 | 
			
		||||
                
 | 
			
		||||
                $command = 'git fetch ' . $remote . ' ' . $branch;
 | 
			
		||||
                $result = $this->runCommandRemote($command);
 | 
			
		||||
 | 
			
		||||
                $command = 'git reset --hard ' . $remote . '/' . $branch;
 | 
			
		||||
                $result = $result && $this->runCommandRemote($command);
 | 
			
		||||
 | 
			
		||||
                $command = 'git pull ' . $remote . ' ' . $branch;
 | 
			
		||||
                $result = $result && $this->runCommandRemote($command);
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                throw new SkipException;
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $result = $this->runCommandLocal($command);
 | 
			
		||||
        $this->getConfig()->reload();
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -58,4 +58,4 @@ class RemoveCloneTask extends AbstractTask
 | 
			
		||||
    {
 | 
			
		||||
        return $this->runCommandLocal('rm -rf ' . $this->source['temporal']);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -69,4 +69,4 @@ class UpdateTask extends AbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -42,4 +42,4 @@ class AsseticDumpTask extends SymfonyAbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -49,4 +49,4 @@ class AssetsInstallTask extends SymfonyAbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -42,4 +42,4 @@ class CacheClearTask extends SymfonyAbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								Mage/Task/BuiltIn/Symfony2/DoctrineMigrate.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								Mage/Task/BuiltIn/Symfony2/DoctrineMigrate.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
<?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\Task\BuiltIn\Symfony2;
 | 
			
		||||
 | 
			
		||||
use Mage\Task\BuiltIn\Symfony2\SymfonyAbstractTask;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Task for Doctrine migrations
 | 
			
		||||
 */
 | 
			
		||||
class DoctrineMigrate extends SymfonyAbstractTask
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * (non-PHPdoc)
 | 
			
		||||
     * @see \Mage\Task\AbstractTask::getName()
 | 
			
		||||
     */
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'Symfony v2 - Migrate doctrine entities [built-in]';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Migrates Doctrine entities
 | 
			
		||||
     *
 | 
			
		||||
     * @see \Mage\Task\AbstractTask::run()
 | 
			
		||||
     */
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        $env = $this->getParameter('env', 'dev');
 | 
			
		||||
        $command = $this->getAppPath() . ' doctrine:migrations:migrate -n --env=' . $env;
 | 
			
		||||
        return $this->runCommand($command);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -29,4 +29,4 @@ abstract class SymfonyAbstractTask extends AbstractTask
 | 
			
		||||
 | 
			
		||||
        return $this->getConfig()->general('symfony_app_path', $defaultAppPath);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,6 @@
 | 
			
		||||
namespace Mage\Task;
 | 
			
		||||
 | 
			
		||||
use Mage\Config;
 | 
			
		||||
use Mage\Autoload;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								Mage/Task/RollbackException.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Mage/Task/RollbackException.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
<?php
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of the Magallanes package.
 | 
			
		||||
*
 | 
			
		||||
* (c) Alex V Kotelnikov <gudron@gudron.me>
 | 
			
		||||
*
 | 
			
		||||
* For the full copyright and license information, please view the LICENSE
 | 
			
		||||
* file that was distributed with this source code.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace Mage\Task;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Exception that indicates that the Task was Failed and rollback needed
 | 
			
		||||
 *
 | 
			
		||||
 * @author Alex V Kotelnikov <gudron@gudron.me>
 | 
			
		||||
 */
 | 
			
		||||
class RollbackException extends Exception
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -19,4 +19,4 @@ use Exception;
 | 
			
		||||
 */
 | 
			
		||||
class SkipException extends Exception
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -72,4 +72,4 @@ class Dumper
 | 
			
		||||
 | 
			
		||||
        return $output;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -86,4 +86,4 @@ class Escaper
 | 
			
		||||
    {
 | 
			
		||||
        return sprintf("'%s'", str_replace('\'', '\'\'', $value));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -22,4 +22,4 @@ use Mage\Yaml\Exception\RuntimeException;
 | 
			
		||||
 */
 | 
			
		||||
class DumpException extends RuntimeException
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -20,4 +20,4 @@ namespace Mage\Yaml\Exception;
 | 
			
		||||
 */
 | 
			
		||||
interface ExceptionInterface
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -147,4 +147,4 @@ class ParseException extends RuntimeException
 | 
			
		||||
            $this->message .= '.';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -22,4 +22,4 @@ use Mage\Yaml\Exception\ExceptionInterface;
 | 
			
		||||
 */
 | 
			
		||||
class RuntimeException extends \RuntimeException implements ExceptionInterface
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -502,4 +502,4 @@ class Inline
 | 
			
		||||
        $~x
 | 
			
		||||
EOF;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -655,5 +655,4 @@ class Parser
 | 
			
		||||
    {
 | 
			
		||||
        return (0 === strpos($this->currentLine, '- '));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -139,4 +139,4 @@ class Unescaper
 | 
			
		||||
 | 
			
		||||
        return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F) . chr(0x80 | $c >> 6 & 0x3F) . chr(0x80 | $c & 0x3F);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -99,4 +99,4 @@ class Yaml
 | 
			
		||||
 | 
			
		||||
        return $yaml->dump($array, $inline, 0, $exceptionOnInvalidType, $objectSupport);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								bin/mage
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								bin/mage
									
									
									
									
									
								
							@ -13,7 +13,7 @@ date_default_timezone_set('UTC');
 | 
			
		||||
 | 
			
		||||
$baseDir = dirname(dirname(__FILE__));
 | 
			
		||||
 | 
			
		||||
define('MAGALLANES_VERSION', '1.0.2');
 | 
			
		||||
define('MAGALLANES_VERSION', '1.0.3');
 | 
			
		||||
define('MAGALLANES_DIRECTORY', $baseDir);
 | 
			
		||||
 | 
			
		||||
if (file_exists(__DIR__ . '/../vendor/autoload.php')) {
 | 
			
		||||
@ -32,4 +32,4 @@ array_shift($argv);
 | 
			
		||||
$console = new Mage\Console;
 | 
			
		||||
$exitCode = $console->run($argv);
 | 
			
		||||
 | 
			
		||||
exit($exitCode);
 | 
			
		||||
exit((integer) $exitCode);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								box.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								box.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
{
 | 
			
		||||
    "files": ["LICENSE"],
 | 
			
		||||
    "finder": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "*.php",
 | 
			
		||||
            "exclude": [
 | 
			
		||||
                "docs"
 | 
			
		||||
            ],
 | 
			
		||||
            "in": "Mage"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "git-version": "git_tag",
 | 
			
		||||
    "main": "bin/mage",
 | 
			
		||||
    "output": "mage.phar",
 | 
			
		||||
    "stub": true
 | 
			
		||||
}
 | 
			
		||||
@ -10,11 +10,11 @@ deployment:
 | 
			
		||||
        ioncube: test
 | 
			
		||||
 | 
			
		||||
releases:
 | 
			
		||||
        enabled: true
 | 
			
		||||
        symlink: current
 | 
			
		||||
        directory: releases
 | 
			
		||||
  enabled: true
 | 
			
		||||
  symlink: current
 | 
			
		||||
  directory: releases
 | 
			
		||||
hosts:
 | 
			
		||||
        - localhost
 | 
			
		||||
  - localhost
 | 
			
		||||
tasks:
 | 
			
		||||
  pre-deploy:
 | 
			
		||||
    - ioncube/encrypt
 | 
			
		||||
@ -27,9 +27,8 @@ ioncube:
 | 
			
		||||
  encoder: ioncube_encoder54
 | 
			
		||||
  checkencoding: true
 | 
			
		||||
  checkignorepaths:
 | 
			
		||||
    -/public/js/*
 | 
			
		||||
    -/public/css/*
 | 
			
		||||
 | 
			
		||||
    - /public/js/*
 | 
			
		||||
    - /public/css/*
 | 
			
		||||
  projfile: project.prj
 | 
			
		||||
  project:
 | 
			
		||||
    replace-target:
 | 
			
		||||
@ -57,7 +56,6 @@ ioncube:
 | 
			
		||||
      - 'Comment 2'
 | 
			
		||||
      - "(c) ACTweb 2013"
 | 
			
		||||
      - "Draft Version"
 | 
			
		||||
 | 
			
		||||
    loader-event:
 | 
			
		||||
      - corrupt-file=Corupted files
 | 
			
		||||
      - expired-file=System needs updated
 | 
			
		||||
@ -2,11 +2,6 @@
 | 
			
		||||
deployment:
 | 
			
		||||
  user: root
 | 
			
		||||
  from: ./
 | 
			
		||||
#  source:
 | 
			
		||||
#    type: git
 | 
			
		||||
#    repository: git://github.com/andres-montanez/Magallanes.git
 | 
			
		||||
#    from: master
 | 
			
		||||
#    temporal: /tmp/myAppClone
 | 
			
		||||
  to: /var/www/vhosts/example.com/www
 | 
			
		||||
  excludes:
 | 
			
		||||
    - application/data/cache/twig/*
 | 
			
		||||
@ -16,25 +11,13 @@ releases:
 | 
			
		||||
  symlink: current
 | 
			
		||||
  directory: releases
 | 
			
		||||
hosts:
 | 
			
		||||
  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
 | 
			
		||||
  - s01.example.com
 | 
			
		||||
  - s02.example.com
 | 
			
		||||
tasks:
 | 
			
		||||
  pre-deploy:
 | 
			
		||||
    - scm/update
 | 
			
		||||
  on-deploy:
 | 
			
		||||
#    - symfony2/cache-warmup: {env: prod}
 | 
			
		||||
    - symfony2/cache-warmup: { env: prod }
 | 
			
		||||
    - privileges
 | 
			
		||||
    - sampleTask
 | 
			
		||||
    - sampleTaskRollbackAware
 | 
			
		||||
  #post-deploy:
 | 
			
		||||
@ -0,0 +1,38 @@
 | 
			
		||||
#production
 | 
			
		||||
deployment:
 | 
			
		||||
  user: root
 | 
			
		||||
  from: ./
 | 
			
		||||
#  source:
 | 
			
		||||
#    type: git
 | 
			
		||||
#    repository: git://github.com/andres-montanez/Magallanes.git
 | 
			
		||||
#    from: master
 | 
			
		||||
#    temporal: /tmp/myAppClone
 | 
			
		||||
  to: /var/www/vhosts/example.com/www
 | 
			
		||||
  excludes:
 | 
			
		||||
    - application/data/cache/twig/*
 | 
			
		||||
releases:
 | 
			
		||||
  enabled: true
 | 
			
		||||
  max: 5
 | 
			
		||||
  symlink: current
 | 
			
		||||
  directory: releases
 | 
			
		||||
hosts:
 | 
			
		||||
  - s01.example.com
 | 
			
		||||
  - s02.example.com
 | 
			
		||||
#  s02.example.com:
 | 
			
		||||
#    deployment:
 | 
			
		||||
#      user: toor
 | 
			
		||||
#      to: /home/web/public
 | 
			
		||||
#    releases:
 | 
			
		||||
#      max: 10
 | 
			
		||||
#    tasks:
 | 
			
		||||
#      on-deploy:
 | 
			
		||||
#        - privileges
 | 
			
		||||
tasks:
 | 
			
		||||
  pre-deploy:
 | 
			
		||||
    - scm/update
 | 
			
		||||
  on-deploy:
 | 
			
		||||
    - symfony2/cache-warmup: { env: prod }
 | 
			
		||||
    - privileges
 | 
			
		||||
    - sampleTask
 | 
			
		||||
    - sampleTaskRollbackAware
 | 
			
		||||
  #post-deploy:
 | 
			
		||||
@ -5,4 +5,4 @@ notifications: true
 | 
			
		||||
logging: true
 | 
			
		||||
scm:
 | 
			
		||||
  type: git
 | 
			
		||||
  url:  git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git 
 | 
			
		||||
  url:  git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								docs/example-config/.mage/logs/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								docs/example-config/.mage/logs/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1 +1 @@
 | 
			
		||||
log-*
 | 
			
		||||
log-*
 | 
			
		||||
 | 
			
		||||
@ -14,4 +14,4 @@ class FailTask extends AbstractTask
 | 
			
		||||
    {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -17,4 +17,4 @@ class Privileges extends AbstractTask
 | 
			
		||||
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -14,4 +14,4 @@ class SampleTask extends AbstractTask
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -19,4 +19,5 @@ class SampleTaskRollbackAware extends AbstractTask implements RollbackAware
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,8 +18,10 @@ class TaskWithParameters extends AbstractTask
 | 
			
		||||
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
        //throw new Mage_Task_SkipException;
 | 
			
		||||
        //return false;
 | 
			
		||||
        return true;
 | 
			
		||||
        if ($this->getParameter('booleanOption', false)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        } else {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user