diff --git a/backend/windmill-worker/src/ansible_executor.rs b/backend/windmill-worker/src/ansible_executor.rs index fe8531d0ac..dcc288f108 100644 --- a/backend/windmill-worker/src/ansible_executor.rs +++ b/backend/windmill-worker/src/ansible_executor.rs @@ -433,6 +433,10 @@ fi .args(cmd_args) .stdout(Stdio::piped()) .stderr(Stdio::piped()); + + #[cfg(windows)] + ansible_cmd.env("USERPROFILE", crate::USERPROFILE_ENV.as_str()); + start_child_process(ansible_cmd, ANSIBLE_PLAYBOOK_PATH.as_str()).await? }; @@ -565,13 +569,9 @@ async fn create_file_resources( get_resource_or_variable_content(client, &file_res.resource_path, job_id.to_string()) .await?; let path = file_res.target_path.clone(); - let validated_path = write_file_at_user_defined_location( - job_dir, - path.as_str(), - &r, - file_res.mode, - ) - .map_err(|e| anyhow!("Couldn't write text file at {}: {}", path, e))?; + let validated_path = + write_file_at_user_defined_location(job_dir, path.as_str(), &r, file_res.mode) + .map_err(|e| anyhow!("Couldn't write text file at {}: {}", path, e))?; nsjail_mounts.push( define_nsjail_mount(job_dir, &validated_path) diff --git a/backend/windmill-worker/src/bash_executor.rs b/backend/windmill-worker/src/bash_executor.rs index 2582f98b58..680831e990 100644 --- a/backend/windmill-worker/src/bash_executor.rs +++ b/backend/windmill-worker/src/bash_executor.rs @@ -522,7 +522,8 @@ $env:PSModulePath = \"{};$PSModulePathBackup\"", std::env::var("PATHEXT").unwrap_or_else(|_| { String::from(".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL") }), - ); + ) + .env("USERPROFILE", crate::USERPROFILE_ENV.as_str()); } cmd.spawn()? diff --git a/backend/windmill-worker/src/bun_executor.rs b/backend/windmill-worker/src/bun_executor.rs index a7d92874e1..707a668b84 100644 --- a/backend/windmill-worker/src/bun_executor.rs +++ b/backend/windmill-worker/src/bun_executor.rs @@ -1522,6 +1522,15 @@ pub async fn get_common_bun_proc_envs(base_internal_url: Option<&str>) -> HashMa bun_envs.insert(String::from("NODE_PATH"), node_path.to_string()); } + #[cfg(windows)] + { + bun_envs.insert("SystemRoot".to_string(), crate::SYSTEM_ROOT.to_string()); + bun_envs.insert( + "USERPROFILE".to_string(), + crate::USERPROFILE_ENV.to_string(), + ); + } + return bun_envs; } diff --git a/backend/windmill-worker/src/deno_executor.rs b/backend/windmill-worker/src/deno_executor.rs index 88f6733d1a..54a2631ccd 100644 --- a/backend/windmill-worker/src/deno_executor.rs +++ b/backend/windmill-worker/src/deno_executor.rs @@ -84,6 +84,15 @@ async fn get_common_deno_proc_envs( if DENO_TLS_CA_STORE.len() > 0 { deno_envs.insert(String::from("DENO_TLS_CA_STORE"), DENO_TLS_CA_STORE.clone()); } + + #[cfg(windows)] + { + deno_envs.insert("SystemRoot".to_string(), crate::SYSTEM_ROOT.to_string()); + deno_envs.insert( + "USERPROFILE".to_string(), + crate::USERPROFILE_ENV.to_string(), + ); + } return deno_envs; } diff --git a/backend/windmill-worker/src/go_executor.rs b/backend/windmill-worker/src/go_executor.rs index 470e647383..ea06f82c5a 100644 --- a/backend/windmill-worker/src/go_executor.rs +++ b/backend/windmill-worker/src/go_executor.rs @@ -194,6 +194,10 @@ func Run(req Req) (interface{{}}, error){{ .args(vec!["build", "main.go"]) .stdout(Stdio::piped()) .stderr(Stdio::piped()); + + #[cfg(windows)] + build_go_cmd.env("USERPROFILE", crate::USERPROFILE_ENV.as_str()); + let build_go_process = start_child_process(build_go_cmd, GO_PATH.as_str()).await?; handle_child( &job.id, @@ -293,6 +297,9 @@ func Run(req Req) (interface{{}}, error){{ run_go.env("GOPROXY", goproxy); } + #[cfg(windows)] + run_go.env("USERPROFILE", crate::USERPROFILE_ENV.as_str()); + run_go.stdout(Stdio::piped()).stderr(Stdio::piped()); start_child_process(run_go, compiled_executable_name).await? }; diff --git a/backend/windmill-worker/src/python_executor.rs b/backend/windmill-worker/src/python_executor.rs index 4127af7f7b..3d1ba79def 100644 --- a/backend/windmill-worker/src/python_executor.rs +++ b/backend/windmill-worker/src/python_executor.rs @@ -749,8 +749,10 @@ mount {{ .stdout(Stdio::piped()) .stderr(Stdio::piped()); - #[cfg(windows)] - python_cmd.env("SystemRoot", SYSTEM_ROOT.as_str()); + #[cfg(windows)] { + python_cmd.env("SystemRoot", SYSTEM_ROOT.as_str()); + python_cmd.env("USERPROFILE", crate::USERPROFILE_ENV.as_str()); + } start_child_process(python_cmd, PYTHON_PATH.as_str()).await? }; @@ -1277,6 +1279,7 @@ async fn spawn_uv_install( .envs(envs) .envs(PROXY_ENVS.clone()) .env("SystemRoot", SYSTEM_ROOT.as_str()) + .env("USERPROFILE", crate::USERPROFILE_ENV.as_str()) .env( "TMP", std::env::var("TMP").unwrap_or_else(|_| String::from("/tmp")), diff --git a/backend/windmill-worker/src/rust_executor.rs b/backend/windmill-worker/src/rust_executor.rs index 9391fd9a69..3f5ff3d18e 100644 --- a/backend/windmill-worker/src/rust_executor.rs +++ b/backend/windmill-worker/src/rust_executor.rs @@ -209,6 +209,7 @@ pub async fn build_rust_crate( "TMP", std::env::var("TMP").unwrap_or_else(|_| "C:\\tmp".to_string()), ); + build_rust_cmd.env("USERPROFILE", crate::USERPROFILE_ENV.as_str()); } let build_rust_process = start_child_process(build_rust_cmd, CARGO_PATH.as_str()).await?; @@ -403,6 +404,7 @@ pub async fn handle_rust_job( #[cfg(windows)] run_rust.env("SystemRoot", SYSTEM_ROOT.as_str()); + run_rust.env("USERPROFILE", crate::USERPROFILE_ENV.as_str()); start_child_process(run_rust, compiled_executable_name).await? }; diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index f0fdc93885..b47f63e4c3 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -368,6 +368,7 @@ lazy_static::lazy_static! { pub static ref NSJAIL_PATH: String = std::env::var("NSJAIL_PATH").unwrap_or_else(|_| "nsjail".to_string()); pub static ref PATH_ENV: String = std::env::var("PATH").unwrap_or_else(|_| String::new()); pub static ref HOME_ENV: String = std::env::var("HOME").unwrap_or_else(|_| "/tmp".to_string()); + pub static ref NODE_PATH: Option = std::env::var("NODE_PATH").ok(); pub static ref TZ_ENV: String = std::env::var("TZ").unwrap_or_else(|_| String::new()); @@ -421,12 +422,16 @@ lazy_static::lazy_static! { .and_then(|x| x.parse().ok()) .unwrap_or(false); + pub static ref USERPROFILE_ENV: String = std::env::var("USERPROFILE").unwrap_or_else(|_| "/tmp".to_string()); + + } #[cfg(windows)] lazy_static::lazy_static! { pub static ref SYSTEM_ROOT: String = std::env::var("SystemRoot").unwrap_or_else(|_| "C:\\Windows".to_string()); + pub static ref USERPROFILE_ENV: String = std::env::var("USERPROFILE").unwrap_or_else(|_| "/tmp".to_string()); } //only matter if CLOUD_HOSTED