From 7b743012d60ac0ecebd6394fe960cd68dcda17e4 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 26 Jan 2026 14:30:45 +0000 Subject: [PATCH] fix: add SSL_CERT_FILE to python install --- backend/windmill-worker/src/python_executor.rs | 9 +++++---- backend/windmill-worker/src/python_versions.rs | 11 ++++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/backend/windmill-worker/src/python_executor.rs b/backend/windmill-worker/src/python_executor.rs index df0697ce37..9cf4f7046d 100644 --- a/backend/windmill-worker/src/python_executor.rs +++ b/backend/windmill-worker/src/python_executor.rs @@ -63,8 +63,8 @@ lazy_static::lazy_static! { static ref NON_ALPHANUM_CHAR: Regex = regex::Regex::new(r"[^0-9A-Za-z=.-]").unwrap(); static ref TRUSTED_HOST: Option = var("PY_TRUSTED_HOST").ok().or(var("PIP_TRUSTED_HOST").ok()); - static ref INDEX_CERT: Option = var("PY_INDEX_CERT").ok().or(var("PIP_INDEX_CERT").ok()); - static ref NATIVE_CERT: bool = var("PY_NATIVE_CERT").ok().or(var("UV_NATIVE_TLS").ok()).map(|flag| flag == "true").unwrap_or(false); + pub static ref INDEX_CERT: Option = var("PY_INDEX_CERT").ok().or(var("PIP_INDEX_CERT").ok()); + pub static ref NATIVE_CERT: bool = var("PY_NATIVE_CERT").ok().or(var("UV_NATIVE_TLS").ok()).map(|flag| flag == "true").unwrap_or(false); static ref RELATIVE_IMPORT_REGEX: Regex = Regex::new(r#"(import|from)\s(((u|f)\.)|\.)"#).unwrap(); @@ -130,10 +130,11 @@ use crate::{ build_command_with_isolation, create_args_and_out_file, get_reserved_variables, read_file, read_result, start_child_process, OccupancyMetrics, StreamNotifier, DEV_CONF_NSJAIL, }, + get_proxy_envs_for_lang, handle_child::handle_child, worker_utils::ping_job_status, PyV, DISABLE_NSJAIL, DISABLE_NUSER, HOME_ENV, NSJAIL_PATH, PATH_ENV, PIP_EXTRA_INDEX_URL, - PIP_INDEX_URL, PROXY_ENVS, PY_INSTALL_DIR, TRACING_PROXY_CA_CERT_PATH, TZ_ENV, UV_CACHE_DIR, get_proxy_envs_for_lang, + PIP_INDEX_URL, PROXY_ENVS, PY_INSTALL_DIR, TRACING_PROXY_CA_CERT_PATH, TZ_ENV, UV_CACHE_DIR, }; use windmill_common::client::AuthedClient; @@ -1996,7 +1997,7 @@ pub async fn handle_python_reqs( }, (_, _, exitstatus) = async { // See tokio::process::Child::wait_with_output() for more context - // Sometimes uv_install_proccess.wait() is not exiting if stderr is not awaited first + // Sometimes uv_install_proccess.wait() is not exiting if stderr is not awaited first (stderr_future.await, stdout_future.await, Box::into_pin(uv_install_proccess.wait()).await) } => match exitstatus { Ok(status) => if !status.success() { diff --git a/backend/windmill-worker/src/python_versions.rs b/backend/windmill-worker/src/python_versions.rs index 9cf74e9e0e..0b8d7da6ef 100644 --- a/backend/windmill-worker/src/python_versions.rs +++ b/backend/windmill-worker/src/python_versions.rs @@ -21,7 +21,7 @@ use windmill_queue::append_logs; use crate::{ common::{start_child_process, OccupancyMetrics}, handle_child::handle_child, - python_executor::{PYTHON_PATH, UV_PATH}, + python_executor::{INDEX_CERT, NATIVE_CERT, PYTHON_PATH, UV_PATH}, HOME_ENV, INSTANCE_PYTHON_VERSION, PATH_ENV, PROXY_ENVS, PY_INSTALL_DIR, WIN_ENVS, }; @@ -592,10 +592,19 @@ impl PyV { ); } + let mut vars: Vec<(&str, &str)> = vec![]; + if let Some(cert_path) = INDEX_CERT.as_ref() { + vars.push(("SSL_CERT_FILE", cert_path)); + } + + if *NATIVE_CERT { + vars.push(("UV_NATIVE_TLS", "true")); + } let output = child_cmd // .current_dir(job_dir) .env("HOME", HOME_ENV.to_string()) .env("PATH", PATH_ENV.to_string()) + .envs(vars) .args([ "python", "find",