feat: enhance prerequisite validation to return detailed results

This commit is contained in:
Andras Bacsai
2025-11-21 13:14:48 +01:00
parent 01957f2752
commit 29135e00ba
7 changed files with 95 additions and 21 deletions

View File

@@ -11,17 +11,30 @@ class ValidatePrerequisites
public string $jobQueue = 'high';
public function handle(Server $server): bool
/**
* Validate that required commands are available on the server.
*
* @return array{success: bool, missing: array<string>, found: array<string>}
*/
public function handle(Server $server): array
{
$requiredCommands = ['git', 'curl', 'jq'];
$missing = [];
$found = [];
foreach ($requiredCommands as $cmd) {
$found = instant_remote_process(["command -v {$cmd}"], $server, false);
if (! $found) {
return false;
$result = instant_remote_process(["command -v {$cmd}"], $server, false);
if (! $result) {
$missing[] = $cmd;
} else {
$found[] = $cmd;
}
}
return true;
return [
'success' => empty($missing),
'missing' => $missing,
'found' => $found,
];
}
}

View File

@@ -45,9 +45,10 @@ class ValidateServer
throw new \Exception($this->error);
}
$prerequisitesInstalled = $server->validatePrerequisites();
if (! $prerequisitesInstalled) {
$this->error = 'Prerequisites (git, curl, jq) are not installed. Please install them before continuing or use the validation with installation endpoint.';
$validationResult = $server->validatePrerequisites();
if (! $validationResult['success']) {
$missingCommands = implode(', ', $validationResult['missing']);
$this->error = "Prerequisites ({$missingCommands}) are not installed. Please install them before continuing or use the validation with installation endpoint.";
$server->update([
'validation_logs' => $this->error,
]);