From 713fb6eb4e8bfccf43a4246505d5ea5c06466023 Mon Sep 17 00:00:00 2001 From: Dotta Date: Wed, 13 May 2026 13:01:39 -0500 Subject: [PATCH] fix(plugin): share kubernetes shell quoting helper --- .../plugins/sandbox-providers/kubernetes/src/plugin.ts | 5 +---- .../plugins/sandbox-providers/kubernetes/src/pod-exec.ts | 7 ++----- .../sandbox-providers/kubernetes/src/shell-utils.ts | 3 +++ 3 files changed, 6 insertions(+), 9 deletions(-) create mode 100644 packages/plugins/sandbox-providers/kubernetes/src/shell-utils.ts diff --git a/packages/plugins/sandbox-providers/kubernetes/src/plugin.ts b/packages/plugins/sandbox-providers/kubernetes/src/plugin.ts index 321a0ea4..5d0321d8 100644 --- a/packages/plugins/sandbox-providers/kubernetes/src/plugin.ts +++ b/packages/plugins/sandbox-providers/kubernetes/src/plugin.ts @@ -32,6 +32,7 @@ import { SandboxCrTimeoutError, } from "./sandbox-cr-orchestrator.js"; import { execInPod } from "./pod-exec.js"; +import { shellQuoteArg } from "./shell-utils.js"; import { deriveCompanySlug, deriveNamespaceName, @@ -113,10 +114,6 @@ export function extractAdapterEnvFromProcess( return out; } -function shellQuoteArg(arg: string): string { - return "'" + arg.replace(/'/g, "'\\''") + "'"; -} - export function buildSandboxExecCommand( params: Pick, ): string[] { diff --git a/packages/plugins/sandbox-providers/kubernetes/src/pod-exec.ts b/packages/plugins/sandbox-providers/kubernetes/src/pod-exec.ts index 79604352..092bd491 100644 --- a/packages/plugins/sandbox-providers/kubernetes/src/pod-exec.ts +++ b/packages/plugins/sandbox-providers/kubernetes/src/pod-exec.ts @@ -13,6 +13,7 @@ import { Exec } from "@kubernetes/client-node"; import { PassThrough } from "node:stream"; import type { KubeConfig } from "@kubernetes/client-node"; +import { shellQuoteArg } from "./shell-utils.js"; type WebSocketLike = { close(): void; @@ -27,10 +28,6 @@ export interface ExecInPodResult { stderr: string; } -function shQuoteArg(arg: string): string { - return "'" + arg.replace(/'/g, "'\\''") + "'"; -} - export async function execInPod( kc: KubeConfig, namespace: string, @@ -50,7 +47,7 @@ export async function execInPod( : null; const stdinStream: PassThrough | null = stdinPayload ? new PassThrough() : null; const effectiveCommand = stdinPayload - ? ["/bin/sh", "-c", `head -c ${stdinPayload.length} | ${command.map(shQuoteArg).join(" ")}`] + ? ["/bin/sh", "-c", `head -c ${stdinPayload.length} | ${command.map(shellQuoteArg).join(" ")}`] : command; let stdoutData = ""; diff --git a/packages/plugins/sandbox-providers/kubernetes/src/shell-utils.ts b/packages/plugins/sandbox-providers/kubernetes/src/shell-utils.ts new file mode 100644 index 00000000..202b3750 --- /dev/null +++ b/packages/plugins/sandbox-providers/kubernetes/src/shell-utils.ts @@ -0,0 +1,3 @@ +export function shellQuoteArg(arg: string): string { + return "'" + arg.replace(/'/g, "'\\''") + "'"; +}