Completed
Push — master ( 1e4e4c...8be129 )
by Marin
05:19
created

Runner::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2.0185

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 5
cts 6
cp 0.8333
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 2
crap 2.0185
1
<?php
2
3
namespace Anorgan\Deployer\Common;
4
5
use Anorgan\Deployer\Common\Server\AbstractServer;
6
use Psr\Log\LoggerInterface;
7
use Psr\Log\NullLogger;
8
9
class Runner
10
{
11
    /**
12
     * @var DeployStep[]
13
     */
14
    private $steps;
15
16
    /**
17
     * @var LoggerInterface
18
     */
19
    private $logger;
20
21
    /**
22
     * @param DeployStep[]    $steps
23
     * @param LoggerInterface $logger
24
     */
25 4
    public function __construct(array $steps, LoggerInterface $logger = null)
26
    {
27 4
        $this->steps = $steps;
28
29 4
        if (null === $logger) {
30
            $logger = new NullLogger();
31
        }
32 4
        $this->logger = $logger;
33 4
    }
34
35
    /**
36
     * Run commands on every server of every step with steps' commands.
37
     */
38
    public function run()
39
    {
40
        foreach ($this->getSteps() as $step) {
41
            $this->logger->info('Starting "'.$step->getTitle().'"');
42
43
            foreach ($this->getServersForStep($step) as $server) {
44
                if ($step->isMandatory()) {
45
                    $server->runCommands();
46
                    $this->logger->info('Finished "'.$step->getTitle().'" on "'.$server->getTitle().'"');
47
                } else {
48
                    try {
49
                        $server->runCommands();
50
                        $this->logger->info('Finished "'.$step->getTitle().'" on "'.$server->getTitle().'"');
51
                    } catch (\Exception $e) {
52
                        $this->logger->info('Failed to run "'.$step->getTitle().'" on "'.$server->getTitle().'"');
53
                    }
54
                }
55
            }
56
        }
57
    }
58
59
    /**
60
     * @return DeployStep[]
61
     */
62 1
    public function getSteps()
63
    {
64 1
        return $this->steps;
65
    }
66
67
    /**
68
     * @param DeployStep $step
69
     *
70
     * @return AbstractServer[]
71
     */
72 1
    public function getServersForStep(DeployStep $step)
73
    {
74 1
        $servers = $step->getServers();
75 1
        foreach ($servers as $server) {
76 1
            $server->setLogger($this->logger);
77 1
            $server->setCommands($step->getCommands());
78
        }
79
80 1
        return $servers;
81
    }
82
}
83