Command improvements

Remove process args


Silence npm WARN output (when applicable)


Compat for npm in different directories


Reverse npm silence


Replace Symfony Process


Remove Symfony Process refs


Add forgotten output for commands


Removed colons that artisan already added


Remove optional parameters in install cmd


Simplify settings save call


Further simplify settings save call
This commit is contained in:
Miguel Nogueira 2020-07-09 07:03:40 +01:00
parent f673ef8222
commit a42df354c7
2 changed files with 30 additions and 43 deletions

View File

@ -4,8 +4,6 @@ namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;
class Install extends Command
{
@ -52,81 +50,69 @@ class Install extends Command
]);
copy($basePath . '/.env.example', $basePath . '/.env');
Artisan::call('key:generate');
// Command stack
$composer = new Process('composer install', $basePath);
$npm = new Process('npm install', $basePath);
$npmBuild = new Process('npm run dev', $basePath);
$this->call('key:generate');
$this->info('>> Installing and preparing dependencies. This may take a while, depending on your computer.');
$progress = $this->output->createProgressBar(3);
try
$npmOut = 0;
$npmMessages = [];
$npmBuildOut = 0;
$npmBuildMessages = [];
exec('cd ' . $basePath . ' && npm install --silent', $npmBuildOut, $npmOut);
exec('cd ' . $basePath . '&& npm run dev --silent', $npmBuildMessages, $npmBuildOut);
if($npmOut !== 0 && $npmBuildOut !== 0)
{
$npm->mustRun();
$progress->advance();
$npmBuild->mustRun();
$progress->advance();
}
catch(ProcessFailedException $pfe)
{
$this->error('[!] One or more errors have ocurred whilst attempting to install dependencies. This is the error message: ' . $pfe->getMessage());
$this->error('[!] One or more errors have ocurred whilst attempting to install dependencies.');
$this->error('[!] It is recommended to run this command again, and report a bug if it keeps happening.');
return false;
}
finally
{
$progress->finish();
}
$settings = [];
$this->info('>> Configuring application - We\'re going to ask a few questions here!');
$this->info('>> Questions with a value in brackets are optional and you may leave them empty to use it');
do
{
$this->info('== Database Settings (1/6) ==');
$settings['DB_USERNAME'] = $this->ask('Database username [root]: ') ?? 'root';
$settings['DB_PASSWORD'] = $this->secret('Database password (Input won\'t be seen): ');
$settings['DB_DATABASE'] = $this->ask('Database name: ');
$settings['DB_PORT'] = $this->ask('Database port [3306]: ') ?? 3306;
$settings['DB_HOST'] = $this->ask('Database hostname [localhost]: ') ?? 'localhost';
$settings['DB_USERNAME'] = $this->ask('Database username');
$settings['DB_PASSWORD'] = $this->secret('Database password (Input won\'t be seen)');
$settings['DB_DATABASE'] = $this->ask('Database name');
$settings['DB_PORT'] = $this->ask('Database port');
$settings['DB_HOST'] = $this->ask('Database hostname');
$this->info('== Antispam Settings (2/6) (Recaptcha v2) ==');
$settings['RECAPTCHA_SITE_KEY'] = $this->ask('Site key: ');
$settings['RECAPTCHA_PRIVATE_KEY'] = $this->ask('Private site key: ');
$settings['RECAPTCHA_SITE_KEY'] = $this->ask('Site key');
$settings['RECAPTCHA_PRIVATE_KEY'] = $this->ask('Private site key');
$this->info('== IP Geolocation Settings (3/6) (refer to README.md) ==');
$settings['APIGEO_API_KEY'] = $this->ask('API Key: ');
$settings['APIGEO_API_KEY'] = $this->ask('API Key');
$this->info('== Notification Settings (4/6) (Email) ==');
$settings['MAIL_USERNAME'] = $this->ask('SMTP Username: ');
$settings['MAIL_PASSWORD'] = $this->secret('SMTP Password (Input won\'t be seen): ');
$settings['MAIL_PORT'] = $this->ask('SMTP Server Port [25]: ') ?? 25;
$settings['MAIL_HOST'] = $this->ask('SMTP Server Hostname: ');
$settings['MAIL_USERNAME'] = $this->ask('SMTP Username');
$settings['MAIL_PASSWORD'] = $this->secret('SMTP Password (Input won\'t be seen)');
$settings['MAIL_PORT'] = $this->ask('SMTP Server Port');
$settings['MAIL_HOST'] = $this->ask('SMTP Server Hostname');
$this->info('== Notification Settings (5/6) (Slack) ==');
$settings['SLACK_INTEGRATION_WEBHOOK'] = $this->ask('Integration webhook URL: ');
$settings['SLACK_INTEGRATION_WEBHOOK'] = $this->ask('Integration webhook URL');
$this->info('== Web Settings (6/6) ==');
$settings['APP_URL'] = $this->ask('Application\'s URL [http://localhost]: ') ?? 'http://localhost';
$settings['APP_URL'] = $this->ask('Application\'s URL');
} while(!$this->confirm('Are you sure you want to save these settings? You can always go back and try again.'));
foreach($settings as $keyname => $value)
{
$this->callSilent('environment:modify', [
'key' => $keyname,
'value' => $value
$keyname,
$value
]);
}

View File

@ -5,4 +5,5 @@ sleep 3
composer install
echo "Full installation starting!"
sleep 3
php artisan application:install