diff --git a/assets/build/patches/0003-fix_preinstall.mjs-to-avoid-removing-node_modules_dir.patch b/assets/build/patches/0003-fix_preinstall.mjs-to-avoid-removing-node_modules_dir.patch new file mode 100644 index 00000000..a5646ff3 --- /dev/null +++ b/assets/build/patches/0003-fix_preinstall.mjs-to-avoid-removing-node_modules_dir.patch @@ -0,0 +1,28 @@ +diff --git a/scripts/frontend/preinstall.mjs b/scripts/frontend/preinstall.mjs +index 09d980344eac..b1514e803b75 100644 +--- a/scripts/frontend/preinstall.mjs ++++ b/scripts/frontend/preinstall.mjs +@@ -1,6 +1,6 @@ + import { dirname, join } from 'node:path'; + import { fileURLToPath } from 'node:url'; +-import { readFile, rm } from 'node:fs/promises'; ++import { readdir, readFile, rm, stat } from 'node:fs/promises'; + + const ROOT_PATH = join(dirname(fileURLToPath(import.meta.url)), '..', '..'); + const NODE_MODULES = join(ROOT_PATH, 'node_modules'); +@@ -55,5 +55,14 @@ if (!arraysHaveSameItems(prevTopLevelPatterns, currentTopLevelPatterns)) { + console.error( + '[WARNING] package.json changed significantly. Removing node_modules to be sure there are no problems.', + ); +- await rm(NODE_MODULES, { recursive: true, force: true }); ++ // sameersbn/gitlab : avoid removing NODE_MODULES directly, iterate its content instead ++ // The path NODE_MODULES is declared as docker volume - always busy so that cannot be removed ++ // before iterating, check if the directory exists ++ const isDirectory = await stat(NODE_MODULES).then((stat) => stat.isDirectory()).catch(() => false); ++ if(isDirectory) { ++ for (const dir_ent of await readdir(NODE_MODULES, { withFileTypes: true})) { ++ const to_remove = join(NODE_MODULES, dir_ent.name); ++ await rm(to_remove, { recursive: true, force: true }); ++ } ++ } + }