diff --git a/src/Automate/Command/CheckCommand.php b/src/Automate/Command/CheckCommand.php index c1ae428..b8a8363 100644 --- a/src/Automate/Command/CheckCommand.php +++ b/src/Automate/Command/CheckCommand.php @@ -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); diff --git a/src/Automate/Command/DeployCommand.php b/src/Automate/Command/DeployCommand.php index 6cc8fee..58c5c43 100644 --- a/src/Automate/Command/DeployCommand.php +++ b/src/Automate/Command/DeployCommand.php @@ -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'); diff --git a/src/Automate/VariableResolver.php b/src/Automate/VariableResolver.php index da49d3c..4d51203 100644 --- a/src/Automate/VariableResolver.php +++ b/src/Automate/VariableResolver.php @@ -12,6 +12,7 @@ namespace Automate; use Automate\Model\Platform; +use Automate\Model\Project; use Symfony\Component\Console\Style\SymfonyStyle; class VariableResolver @@ -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())) { @@ -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.*):(?P%.*%)@(.*)/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. * diff --git a/tests/Automate/VariableResolverTest.php b/tests/Automate/VariableResolverTest.php index deb0326..f95031b 100644 --- a/tests/Automate/VariableResolverTest.php +++ b/tests/Automate/VariableResolverTest.php @@ -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; @@ -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()); } @@ -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:sessionPassword@exemple.com', $project->getRepository()); + + $project->setRepository('http://user:%git_password%@exemple.com'); + $resolver->resolveRepository($project); + $this->assertEquals('http://user:sessionPassword@exemple.com', $project->getRepository()); + + $project->setRepository('git@github.com:exemple/exemple.git'); + $resolver->resolveRepository($project); + $this->assertEquals('git@github.com:exemple/exemple.git', $project->getRepository()); + } }