From b34b02495f18b1dae0463c217de0df8732c6ad96 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Wed, 2 Aug 2023 18:37:39 +0200 Subject: [PATCH] feat: support native jobs from hub --- backend/windmill-api/src/inputs.rs | 4 ++-- backend/windmill-worker/src/worker.rs | 20 +++++++++++++++----- frontend/package.json | 8 ++++++++ frontend/src/lib/infer.ts | 2 +- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/backend/windmill-api/src/inputs.rs b/backend/windmill-api/src/inputs.rs index 37c2323a5f..35ac4bc5db 100644 --- a/backend/windmill-api/src/inputs.rs +++ b/backend/windmill-api/src/inputs.rs @@ -113,9 +113,9 @@ async fn get_input_history( let mut tx = user_db.begin(&authed).await?; let sql = &format!( - "select * from (select distinct on (args) * from completed_job \ + "select * from completed_job \ where {} = $1 and job_kind = $2 and workspace_id = $3 \ - order by args, started_at desc) t ORDER BY started_at desc limit $4 offset $5", + order by args, started_at desc limit $4 offset $5", r.runnable_type.column_name() ); diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index 8611c95925..7c66d495b3 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -963,13 +963,17 @@ pub async fn get_content(job: &QueuedJob, db: &Pool) -> Result,) -> windmill_common::error::Result { +async fn do_nativets(job: QueuedJob, logs: String, client: &AuthedClient, db: &sqlx::Pool, hub_code: Option) -> windmill_common::error::Result { let args = if let Some(args) = &job.args { Some(transform_json_value("args", client, &job.workspace_id, args.clone()).await?) } else { None }; - let code = get_content(&job, db).await?; + let code = if let Some(code) = hub_code { + code + } else { + get_content(&job, db).await? + }; let args = args .as_ref() @@ -1153,7 +1157,7 @@ async fn handle_queued_job( tokio::task::spawn(async move { - let jc = do_nativets(job.clone(), logs, &client, &db).await; + let jc = do_nativets(job.clone(), logs, &client, &db, None).await; parallel_count.fetch_sub(1, Ordering::SeqCst); match jc { Ok(jc) => job_completed_tx.send(jc).await.expect("send job completed"), @@ -1278,7 +1282,7 @@ async fn handle_queued_job( } } else if job.language == Some(ScriptLang::Nativets) { logs.push_str("\n--- FETCH TS EXECUTION ---\n"); - let jc = do_nativets(job.clone(), logs.clone(), &client.get_authed().await, &db).await?; + let jc = do_nativets(job.clone(), logs.clone(), &client.get_authed().await, &db, None).await?; logs = jc.logs; Ok(jc.result) } else { @@ -1655,7 +1659,13 @@ mount {{ ) .await }, - _ => panic!("unreachable"), + Some(ScriptLang::Nativets) => { + logs.push_str("\n--- FETCH TS EXECUTION ---\n"); + let jc = do_nativets(job.clone(), logs.clone(), &client.get_authed().await, &db, Some(inner_content)).await?; + *logs = jc.logs; + Ok(jc.result) + }, + _ => panic!("unreachable, language is not supported: {language:#?}"), }; tracing::info!( worker_name = %worker_name, diff --git a/frontend/package.json b/frontend/package.json index 22572e9fab..a988fd8526 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -160,6 +160,11 @@ "svelte": "./package/components/RadioButton.svelte", "default": "./package/components/RadioButton.svelte" }, + "./components/Toggle.svelte": { + "types": "./package/components/Toggle.svelte.d.ts", + "svelte": "./package/components/Toggle.svelte", + "default": "./package/components/Toggle.svelte" + }, "./components/common/tabs/Tabs.svelte": { "types": "./package/components/common/tabs/Tabs.svelte.d.ts", "svelte": "./package/components/common/tabs/Tabs.svelte", @@ -295,6 +300,9 @@ "components/RadioButton.svelte": [ "./package/components/RadioButton.svelte.d.ts" ], + "components/Toggle.svelte": [ + "./package/components/Toggle.svelte.d.ts" + ], "components/common/tabs/Tabs.svelte": [ "./package/components/common/tabs/Tabs.svelte.d.ts" ], diff --git a/frontend/src/lib/infer.ts b/frontend/src/lib/infer.ts index 72666c01db..ac2728ed78 100644 --- a/frontend/src/lib/infer.ts +++ b/frontend/src/lib/infer.ts @@ -188,7 +188,7 @@ function argSigToJsonSchemaType( export async function loadSchemaFromPath(path: string, hash?: string): Promise { if (path.startsWith('hub/')) { const { content, language, schema } = await ScriptService.getHubScriptByPath({ path }) - if (language == 'deno') { + if (language == 'deno' || language == 'nativets') { const newSchema = emptySchema() await inferArgs('deno' as SupportedLanguage, content ?? '', newSchema) return newSchema