(feat): auto-detect cli params to force non-interactive installer

This commit is contained in:
Jake Barnby
2026-03-25 13:52:58 +13:00
parent 7fcc640652
commit dc6b2ce3aa
+19 -2
View File
@@ -211,7 +211,8 @@ class Install extends Action
}
// If interactive and web mode enabled, start web server
if ($interactive === 'Y' && Console::isInteractive()) {
// Skip the web installer when explicit CLI params are provided
if ($interactive === 'Y' && Console::isInteractive() && !$this->hasExplicitCliParams()) {
Console::success('Starting web installer...');
Console::info('Open your browser at: http://localhost:' . InstallerServer::INSTALLER_WEB_PORT);
Console::info('Press Ctrl+C to cancel installation');
@@ -767,7 +768,7 @@ class Install extends Action
'email' => $email,
'domain' => $domain,
'database' => $database,
'hostIp' => $hostIp !== $domain ? $hostIp : null,
'ip' => $hostIp !== $domain ? $hostIp : null,
'os' => php_uname('s') . ' ' . php_uname('r'),
'arch' => php_uname('m'),
'cpus' => ((int) trim((string) \shell_exec('nproc'))) ?: null,
@@ -1261,6 +1262,22 @@ class Install extends Action
$this->hostPath = $this->getInstallerHostPath();
}
/**
* Check if any installer-specific CLI params were explicitly passed.
* When params like --database or --http-port are provided, the user
* intends to run in CLI mode rather than launching the web installer.
*/
private function hasExplicitCliParams(): bool
{
$argv = $_SERVER['argv'] ?? [];
foreach ($argv as $arg) {
if (\str_starts_with($arg, '--') && !\str_starts_with($arg, '--interactive')) {
return true;
}
}
return false;
}
/**
* Detect the database adapter from a pre-1.9.0 compose file by
* checking which DB service exists or reading _APP_DB_HOST.