Skip to content

Commit c7e4352

Browse files
author
Julien Jacottet
committed
Add variable resolution for repository
1 parent 3f58241 commit c7e4352

File tree

4 files changed

+47
-6
lines changed

4 files changed

+47
-6
lines changed

src/Automate/Command/CheckCommand.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
4040
$io = new SymfonyStyle($input, $output);
4141

4242
$variableResolver = new VariableResolver($io);
43-
$variableResolver->resolve($platform);
43+
$variableResolver->resolvePlatform($platform);
44+
$variableResolver->resolveRepository($project);
4445

4546
$logger = $this->getLogger($io);
4647

src/Automate/Command/DeployCommand.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
4242
$io = new SymfonyStyle($input, $output);
4343

4444
$variableResolver = new VariableResolver($io);
45-
$variableResolver->resolve($platform);
46-
45+
$variableResolver->resolvePlatform($platform);
46+
$variableResolver->resolveRepository($project);
47+
4748
$logger = $this->getLogger($io);
4849

4950
$logger->section('Start deployment');

src/Automate/VariableResolver.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Automate;
1313

1414
use Automate\Model\Platform;
15+
use Automate\Model\Project;
1516
use Symfony\Component\Console\Style\SymfonyStyle;
1617

1718
class VariableResolver
@@ -40,7 +41,7 @@ public function __construct(SymfonyStyle $io)
4041
*
4142
* @param Platform $platform
4243
*/
43-
public function resolve(Platform $platform)
44+
public function resolvePlatform(Platform $platform)
4445
{
4546
foreach ($platform->getServers() as $server) {
4647
if ($this->isVariable($server->getPassword())) {
@@ -50,6 +51,22 @@ public function resolve(Platform $platform)
5051
}
5152
}
5253

54+
/**
55+
* Resolve repository configuration.
56+
*
57+
* @param Project $project
58+
*/
59+
public function resolveRepository(Project $project)
60+
{
61+
62+
if(preg_match('/http[s]?:\/\/(?P<user>.*):(?P<variable>%.*%)@(.*)/i', $project->getRepository(), $match)) {
63+
$password = $this->resolveVariable($match['variable']);
64+
$repository = str_replace($match['variable'], $password, $project->getRepository());
65+
66+
$project->setRepository($repository);
67+
}
68+
}
69+
5370
/**
5471
* Retourn true if value is a variable.
5572
*

tests/Automate/VariableResolverTest.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Automate\Tests;
1313

1414
use Automate\Model\Platform;
15+
use Automate\Model\Project;
1516
use Automate\Model\Server;
1617
use Automate\VariableResolver;
1718
use Symfony\Component\Console\Style\SymfonyStyle;
@@ -32,7 +33,7 @@ public function testAskPassword()
3233
$server->setPassword('%server_password%');
3334
$platform->addServer($server);
3435

35-
$resolver->resolve($platform);
36+
$resolver->resolvePlatform($platform);
3637

3738
$this->assertEquals('mypassword', $server->getPassword());
3839
}
@@ -49,8 +50,29 @@ public function testSessionPassword()
4950
$platform->addServer($server);
5051

5152
putenv('AUTOMATE__server_password=sessionPassword');
52-
$resolver->resolve($platform);
53+
$resolver->resolvePlatform($platform);
5354

5455
$this->assertEquals('sessionPassword', $server->getPassword());
5556
}
57+
58+
public function testRepository()
59+
{
60+
$io = Phake::mock(SymfonyStyle::class);
61+
$resolver = new VariableResolver($io);
62+
putenv('AUTOMATE__git_password=sessionPassword');
63+
64+
$project = new Project();
65+
66+
$project->setRepository('https://user:%git_password%@exemple.com');
67+
$resolver->resolveRepository($project);
68+
$this->assertEquals('https://user:sessionPassword@exemple.com', $project->getRepository());
69+
70+
$project->setRepository('http://user:%git_password%@exemple.com');
71+
$resolver->resolveRepository($project);
72+
$this->assertEquals('http://user:sessionPassword@exemple.com', $project->getRepository());
73+
74+
$project->setRepository('git@github.com:exemple/exemple.git');
75+
$resolver->resolveRepository($project);
76+
$this->assertEquals('git@github.com:exemple/exemple.git', $project->getRepository());
77+
}
5678
}

0 commit comments

Comments
 (0)