diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf52259d..b7cbdfe7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -374,8 +374,8 @@ jobs: # Run Rust queue latency test echo "Running CI Queue Size Latest Data Rust Test" - dora build tests/queue_size_latest_data_rust/dataflow.yaml - dora run tests/queue_size_latest_data_rust/dataflow.yaml + dora build tests/queue_size_latest_data_rust/dataflow.yaml --uv + dora run tests/queue_size_latest_data_rust/dataflow.yaml --uv - name: "Test CLI (C)" timeout-minutes: 30 diff --git a/binaries/daemon/src/spawn.rs b/binaries/daemon/src/spawn.rs index 609f49e4..af326530 100644 --- a/binaries/daemon/src/spawn.rs +++ b/binaries/daemon/src/spawn.rs @@ -274,16 +274,31 @@ pub async fn spawn_node( ]); command } else { - let python = get_python_path() - .context("Could not find python path when spawning runtime node")?; - let mut command = tokio::process::Command::new(python); + let mut cmd = if uv { + let mut cmd = tokio::process::Command::new("uv"); + cmd.arg("run"); + cmd.arg("python"); + tracing::info!( + "spawning: uv run python -uc import dora; dora.start_runtime() # {}", + node.id + ); + cmd + } else { + let python = get_python_path() + .wrap_err("Could not find python path when spawning custom node")?; + tracing::info!( + "spawning: python -uc import dora; dora.start_runtime() # {}", + node.id + ); + let cmd = tokio::process::Command::new(python); + cmd + }; // Force python to always flush stdout/stderr buffer - command.arg("-u"); - command.args([ + cmd.args([ "-c", format!("import dora; dora.start_runtime() # {}", node.id).as_str(), ]); - command + cmd } } else if python_operators.is_empty() && other_operators { let mut cmd = tokio::process::Command::new(