@@ -18,6 +18,7 @@ use quick_cache::sync::Cache;
1818use serde_json:: value:: RawValue ;
1919use serde_json:: Value ;
2020use sqlx:: Pool ;
21+ use windmill_common:: s3_helpers:: { upload_artifact_to_store, BundleFormat } ;
2122use std:: collections:: HashMap ;
2223use std:: hash:: { DefaultHasher , Hash , Hasher } ;
2324use std:: ops:: { Deref , DerefMut } ;
@@ -41,7 +42,6 @@ use windmill_common::DYNAMIC_INPUT_CACHE;
4142#[ cfg( all( feature = "enterprise" , feature = "smtp" ) ) ]
4243use windmill_common:: { email_oss:: send_email_html, server:: load_smtp_config} ;
4344
44- use windmill_common:: scripts:: PREVIEW_IS_CODEBASE_HASH ;
4545use windmill_common:: variables:: get_workspace_key;
4646
4747use crate :: triggers:: trigger_helpers:: ScriptId ;
@@ -3526,6 +3526,7 @@ struct Preview {
35263526 tag : Option < String > ,
35273527 dedicated_worker : Option < bool > ,
35283528 lock : Option < String > ,
3529+ format : Option < String >
35293530}
35303531
35313532#[ derive( Deserialize ) ]
@@ -5590,6 +5591,7 @@ async fn run_wait_result_preview_script(
55905591 return result;
55915592}
55925593
5594+
55935595async fn run_bundle_preview_script (
55945596 authed : ApiAuthed ,
55955597 Extension ( db) : Extension < DB > ,
@@ -5598,7 +5600,6 @@ async fn run_bundle_preview_script(
55985600 Query ( run_query) : Query < RunJobQuery > ,
55995601 mut multipart : axum:: extract:: Multipart ,
56005602) -> error:: Result < ( StatusCode , String ) > {
5601- use windmill_common:: scripts:: PREVIEW_IS_TAR_CODEBASE_HASH ;
56025603
56035604 if authed. is_operator {
56045605 return Err ( error:: Error :: NotAuthorized (
@@ -5610,13 +5611,15 @@ async fn run_bundle_preview_script(
56105611 let mut tx = None ;
56115612 let mut uploaded = false ;
56125613 let mut is_tar = false ;
5614+ let mut format = BundleFormat :: Cjs ;
56135615
56145616 while let Some ( field) = multipart. next_field ( ) . await . unwrap ( ) {
56155617 let name = field. name ( ) . unwrap ( ) . to_string ( ) ;
56165618 let data = field. bytes ( ) . await ;
56175619 let data = data. map_err ( to_anyhow) ?;
56185620 if name == "preview" {
56195621 let preview: Preview = serde_json:: from_slice ( & data) . map_err ( to_anyhow) ?;
5622+ format = preview. format . and_then ( |s| BundleFormat :: from_string ( & s) ) . unwrap_or ( BundleFormat :: Cjs ) ;
56205623
56215624 let scheduled_for = run_query. get_scheduled_for ( & db) . await ?;
56225625 let tag = run_query. tag . clone ( ) . or ( preview. tag . clone ( ) ) ;
@@ -5637,11 +5640,7 @@ async fn run_bundle_preview_script(
56375640 ltx,
56385641 & w_id,
56395642 JobPayload :: Code ( RawCode {
5640- hash : if is_tar {
5641- Some ( PREVIEW_IS_TAR_CODEBASE_HASH )
5642- } else {
5643- Some ( PREVIEW_IS_CODEBASE_HASH )
5644- } ,
5643+ hash : Some ( windmill_common:: scripts:: codebase_to_hash ( is_tar, format == BundleFormat :: Esm ) ) ,
56455644 content : preview. content . unwrap_or_default ( ) ,
56465645 path : preview. path ,
56475646 language : preview. language . unwrap_or ( ScriptLang :: Deno ) ,
@@ -5690,52 +5689,17 @@ async fn run_bundle_preview_script(
56905689
56915690 // tracing::info!("is_tar 2: {is_tar}");
56925691
5692+ if format == BundleFormat :: Esm {
5693+ id = format ! ( "{}.esm" , id) ;
5694+ }
56935695 if is_tar {
56945696 id = format ! ( "{}.tar" , id) ;
56955697 }
56965698
56975699 uploaded = true ;
56985700
5699- #[ cfg( all( feature = "enterprise" , feature = "parquet" ) ) ]
5700- let object_store = windmill_common:: s3_helpers:: get_object_store ( ) . await ;
5701-
5702- #[ cfg( not( all( feature = "enterprise" , feature = "parquet" ) ) ) ]
5703- let object_store: Option < ( ) > = None ;
5704-
5705- if & windmill_common:: utils:: MODE_AND_ADDONS . mode
5706- == & windmill_common:: utils:: Mode :: Standalone
5707- && object_store. is_none ( )
5708- {
5709- std:: fs:: create_dir_all (
5710- windmill_common:: worker:: ROOT_STANDALONE_BUNDLE_DIR . clone ( ) ,
5711- ) ?;
5712- windmill_common:: worker:: write_file_bytes (
5713- & windmill_common:: worker:: ROOT_STANDALONE_BUNDLE_DIR ,
5714- & id,
5715- & data,
5716- ) ?;
5717- } else {
5718- #[ cfg( not( all( feature = "enterprise" , feature = "parquet" ) ) ) ]
5719- {
5720- return Err ( Error :: ExecutionErr ( "codebase is an EE feature" . to_string ( ) ) ) ;
5721- }
5722-
5723- #[ cfg( all( feature = "enterprise" , feature = "parquet" ) ) ]
5724- if let Some ( os) = object_store {
5725- check_license_key_valid ( ) . await ?;
5726-
5727- let path = windmill_common:: s3_helpers:: bundle ( & w_id, & id) ;
5728- if let Err ( e) = os
5729- . put ( & object_store:: path:: Path :: from ( path. clone ( ) ) , data. into ( ) )
5730- . await
5731- {
5732- tracing:: info!( "Failed to put snapshot to s3 at {path}: {:?}" , e) ;
5733- return Err ( Error :: ExecutionErr ( format ! ( "Failed to put {path} to s3" ) ) ) ;
5734- }
5735- } else {
5736- return Err ( Error :: BadConfig ( "Object store is required for snapshot script and is not configured for servers" . to_string ( ) ) ) ;
5737- }
5738- }
5701+ let path = windmill_common:: s3_helpers:: bundle ( & w_id, & id) ;
5702+ upload_artifact_to_store ( & path, data, & windmill_common:: worker:: ROOT_STANDALONE_BUNDLE_DIR ) . await ?;
57395703 }
57405704 // println!("Length of `{}` is {} bytes", name, data.len());
57415705 }
0 commit comments