From eaacfebc976598431e7288d3f8385b285258078f Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Mon, 3 Mar 2025 13:11:13 -0800 Subject: [PATCH 1/3] devserver: skip unlink when possible --- js/private/js_run_devserver.mjs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/js/private/js_run_devserver.mjs b/js/private/js_run_devserver.mjs index ae9503124..568fe5bb3 100644 --- a/js/private/js_run_devserver.mjs +++ b/js/private/js_run_devserver.mjs @@ -219,9 +219,14 @@ async function syncRecursive(src, dst, sandbox, writePerm) { )} (${friendlyFileSize(lstat.size)})` ) } - if (exists) { + // unlink file if it exists, unless `writePerm` is true or we are not on Linux + // on macOS, and possibly other operating systems, you get errors if you copy + // over a file without the necessary permissions + let unlinkIsNecessary = writePerm || process.platform !== "linux"; + if (exists && unlinkIsNecessary) { await fs.promises.unlink(dst) - } else { + } + if (!exists) { // Intentionally synchronous; see comment on mkdirpSync mkdirpSync(path.dirname(dst)) } From 0337bcb22479a7494dc0443eed420b584cde63c1 Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Mon, 3 Mar 2025 13:11:13 -0800 Subject: [PATCH 2/3] devserver: skip unlink when possible --- js/private/js_run_devserver.mjs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/js/private/js_run_devserver.mjs b/js/private/js_run_devserver.mjs index 568fe5bb3..dc35e1b75 100644 --- a/js/private/js_run_devserver.mjs +++ b/js/private/js_run_devserver.mjs @@ -214,17 +214,9 @@ async function syncRecursive(src, dst, sandbox, writePerm) { if (process.env.JS_BINARY__LOG_DEBUG) { console.error( - `Syncing file ${src.slice( - RUNFILES_ROOT.length + 1 - )} (${friendlyFileSize(lstat.size)})` + `Syncing file ${src} (${friendlyFileSize(lstat.size)}) to ${dst}` ) - } - // unlink file if it exists, unless `writePerm` is true or we are not on Linux - // on macOS, and possibly other operating systems, you get errors if you copy - // over a file without the necessary permissions - let unlinkIsNecessary = writePerm || process.platform !== "linux"; - if (exists && unlinkIsNecessary) { - await fs.promises.unlink(dst) + console.error(`Dst exists: ${exists}`) } if (!exists) { // Intentionally synchronous; see comment on mkdirpSync From 4beb66df84b681eff3342a791a5f8d08807cd819 Mon Sep 17 00:00:00 2001 From: Dan Miller Date: Wed, 12 Mar 2025 16:03:20 -0700 Subject: [PATCH 3/3] Add `grant_sandbox_write_permissions = True` to all devserver targets --- e2e/js_run_devserver/src/BUILD.bazel | 2 ++ 1 file changed, 2 insertions(+) diff --git a/e2e/js_run_devserver/src/BUILD.bazel b/e2e/js_run_devserver/src/BUILD.bazel index 50cefe249..f26466335 100644 --- a/e2e/js_run_devserver/src/BUILD.bazel +++ b/e2e/js_run_devserver/src/BUILD.bazel @@ -121,6 +121,7 @@ js_run_devserver( ":web_files", ], log_level = "debug", + grant_sandbox_write_permissions = True, ) # Now the js_binary variant @@ -141,6 +142,7 @@ js_run_devserver( ], log_level = "debug", tool = ":simple_bin", + grant_sandbox_write_permissions = True, ) # Intentionally a js_library and not a js_binary to test that transitive npm are