|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace TheAentMachine\AentDockerCompose\Command; |
|
4
|
|
|
|
|
5
|
|
|
use Symfony\Component\Filesystem\Filesystem; |
|
6
|
|
|
use TheAentMachine\Aenthill\Aenthill; |
|
7
|
|
|
use TheAentMachine\Aenthill\CommonEvents; |
|
8
|
|
|
use TheAentMachine\Aenthill\CommonMetadata; |
|
9
|
|
|
use TheAentMachine\Aenthill\Manifest; |
|
10
|
|
|
use TheAentMachine\Aenthill\Pheromone; |
|
11
|
|
|
use TheAentMachine\Command\AbstractEventCommand; |
|
12
|
|
|
|
|
13
|
|
|
class AddEventCommand extends AbstractEventCommand |
|
14
|
|
|
{ |
|
15
|
|
|
protected function getEventName(): string |
|
16
|
|
|
{ |
|
17
|
|
|
return CommonEvents::ADD_EVENT; |
|
18
|
|
|
} |
|
19
|
|
|
|
|
20
|
|
|
/** |
|
21
|
|
|
* @param null|string $payload |
|
22
|
|
|
* @return null|string |
|
23
|
|
|
* @throws \TheAentMachine\Exception\CommonAentsException |
|
24
|
|
|
* @throws \TheAentMachine\Exception\ManifestException |
|
25
|
|
|
* @throws \TheAentMachine\Exception\MissingEnvironmentVariableException |
|
26
|
|
|
*/ |
|
27
|
|
|
protected function executeEvent(?string $payload): ?string |
|
28
|
|
|
{ |
|
29
|
|
|
$aentHelper = $this->getAentHelper(); |
|
30
|
|
|
$aentHelper->title('Installing a Docker Compose orchestrator'); |
|
31
|
|
|
$envType = $aentHelper->getCommonQuestions()->askForEnvType(); |
|
32
|
|
|
$envName = $aentHelper->getCommonQuestions()->askForEnvName($envType); |
|
33
|
|
|
|
|
34
|
|
|
$projectDir = Pheromone::getContainerProjectDirectory(); |
|
35
|
|
|
$fileNameChoices = []; |
|
36
|
|
|
if (!file_exists("$projectDir/docker-compose.yml")) { |
|
37
|
|
|
$fileNameChoices[] = 'docker-compose.yml'; |
|
38
|
|
|
} |
|
39
|
|
|
|
|
40
|
|
|
$i = 0; |
|
41
|
|
|
$tmpFileName = "docker-compose.$envName.yml"; |
|
42
|
|
|
while (file_exists("$projectDir/$tmpFileName")) { |
|
43
|
|
|
$i++; |
|
44
|
|
|
$tmpFileName = "docker-compose.$envName$i.yml"; |
|
45
|
|
|
} |
|
46
|
|
|
$fileNameChoices[] = $tmpFileName; |
|
47
|
|
|
|
|
48
|
|
|
$fileName = $aentHelper->choiceQuestion('Select your docker-compose file name', $fileNameChoices) |
|
49
|
|
|
->setDefault('0') |
|
50
|
|
|
->ask(); |
|
51
|
|
|
|
|
52
|
|
|
$versionChoices = ['3.7', '3.6', '3.5', '3.4', '3.3', '3.2']; |
|
53
|
|
|
$version = $aentHelper->choiceQuestion('Select your docker-compose version', $versionChoices) |
|
54
|
|
|
->setDefault('3.3') |
|
55
|
|
|
->ask(); |
|
56
|
|
|
|
|
57
|
|
|
$fileSystem = new Filesystem(); |
|
58
|
|
|
$dockerComposePath = "$projectDir/$fileName"; |
|
59
|
|
|
$fileSystem->dumpFile($dockerComposePath, "version: '$version'"); |
|
60
|
|
|
$dirInfo = new \SplFileInfo(\dirname($dockerComposePath)); |
|
61
|
|
|
chown($dockerComposePath, $dirInfo->getOwner()); |
|
62
|
|
|
chgrp($dockerComposePath, $dirInfo->getGroup()); |
|
63
|
|
|
Manifest::addMetadata(CommonMetadata::DOCKER_COMPOSE_FILENAME_KEY, $fileName); |
|
64
|
|
|
|
|
65
|
|
|
$CIAentID = $aentHelper->getCommonQuestions()->askForCI(); |
|
66
|
|
|
if (null !== $CIAentID) { |
|
67
|
|
|
Aenthill::run($CIAentID, CommonEvents::ADD_EVENT, '1'); // 1 for single environment (single branch) |
|
68
|
|
|
Aenthill::run($CIAentID, CommonEvents::NEW_DEPLOY_DOCKER_COMPOSE_JOB_EVENT, $fileName); |
|
69
|
|
|
$aentHelper->spacer(); |
|
70
|
|
|
} |
|
71
|
|
|
|
|
72
|
|
|
$aentHelper->getCommonQuestions()->askForImageBuilder(); |
|
73
|
|
|
|
|
74
|
|
|
$this->output->writeln("Docker Compose file <info>$fileName</info> has been successfully created!"); |
|
75
|
|
|
$aentHelper->spacer(); |
|
76
|
|
|
|
|
77
|
|
|
return null; |
|
78
|
|
|
} |
|
79
|
|
|
} |
|
80
|
|
|
|