Skip to content

Commit

Permalink
Add variable resolution for repository
Browse files Browse the repository at this point in the history
  • Loading branch information
Julien Jacottet committed Oct 17, 2016
1 parent 3f58241 commit c7e4352
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 6 deletions.
3 changes: 2 additions & 1 deletion src/Automate/Command/CheckCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
$io = new SymfonyStyle($input, $output);

$variableResolver = new VariableResolver($io);
$variableResolver->resolve($platform);
$variableResolver->resolvePlatform($platform);
$variableResolver->resolveRepository($project);

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

Expand Down
5 changes: 3 additions & 2 deletions src/Automate/Command/DeployCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
$io = new SymfonyStyle($input, $output);

$variableResolver = new VariableResolver($io);
$variableResolver->resolve($platform);

$variableResolver->resolvePlatform($platform);
$variableResolver->resolveRepository($project);

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

$logger->section('Start deployment');
Expand Down
19 changes: 18 additions & 1 deletion src/Automate/VariableResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
namespace Automate;

use Automate\Model\Platform;
use Automate\Model\Project;
use Symfony\Component\Console\Style\SymfonyStyle;

class VariableResolver
Expand Down Expand Up @@ -40,7 +41,7 @@ public function __construct(SymfonyStyle $io)
*
* @param Platform $platform
*/
public function resolve(Platform $platform)
public function resolvePlatform(Platform $platform)
{
foreach ($platform->getServers() as $server) {
if ($this->isVariable($server->getPassword())) {
Expand All @@ -50,6 +51,22 @@ public function resolve(Platform $platform)
}
}

/**
* Resolve repository configuration.
*
* @param Project $project
*/
public function resolveRepository(Project $project)
{

if(preg_match('/http[s]?:\/\/(?P<user>.*):(?P<variable>%.*%)@(.*)/i', $project->getRepository(), $match)) {
$password = $this->resolveVariable($match['variable']);
$repository = str_replace($match['variable'], $password, $project->getRepository());

$project->setRepository($repository);
}
}

/**
* Retourn true if value is a variable.
*
Expand Down
26 changes: 24 additions & 2 deletions tests/Automate/VariableResolverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
namespace Automate\Tests;

use Automate\Model\Platform;
use Automate\Model\Project;
use Automate\Model\Server;
use Automate\VariableResolver;
use Symfony\Component\Console\Style\SymfonyStyle;
Expand All @@ -32,7 +33,7 @@ public function testAskPassword()
$server->setPassword('%server_password%');
$platform->addServer($server);

$resolver->resolve($platform);
$resolver->resolvePlatform($platform);

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

putenv('AUTOMATE__server_password=sessionPassword');
$resolver->resolve($platform);
$resolver->resolvePlatform($platform);

$this->assertEquals('sessionPassword', $server->getPassword());
}

public function testRepository()
{
$io = Phake::mock(SymfonyStyle::class);
$resolver = new VariableResolver($io);
putenv('AUTOMATE__git_password=sessionPassword');

$project = new Project();

$project->setRepository('https://user:%git_password%@exemple.com');
$resolver->resolveRepository($project);
$this->assertEquals('https://user:[email protected]', $project->getRepository());

$project->setRepository('http://user:%git_password%@exemple.com');
$resolver->resolveRepository($project);
$this->assertEquals('http://user:[email protected]', $project->getRepository());

$project->setRepository('[email protected]:exemple/exemple.git');
$resolver->resolveRepository($project);
$this->assertEquals('[email protected]:exemple/exemple.git', $project->getRepository());
}
}

0 comments on commit c7e4352

Please sign in to comment.