From af7de56bfd35f461948a36ae6cfaed50a125b414 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 10 Oct 2026 13:48:35 +0200 Subject: [PATCH] fix: keep the forced python version ahead of the stored one when a worker reads it late Co-Authored-By: Claude Opus 5.5 --- backend/windmill-worker/src/python_versions.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/backend/windmill-worker/src/python_versions.rs b/backend/windmill-worker/src/python_versions.rs index 2166383df7..c64eb1e796 100644 --- a/backend/windmill-worker/src/python_versions.rs +++ b/backend/windmill-worker/src/python_versions.rs @@ -263,11 +263,17 @@ impl PyV { // written. Jobs only exist once it is, so reading it here settles that worker for good. if setting.is_none() { if let Some(Connection::Sql(db)) = conn.as_ref() { - setting = load_value_from_global_settings(db, INSTANCE_PYTHON_VERSION_SETTING) - .await - .ok() - .flatten() - .and_then(|v| serde_json::from_value::(v).ok()); + // Same precedence as the settings load: forced value, stored value, environment. + let env = |name: &str| std::env::var(name).ok().filter(|v| !v.is_empty()); + setting = match env("FORCE_INSTANCE_PYTHON_VERSION") { + Some(forced) => Some(forced), + None => load_value_from_global_settings(db, INSTANCE_PYTHON_VERSION_SETTING) + .await + .ok() + .flatten() + .and_then(|v| serde_json::from_value::(v).ok()) + .or_else(|| env("INSTANCE_PYTHON_VERSION")), + }; if setting.is_some() { *INSTANCE_PYTHON_VERSION.write().await = setting.clone(); }