diff --git a/config/task-runner.php b/config/task-runner.php index dce6a31..9e6ccf9 100644 --- a/config/task-runner.php +++ b/config/task-runner.php @@ -31,4 +31,7 @@ 'enabled' => env('TASK_RUNNER_PERSISTENT_FAKE', false), 'storage_root' => storage_path('framework/testing/task-runner'), ], + + // The connection timeout for connecting to a remote server in seconds. + 'connection_timeout' => 10, ]; diff --git a/src/RemoteProcessRunner.php b/src/RemoteProcessRunner.php index 9b50166..6699348 100644 --- a/src/RemoteProcessRunner.php +++ b/src/RemoteProcessRunner.php @@ -14,7 +14,8 @@ class RemoteProcessRunner public function __construct( private Connection $connection, - private ProcessRunner $processRunner + private ProcessRunner $processRunner, + private int $connectionTimeout = 10, ) { } @@ -46,7 +47,7 @@ public function verifyScriptDirectoryExists(): self { $output = $this->run( script: 'mkdir -p '.$this->connection->scriptPath, - timeout: 10 + timeout: $this->connectionTimeout, ); if ($output->isTimeout() || $output->getExitCode() !== 0) { @@ -96,7 +97,7 @@ public function runUploadedScriptInBackground(string $script, string $output, in timeout: $timeout, ); - return $this->run($script, 10); + return $this->run($script, $this->connectionTimeout); } /** @@ -141,6 +142,7 @@ private function cleanupOutput(ProcessOutput $processOutput): ProcessOutput * * @param string $filename * @param string $contents + * @param int $timeout */ public function upload($filename, $contents): self { @@ -156,7 +158,7 @@ public function upload($filename, $contents): self ]); $output = $this->processRunner->run( - FacadesProcess::command($command)->timeout(10) + FacadesProcess::command($command)->timeout($this->connectionTimeout) ); if ($output->isTimeout() || $output->getExitCode() !== 0) { diff --git a/src/TaskDispatcher.php b/src/TaskDispatcher.php index 2858654..fd38ae0 100644 --- a/src/TaskDispatcher.php +++ b/src/TaskDispatcher.php @@ -60,7 +60,7 @@ public function run(PendingTask $pendingTask): ?ProcessOutput /** * Runs the given task in the background. * - * @return void + * @return ProcessOutput */ private function runInBackground(PendingTask $pendingTask) { @@ -71,7 +71,7 @@ private function runInBackground(PendingTask $pendingTask) ); return $this->processRunner->run( - FacadesProcess::command($command)->timeout(10) + FacadesProcess::command($command)->timeout(config('task-runner.connection_timeout', 10)) ); } @@ -80,10 +80,10 @@ private function runInBackground(PendingTask $pendingTask) */ private function runOnConnection(PendingTask $pendingTask): ProcessOutput { - /** @var RemoteProcessRunner */ + /** @var RemoteProcessRunner $runner */ $runner = app()->makeWith( RemoteProcessRunner::class, - ['connection' => $pendingTask->getConnection(), 'processRunner' => $this->processRunner] + ['connection' => $pendingTask->getConnection(), 'processRunner' => $this->processRunner, 'connectionTimeout' => config('task-runner.connection_timeout', 10)] ); if ($outputCallbable = $pendingTask->getOnOutput()) {