diff --git a/docs/extending/plugins.md b/docs/extending/plugins.md index 7e3e8810..2def2fd5 100644 --- a/docs/extending/plugins.md +++ b/docs/extending/plugins.md @@ -86,8 +86,11 @@ Built-in `project:*` commands always take precedence. A plugin whose `@command` Plugins run on the **host machine** via `PluginProxyCommand`. The plugin script is executed directly as a process with: -- A 300-second timeout -- TTY support when the terminal supports it (interactive commands work) +- No timeout -- plugins may run arbitrarily long (deploys, imports, shells). + You watch the output and press Ctrl-C to abort if it looks stuck. +- TTY support when the terminal supports it -- the plugin keeps the real + terminal, so colours and interactive prompts (`docker exec -it`, `read`, ...) + work as usual. - Arguments appended to the script invocation - Exit code forwarded to the caller diff --git a/src/Plugin/PluginProxyCommand.php b/src/Plugin/PluginProxyCommand.php index a780e415..28baa076 100644 --- a/src/Plugin/PluginProxyCommand.php +++ b/src/Plugin/PluginProxyCommand.php @@ -64,7 +64,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int /** @var list $command */ $command = array_merge([$this->plugin->scriptPath], is_array($args) ? array_values($args) : []); - $process = $this->processFactory->create($command, null, 300); + // No timeout: plugins may run arbitrarily long (deploys, imports, + // shells). The developer watches the output and aborts with Ctrl-C. + $process = $this->processFactory->create($command, null, null); if (Process::isTtySupported() && $output instanceof ConsoleOutputInterface) { $process->setTty(true);