diff --git a/src/Rocketeer/Services/Connections/ConnectionsHandler.php b/src/Rocketeer/Services/Connections/ConnectionsHandler.php index 0371d802b..a92961230 100644 --- a/src/Rocketeer/Services/Connections/ConnectionsHandler.php +++ b/src/Rocketeer/Services/Connections/ConnectionsHandler.php @@ -196,8 +196,16 @@ public function getAvailableConnections() // Unify multiservers foreach ($connections as $key => $servers) { - $servers = Arr::get($servers, 'servers', [$servers]); - $connections[$key] = ['servers' => array_values($servers)]; + $servers = Arr::get($servers, 'servers', [$servers]); + $servers = array_values($servers); + + foreach ($servers as $serverKey => $server) { + if ($server && array_key_exists('key', $server)) { + $servers[$serverKey]['key'] = str_replace('~/', $this->paths->getUserHomeFolder().'/', $server['key']); + } + } + + $connections[$key] = ['servers' => $servers]; } return $connections; diff --git a/tests/Services/Connections/ConnectionsHandlerTest.php b/tests/Services/Connections/ConnectionsHandlerTest.php index 63095e381..4e4a1dfa6 100644 --- a/tests/Services/Connections/ConnectionsHandlerTest.php +++ b/tests/Services/Connections/ConnectionsHandlerTest.php @@ -283,6 +283,20 @@ public function testCanHaveMultipleServerConnections() $this->assertEquals('production-multiserver/2', $this->connections->getHandle('production-multiserver', 2)); } + public function testCanExpandPathsAtRuntime() + { + $this->swapConfig([ + 'rocketeer::connections' => [ + 'production' => [ + 'host' => 'foo.com', + 'key' => '~/.ssh/id_rsa', + ], + ], + ]); + + $this->assertEquals($this->paths->getUserHomeFolder().'/.ssh/id_rsa', $this->connections->getServerCredentials()['key']); + } + //////////////////////////////////////////////////////////////////// //////////////////////////////// HELPERS /////////////////////////// ////////////////////////////////////////////////////////////////////