diff --git a/backend/src/main.rs b/backend/src/main.rs index 82e5451c2b..b30b5c093f 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -800,10 +800,20 @@ Windmill Community Edition {GIT_VERSION} reload_instance_python_version_setting(&db).await }, NPM_CONFIG_REGISTRY_SETTING => { - reload_npm_config_registry_setting(&db).await + if worker_mode { + tracing::info!("NPM config registry setting changed, restarting"); + send_delayed_killpill(&tx, 5, "npm config registry setting change").await; + } else { + reload_npm_config_registry_setting(&db).await + } }, BUNFIG_INSTALL_SCOPES_SETTING => { - reload_bunfig_install_scopes_setting(&db).await + if worker_mode { + tracing::info!("Bunfig install scopes setting changed, restarting"); + send_delayed_killpill(&tx, 5, "bunfig install scopes setting change").await; + } else { + reload_bunfig_install_scopes_setting(&db).await + } }, NUGET_CONFIG_SETTING => { reload_nuget_config_setting(&db).await diff --git a/backend/windmill-worker/src/bun_executor.rs b/backend/windmill-worker/src/bun_executor.rs index ede17da758..f1d658bd68 100644 --- a/backend/windmill-worker/src/bun_executor.rs +++ b/backend/windmill-worker/src/bun_executor.rs @@ -107,13 +107,13 @@ pub async fn gen_bun_lockfile( raw_deps: Option, npm_mode: bool, occupancy_metrics: &mut Option<&mut OccupancyMetrics>, + has_bunfig: bool, ) -> Result> { let common_bun_proc_envs: HashMap = get_common_bun_proc_envs(None).await; let mut empty_deps = false; if let Some(raw_deps) = raw_deps { - gen_bunfig(job_dir).await?; write_file(job_dir, "package.json", raw_deps.as_str())?; } else { let _ = write_file( @@ -137,8 +137,6 @@ pub async fn gen_bun_lockfile( ), )?; - gen_bunfig(job_dir).await?; - let mut child_cmd = Command::new(&*BUN_PATH); child_cmd .current_dir(job_dir) @@ -192,6 +190,7 @@ pub async fn gen_bun_lockfile( common_bun_proc_envs, npm_mode, occupancy_metrics, + has_bunfig, ) .await?; } else { @@ -231,7 +230,7 @@ pub async fn gen_bun_lockfile( } } -async fn gen_bunfig(job_dir: &str) -> Result<()> { +pub async fn gen_bunfig(job_dir: &str) -> Result { let registry = NPM_CONFIG_REGISTRY.read().await.clone(); let bunfig_install_scopes = BUNFIG_INSTALL_SCOPES.read().await.clone(); if registry.is_some() || bunfig_install_scopes.is_some() { @@ -263,9 +262,11 @@ registry = {} .unwrap_or("".to_string()) ); tracing::debug!("Writing following bunfig.toml: {bunfig_toml}"); - let _ = write_file(&job_dir, "bunfig.toml", &bunfig_toml)?; + write_file(&job_dir, "bunfig.toml", &bunfig_toml)?; + Ok(true) + } else { + Ok(false) } - Ok(()) } pub async fn install_bun_lockfile( @@ -279,6 +280,7 @@ pub async fn install_bun_lockfile( common_bun_proc_envs: HashMap, npm_mode: bool, occupancy_metrics: &mut Option<&mut OccupancyMetrics>, + has_bunfig: bool, ) -> Result<()> { let mut child_cmd = Command::new(if npm_mode { &*NPM_PATH } else { &*BUN_PATH }); child_cmd @@ -799,6 +801,7 @@ pub async fn handle_bun_job( shared_mount: &str, new_args: &mut Option>>, occupancy_metrics: &mut OccupancyMetrics, + has_bunfig: bool, ) -> error::Result> { let mut annotation = windmill_common::worker::TypeScriptAnnotations::parse(inner_content); @@ -891,6 +894,7 @@ pub async fn handle_bun_job( common_bun_proc_envs.clone(), annotation.npm, &mut Some(occupancy_metrics), + has_bunfig, ) .await?; } @@ -913,6 +917,7 @@ pub async fn handle_bun_job( None, annotation.npm, &mut Some(occupancy_metrics), + has_bunfig, ) .await?; @@ -1545,6 +1550,7 @@ pub async fn start_worker( common_bun_proc_envs.clone(), annotation.npm, &mut None, + has_bunfig, ) .await?; tracing::info!("dedicated worker requirements installed: {reqs}"); @@ -1566,6 +1572,7 @@ pub async fn start_worker( None, annotation.npm, &mut None, + has_bunfig, ) .await?; } diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index 5e647dd7ce..e189ae262a 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -822,13 +822,18 @@ pub async fn run_worker( .expect("could not create initial worker dir"); if !*DISABLE_NSJAIL { - let _ = write_file( + write_file( &worker_dir, "download_deps.py.sh", INCLUDE_DEPS_PY_SH_CONTENT, - ); + ) + .map_err(|e| anyhow::anyhow!("Failed to write download_deps.py.sh: {e}"))?; } + let has_bunfig = crate::bun_executor::gen_bunfig(&worker_dir) + .await + .map_err(|e| anyhow::anyhow!("Failed to generate bunfig: {e}"))?; + let mut last_ping = Instant::now() - Duration::from_secs(NUM_SECS_PING + 1); update_ping(hostname, &worker_name, ip, db).await; @@ -2723,6 +2728,7 @@ mount {{ &shared_mount, new_args, occupancy_metrics, + has_bunfig, ) .await }