diff --git a/Mage/Task/BuiltIn/Deployment/Releases.php b/Mage/Task/BuiltIn/Deployment/Releases.php index 937244e..d37484d 100644 --- a/Mage/Task/BuiltIn/Deployment/Releases.php +++ b/Mage/Task/BuiltIn/Deployment/Releases.php @@ -27,8 +27,35 @@ class Mage_Task_BuiltIn_Deployment_Releases . ' && ' . 'chown -h ' . $userGroup . ' ' . $symlink . ' && ' - . 'chown -R ' . $userGroup . ' ' . $currentCopy; + . 'chown -R ' . $userGroup . ' ' . $currentCopy; $result = $this->_runRemoteCommand($command); + + // Count Releases + $maxReleases = $this->_config->release('max', false); + if (($maxReleases !== false) && ($maxReleases > 0)) { + $releasesList = ''; + $countReleasesFetch = $this->_runRemoteCommand('ls -1 ' . $releasesDirectory, $releasesList); + $releasesList = trim($releasesList); + + if ($releasesList != '') { + $releasesList = explode(PHP_EOL, $releasesList); + if (count($releasesList) > $maxReleases) { + $releasesToDelete = array_diff($releasesList, array($this->_config->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->_runRemoteCommand($command); + } + } + } + } + } + return $result; } else { diff --git a/Mage/Task/Deploy.php b/Mage/Task/Deploy.php index c8e7f9b..b4a6e10 100644 --- a/Mage/Task/Deploy.php +++ b/Mage/Task/Deploy.php @@ -42,7 +42,7 @@ class Mage_Task_Deploy if ($config->release('enabled', false) == true) { $config->setReleaseId($this->_releaseId); - array_push($tasksToRun, 'deployment/releases'); + array_push($tasksToRun, 'deployment/releases'); } if (count($tasksToRun) == 0) { @@ -80,18 +80,21 @@ class Mage_Task_Deploy // Run Post-Deployment Tasks $this->_runNonDeploymentTasks('post-deploy', $config, 'Post-Deployment'); - - // Time Information General - $timeText = $this->_transcurredTime(time() - $this->_startTime); - Mage_Console::output('Total time: ' . $timeText . '.'); // Time Information Hosts if ($this->_hostsCount > 0) { + $timeTextHost = $this->_transcurredTime($this->_endTimeHosts - $this->_startTimeHosts); + Mage_Console::output('Average time for deployment: ' . $timeTextHost . '.'); + $timeTextPerHost = $this->_transcurredTime(round(($this->_endTimeHosts - $this->_startTimeHosts) / $this->_hostsCount)); Mage_Console::output('Average time per host: ' . $timeTextPerHost . '.'); } + + // Time Information General + $timeText = $this->_transcurredTime(time() - $this->_startTime); + Mage_Console::output('Total time: ' . $timeText . '.', 1, 2); } - + private function _runNonDeploymentTasks($stage, Mage_Config $config, $title) { $tasksToRun = $config->getTasks($stage); diff --git a/docs/example-config/.mage/config/environment/production.yml b/docs/example-config/.mage/config/environment/production.yml index 94a263a..9132522 100644 --- a/docs/example-config/.mage/config/environment/production.yml +++ b/docs/example-config/.mage/config/environment/production.yml @@ -12,6 +12,7 @@ deployment: - application/data/cache/twig/* releases: enabled: true + max: 5 symlink: current directory: releases hosts: