From ef12fafc978ece016e0f6883d0d378bf857592fa Mon Sep 17 00:00:00 2001 From: Brandon Date: Tue, 2 Apr 2024 09:29:48 -0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20`acorn:install`=20command=20t?= =?UTF-8?q?o=20simplify=20installing=20Acorn=20(#369)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Console/Commands/AcornInstallCommand.php | 131 ++++++++++++++++++ src/Roots/Acorn/Console/Kernel.php | 1 + 2 files changed, 132 insertions(+) create mode 100644 src/Roots/Acorn/Console/Commands/AcornInstallCommand.php diff --git a/src/Roots/Acorn/Console/Commands/AcornInstallCommand.php b/src/Roots/Acorn/Console/Commands/AcornInstallCommand.php new file mode 100644 index 00000000..39435a53 --- /dev/null +++ b/src/Roots/Acorn/Console/Commands/AcornInstallCommand.php @@ -0,0 +1,131 @@ +askToInstallScript(); + $this->askToInitialize(); + $this->askToStar(); + + return static::SUCCESS; + } + + /** + * Ask to install the Acorn autoload dump script. + */ + protected function askToInstallScript(): void + { + if (! $this->option('autoload') && $this->option('no-interaction')) { + return; + } + + if ($this->option('autoload') || confirm( + label: 'Would you like to install the Acorn autoload dump script?', + default: true, + )) { + $this->installAutoloadDump(); + } + } + + /** + * Install the Acorn autoload dump script. + */ + protected function installAutoloadDump(): void + { + $path = InstalledVersions::getInstallPath('roots/acorn'); + $path = dirname($path, 5); + + $composer = "{$path}/composer.json"; + + if (! file_exists($composer)) { + return; + } + + $configuration = json_decode(file_get_contents($composer), associative: true); + + $script = 'Roots\\Acorn\\ComposerScripts::postAutoloadDump'; + + if (in_array($script, $configuration['scripts']['post-autoload-dump'] ?? [])) { + return; + } + + $configuration['scripts']['post-autoload-dump'] ??= []; + $configuration['scripts']['post-autoload-dump'][] = $script; + + $configuration = str(json_encode($configuration, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) + ->replace(' ', ' ') + ->append(PHP_EOL) + ->toString(); + + file_put_contents( + $composer, + $configuration, + ); + } + + /** + * Ask the user to initialize Acorn. + */ + protected function askToInitialize(): void + { + if (! $this->option('init') && $this->option('no-interaction')) { + return; + } + + if ($this->option('init') || confirm( + label: 'Would you like to initialize Acorn?', + default: true, + )) { + $this->callSilent('acorn:init', ['--base' => $this->getLaravel()->basePath()]); + } + } + + /** + * Ask the user to star the Acorn repository. + */ + protected function askToStar(): void + { + if ($this->option('no-interaction')) { + return; + } + + if (confirm( + label: '🎉 All done! Would you like to show love by starring Acorn on GitHub?', + default: true, + )) { + match (PHP_OS_FAMILY) { + 'Darwin' => exec('open https://github.com/roots/acorn'), + 'Linux' => exec('xdg-open https://github.com/roots/acorn'), + 'Windows' => exec('start https://github.com/roots/acorn'), + }; + + $this->components->info('Thank you!'); + } + } +} diff --git a/src/Roots/Acorn/Console/Kernel.php b/src/Roots/Acorn/Console/Kernel.php index f7c9267d..de27c3d7 100644 --- a/src/Roots/Acorn/Console/Kernel.php +++ b/src/Roots/Acorn/Console/Kernel.php @@ -34,6 +34,7 @@ class Kernel extends FoundationConsoleKernel \Illuminate\Routing\Console\MiddlewareMakeCommand::class, \Roots\Acorn\Console\Commands\AboutCommand::class, \Roots\Acorn\Console\Commands\AcornInitCommand::class, + \Roots\Acorn\Console\Commands\AcornInstallCommand::class, \Roots\Acorn\Console\Commands\ComposerMakeCommand::class, \Roots\Acorn\Console\Commands\ConfigCacheCommand::class, \Roots\Acorn\Console\Commands\KeyGenerateCommand::class,