diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 55eea24d23..2fd46fea08 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -14048,6 +14048,8 @@ components: type: string path: type: string + script_hash: + type: string args: $ref: "#/components/schemas/ScriptArgs" language: diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index be015f5929..1e5758d646 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -3095,16 +3095,17 @@ struct CancelJob { enum PreviewKind { Code, Identity, - Http, Noop, Bundle, Tarbundle, + ScriptHash, } #[derive(Deserialize)] struct Preview { content: Option, kind: Option, + script_hash: Option, path: Option, args: Option>>, language: Option, @@ -4851,7 +4852,10 @@ async fn run_preview_script( Some(PreviewKind::Identity) => JobPayload::Identity, Some(PreviewKind::Noop) => JobPayload::Noop, _ => JobPayload::Code(RawCode { - hash: None, + hash: preview + .script_hash + .as_ref() + .and_then(|s| windmill_common::scripts::to_i64(s).ok()), content: preview.content.unwrap_or_default(), path: preview.path, language: preview.language.unwrap_or(ScriptLang::Deno), diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index b92a3bc560..e8eff2f1cd 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -2456,16 +2456,22 @@ async fn handle_code_execution_job( _ => None, }; - arc_data = - preview.ok_or_else(|| Error::internal_err("expected preview".to_string()))?; - metadata = ScriptMetadata { - language: job.script_lang, - codebase, - envs: None, - schema: None, - schema_validator: None, - }; - (arc_data.as_ref(), &metadata) + if codebase.is_none() && job.runnable_id.is_some() { + (arc_data, arc_metadata) = + cache::script::fetch(conn, job.runnable_id.unwrap()).await?; + (arc_data.as_ref(), arc_metadata.as_ref()) + } else { + arc_data = + preview.ok_or_else(|| Error::internal_err("expected preview".to_string()))?; + metadata = ScriptMetadata { + language: job.script_lang, + codebase, + envs: None, + schema: None, + schema_validator: None, + }; + (arc_data.as_ref(), &metadata) + } } JobKind::Script_Hub => { let ContentReqLangEnvs { content, lockfile, language, envs, codebase, schema } = diff --git a/frontend/src/lib/components/ModulePreview.svelte b/frontend/src/lib/components/ModulePreview.svelte index d58a48e316..4d6c433bd8 100644 --- a/frontend/src/lib/components/ModulePreview.svelte +++ b/frontend/src/lib/components/ModulePreview.svelte @@ -68,7 +68,9 @@ script.content, script.language, args, - $flowStore?.tag ?? (val.tag_override ? val.tag_override : script.tag) + $flowStore?.tag ?? (val.tag_override ? val.tag_override : script.tag), + script.lock, + val.hash ) } else if (val.type == 'flow') { await testJobLoader?.abstractRun(() => diff --git a/frontend/src/lib/components/TestJobLoader.svelte b/frontend/src/lib/components/TestJobLoader.svelte index e16ea23dc3..a7f911aff7 100644 --- a/frontend/src/lib/components/TestJobLoader.svelte +++ b/frontend/src/lib/components/TestJobLoader.svelte @@ -126,7 +126,8 @@ lang: SupportedLanguage | undefined, args: Record, tag: string | undefined, - lock?: string + lock?: string, + hash?: string ): Promise { // Reset in case we rerun job without reloading scriptProgress = undefined