From a2576ad24d854fe8becc52193766fcba6aaca7b1 Mon Sep 17 00:00:00 2001 From: Santosh Madugundi Date: Thu, 16 Apr 2026 14:37:45 -0700 Subject: [PATCH] fix(build): retry dist cleanup to avoid intermittent ENOTEMPTY in CI --- src/esbuild.mjs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/esbuild.mjs b/src/esbuild.mjs index aabacfcee9..6089ac3306 100644 --- a/src/esbuild.mjs +++ b/src/esbuild.mjs @@ -10,6 +10,24 @@ import { copyPaths, copyWasms, copyLocales, setupLocaleWatcher } from "@roo-code const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) +async function removeDirWithRetries(dirPath, retries = 5, retryDelayMs = 200) { + for (let attempt = 0; attempt <= retries; attempt++) { + try { + await fs.promises.rm(dirPath, { recursive: true, force: true }) + return + } catch (error) { + const isRetryable = error?.code === "ENOTEMPTY" || error?.code === "EBUSY" || error?.code === "EPERM" + const isLastAttempt = attempt === retries + + if (!isRetryable || isLastAttempt) { + throw error + } + + await new Promise((resolve) => globalThis.setTimeout(resolve, retryDelayMs * (attempt + 1))) + } + } +} + async function main() { const name = "extension" const production = process.argv.includes("--production") @@ -36,7 +54,7 @@ async function main() { if (fs.existsSync(distDir)) { console.log(`[${name}] Cleaning dist directory: ${distDir}`) - fs.rmSync(distDir, { recursive: true, force: true }) + await removeDirWithRetries(distDir) } /**