CleanupTask   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 22
c 0
b 0
f 0
dl 0
loc 45
ccs 24
cts 24
cp 1
rs 10
wmc 8

3 Methods

Rating   Name   Duplication   Size   Complexity  
A execute() 0 33 6
A getDescription() 0 3 1
A getName() 0 3 1
1
<?php
2
3
/*
4
 * This file is part of the Magallanes package.
5
 *
6
 * (c) Andrés Montañez <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Mage\Task\BuiltIn\Deploy\Release;
13
14
use Symfony\Component\Process\Process;
15
use Mage\Task\AbstractTask;
16
17
/**
18
 * Release Task - Cleanup old releases
19
 *
20
 * @author Andrés Montañez <[email protected]>
21
 */
22
class CleanupTask extends AbstractTask
23
{
24 48
    public function getName(): string
25
    {
26 48
        return 'deploy/release/cleanup';
27
    }
28
29 13
    public function getDescription(): string
30
    {
31 13
        return '[Release] Cleaning up old Releases';
32
    }
33
34 12
    public function execute(): bool
35
    {
36 12
        $hostPath = rtrim($this->runtime->getEnvOption('host_path'), '/');
37 12
        $currentReleaseId = $this->runtime->getReleaseId();
38 12
        $maxReleases = $this->runtime->getEnvOption('releases');
39
40 12
        $cmdListReleases = sprintf('ls -1 %s/releases', $hostPath);
41
42
        /** @var Process $process */
43 12
        $process = $this->runtime->runRemoteCommand($cmdListReleases, false);
44 12
        if ($process->isSuccessful()) {
45 11
            $releases = $process->getOutput();
46 11
            $releases = explode("\n", trim($releases));
47
48 11
            if (count($releases) > $maxReleases) {
49 11
                sort($releases);
50 11
                $releasesToDelete = array_slice($releases, 0, count($releases) - $maxReleases);
51 11
                foreach ($releasesToDelete as $releaseId) {
52 11
                    if ($releaseId !== $currentReleaseId) {
53 11
                        $cmdDeleteRelease = sprintf('rm -rf %s/releases/%s', $hostPath, $releaseId);
54
                        /** @var Process $process */
55 11
                        $process = $this->runtime->runRemoteCommand($cmdDeleteRelease, false);
56 11
                        if (!$process->isSuccessful()) {
57 1
                            return false;
58
                        }
59
                    }
60
                }
61
            }
62
63 10
            return true;
64
        }
65
66 1
        return false;
67
    }
68
}
69