diff --git a/composer.json b/composer.json index d163d78..d1df058 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,7 @@ "prefer-stable": true, "require": { "php": "^7.3|^8.0", - "laravel/sail": "^1.0" + "laravel/sail": "^1.20.0" }, "require-dev": { "laravel/pint": "^1.0" diff --git a/src/Console/SailEnvCommand.php b/src/Console/SailEnvCommand.php index d17c62b..7643513 100644 --- a/src/Console/SailEnvCommand.php +++ b/src/Console/SailEnvCommand.php @@ -2,10 +2,14 @@ namespace Jedymatt\LaravelSailEnv\Console; -use Laravel\Sail\Console\InstallCommand; +use Illuminate\Console\Command; +use Laravel\Sail\Console\Concerns\InteractsWithDockerComposeServices; +use Symfony\Component\Yaml\Yaml; -class SailEnvCommand extends InstallCommand +class SailEnvCommand extends Command { + use InteractsWithDockerComposeServices; + /** * The name and signature of the console command. * @@ -45,7 +49,7 @@ public function handle() return 1; } - $services = $this->getServicesFromDockerCompose(); + $services = $this->getServicesFromCompose(); $this->comment('Detected services from docker-compose.yml: ['.implode(',', $services).']'); @@ -54,17 +58,16 @@ public function handle() $this->info('Successfully configured .env file.'); } - protected function getServicesFromDockerCompose(): array + protected function getServicesFromCompose(): array { - $dockerComposeContent = file_get_contents($this->laravel->basePath('docker-compose.yml')); - - $regex = '/'.implode('|', array_map(function ($service) { - return '(?<=[^\S]\s)'.$service.'(?=:)'; // Match service name followed by ':' (e.g. mysql:) and preceded only by whitespace - }, $this->services)).'/'; - - preg_match_all($regex, $dockerComposeContent, $matches); - - return array_values($matches[0]); + $compose = Yaml::parseFile($this->laravel->basePath('docker-compose.yml')); + + return collect($compose['services']) + ->filter(function ($service, $key) { + return in_array($key, $this->services); + }) + ->keys() + ->toArray(); } protected function createEnvFile(): void diff --git a/src/LaravelSailEnvServiceProvider.php b/src/LaravelSailEnvServiceProvider.php index de350a4..2ab1377 100644 --- a/src/LaravelSailEnvServiceProvider.php +++ b/src/LaravelSailEnvServiceProvider.php @@ -2,20 +2,12 @@ namespace Jedymatt\LaravelSailEnv; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Support\ServiceProvider; +use Jedymatt\LaravelSailEnv\Console\SailEnvCommand; -class LaravelSailEnvServiceProvider extends ServiceProvider +class LaravelSailEnvServiceProvider extends ServiceProvider implements DeferrableProvider { - /** - * Register services. - * - * @return void - */ - public function register() - { - // - } - /** * Bootstrap services. * @@ -25,7 +17,7 @@ public function boot() { if ($this->app->runningInConsole()) { $this->commands([ - Console\SailEnvCommand::class, + SailEnvCommand::class, ]); } } @@ -33,7 +25,7 @@ public function boot() public function provides() { return [ - Console\SailEnvCommand::class, + SailEnvCommand::class, ]; } }