diff --git a/internal/node/node.bzl b/internal/node/node.bzl index 6bf31c2a2e..18d7ce432a 100644 --- a/internal/node/node.bzl +++ b/internal/node/node.bzl @@ -204,7 +204,7 @@ def _nodejs_binary_impl(ctx, data = [], runfiles = [], expanded_args = []): # Add all env vars from the ctx attr for [key, value] in ctx.attr.env.items(): - env_vars += "export %s=%s\n" % (key, ctx.expand_make_variables("env", expand_location_into_runfiles(ctx, value, data), {})) + env_vars += "export %s=\"%s\"\n" % (key, ctx.expand_make_variables("env", expand_location_into_runfiles(ctx, value, data), {})) # While we can derive the workspace from the pwd when running locally # because it is in the execroot path `execroot/my_wksp`, on RBE the diff --git a/internal/node/test/BUILD.bazel b/internal/node/test/BUILD.bazel index b4e1a324cb..b7bf8823cd 100644 --- a/internal/node/test/BUILD.bazel +++ b/internal/node/test/BUILD.bazel @@ -410,6 +410,7 @@ nodejs_binary( env = { "LOC": "$(location :dump_build_env.js)", "SOME_TEST_ENV": "$(SOME_TEST_ENV)", + "BACKSLASHES": "C:\\some path\\on\\windows.exe", }, ) diff --git a/internal/node/test/env.spec.js b/internal/node/test/env.spec.js index 4a8a772abb..455a864386 100644 --- a/internal/node/test/env.spec.js +++ b/internal/node/test/env.spec.js @@ -123,4 +123,9 @@ describe('launcher.sh environment', function() { const env = require(runfiles.resolvePackageRelative('dump_build_env_attr.json')); expect(env['SOME_TEST_ENV']).toBe('some_value') }); + + it('should correctly pass environment variables with backslashes', function() { + const env = require(runfiles.resolvePackageRelative('dump_build_env_attr.json')); + expect(env['BACKSLASHES']).toBe('C:\\some path\\on\\windows.exe'); + }); });