diff --git a/Dockerfile b/Dockerfile index d5d4b8cc92..8f5ccc71e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -159,7 +159,7 @@ ENV PATH="${PATH}:/usr/local/go/bin" ENV GO_PATH=/usr/local/go/bin/go # Install UV -RUN curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.4.18/uv-installer.sh | sh +RUN curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.4.18/uv-installer.sh | sh && mv /root/.cargo/bin/uv /usr/local/bin/uv RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - RUN apt-get -y update && apt-get install -y curl nodejs awscli && apt-get clean \ diff --git a/backend/windmill-worker/src/python_executor.rs b/backend/windmill-worker/src/python_executor.rs index baefdfd9bc..df94b75964 100644 --- a/backend/windmill-worker/src/python_executor.rs +++ b/backend/windmill-worker/src/python_executor.rs @@ -29,6 +29,9 @@ lazy_static::lazy_static! { static ref PYTHON_PATH: String = std::env::var("PYTHON_PATH").unwrap_or_else(|_| "/usr/local/bin/python3".to_string()); + static ref UV_PATH: String = + std::env::var("UV_PATH").unwrap_or_else(|_| "/usr/local/bin/uv".to_string()); + static ref FLOCK_PATH: String = std::env::var("FLOCK_PATH").unwrap_or_else(|_| "/usr/bin/flock".to_string()); static ref NON_ALPHANUM_CHAR: Regex = regex::Regex::new(r"[^0-9A-Za-z=.-]").unwrap(); @@ -294,13 +297,19 @@ pub async fn uv_pip_compile( } tracing::debug!("uv args: {:?}", args); - let mut child_cmd = Command::new("uv"); + #[cfg(windows)] + let uv_cmd = "uv"; + + #[cfg(unix)] + let uv_cmd = UV_PATH.as_str(); + + let mut child_cmd = Command::new(uv_cmd); child_cmd .current_dir(job_dir) .args(args) .stdout(Stdio::piped()) .stderr(Stdio::piped()); - let child_process = start_child_process(child_cmd, "uv").await?; + let child_process = start_child_process(child_cmd, "/usr/local/bin/uv").await?; append_logs(&job_id, &w_id, logs, db).await; handle_child( job_id, diff --git a/frontend/src/lib/components/FlowJobResult.svelte b/frontend/src/lib/components/FlowJobResult.svelte index 0f0e4eebc0..cd83372389 100644 --- a/frontend/src/lib/components/FlowJobResult.svelte +++ b/frontend/src/lib/components/FlowJobResult.svelte @@ -22,6 +22,7 @@ export let workspaceId: string | undefined = undefined export let refreshLog: boolean = false export let durationStates: Writable> | undefined + export let downloadLogs = true let lastJobId: string | undefined = undefined let drawer: Drawer | undefined = undefined @@ -40,7 +41,6 @@ let logOffset = 0 async function getLogs() { if (jobId) { - const getUpdate = await JobService.getJobUpdates({ workspace: workspaceId ?? $workspaceStore!, id: jobId, @@ -85,6 +85,12 @@
- + diff --git a/frontend/src/lib/components/FlowStatusViewer.svelte b/frontend/src/lib/components/FlowStatusViewer.svelte index db0460a08c..c2d4ec1b3a 100644 --- a/frontend/src/lib/components/FlowStatusViewer.svelte +++ b/frontend/src/lib/components/FlowStatusViewer.svelte @@ -18,6 +18,7 @@ export let hideDownloadInGraph = false export let hideNodeDefinition = false export let hideJobId = false + export let hideDownloadLogs = false export let isOwner = false export let wideResults = false @@ -34,6 +35,7 @@ hideNodeDefinition, hideTimeline, hideJobId + hideDownloadLogs }) function loadOwner(path: string) { diff --git a/frontend/src/lib/components/FlowStatusViewerInner.svelte b/frontend/src/lib/components/FlowStatusViewerInner.svelte index 2dcc2a030b..6d0343220c 100644 --- a/frontend/src/lib/components/FlowStatusViewerInner.svelte +++ b/frontend/src/lib/components/FlowStatusViewerInner.svelte @@ -38,7 +38,8 @@ suspendStatus, hideDownloadInGraph, hideTimeline, - hideNodeDefinition + hideNodeDefinition, + hideDownloadLogs } = getContext('FlowStatusViewer') export let jobId: string @@ -669,6 +670,7 @@ result={job.result} logs={job.logs} durationStates={localDurationStatuses} + downloadLogs={!hideDownloadLogs} /> {/if} @@ -1026,6 +1028,7 @@ result={job['result']} logs={job.logs ?? ''} durationStates={localDurationStatuses} + downloadLogs={!hideDownloadLogs} /> {:else if selectedNode == 'start'} {#if job.args} @@ -1101,6 +1104,7 @@ tag={node.tag} logs={node.logs} durationStates={localDurationStatuses} + downloadLogs={!hideDownloadLogs} /> {:else}

limit) { return content.substring(content.length - limit) } @@ -148,7 +149,7 @@ - {#if jobId} + {#if jobId && download}