diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index b86dae1ed0..a2acda48ac 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -28,7 +28,6 @@ use windmill_common::flow_status::{JobResult, RestartedFrom}; use windmill_common::jobs::{format_completed_job_result, format_result, ENTRYPOINT_OVERRIDE}; use windmill_common::worker::{CLOUD_HOSTED, TMP_DIR}; -#[cfg(all(feature = "enterprise", feature = "parquet"))] use windmill_common::scripts::PREVIEW_IS_CODEBASE_HASH; use windmill_common::variables::get_workspace_key; @@ -4397,7 +4396,6 @@ async fn run_preview_script( Ok((StatusCode::CREATED, uuid.to_string())) } -#[cfg(all(feature = "enterprise", feature = "parquet"))] async fn run_bundle_preview_script( authed: ApiAuthed, Extension(db): Extension, @@ -4408,8 +4406,6 @@ async fn run_bundle_preview_script( ) -> error::Result<(StatusCode, String)> { use windmill_common::scripts::PREVIEW_IS_TAR_CODEBASE_HASH; - check_license_key_valid().await?; - check_scopes(&authed, || format!("jobs:runscript"))?; if authed.is_operator { return Err(error::Error::NotAuthorized( @@ -4504,21 +4500,48 @@ async fn run_bundle_preview_script( uploaded = true; - if let Some(os) = windmill_common::s3_helpers::OBJECT_STORE_CACHE_SETTINGS + #[cfg(all(feature = "enterprise", feature = "parquet"))] + let object_store = windmill_common::s3_helpers::OBJECT_STORE_CACHE_SETTINGS .read() .await - .clone() + .clone(); + + #[cfg(not(all(feature = "enterprise", feature = "parquet")))] + let object_store: Option<()> = None; + + if &windmill_common::utils::MODE_AND_ADDONS.mode + == &windmill_common::utils::Mode::Standalone + && object_store.is_none() { - let path = windmill_common::s3_helpers::bundle(&w_id, &id); - if let Err(e) = os - .put(&object_store::path::Path::from(path.clone()), data.into()) - .await - { - tracing::info!("Failed to put snapshot to s3 at {path}: {:?}", e); - return Err(Error::ExecutionErr(format!("Failed to put {path} to s3"))); - } + std::fs::create_dir_all( + windmill_common::worker::ROOT_STANDALONE_BUNDLE_DIR.clone(), + )?; + windmill_common::worker::write_file( + &windmill_common::worker::ROOT_STANDALONE_BUNDLE_DIR, + &id, + &String::from_utf8_lossy(&data), + )?; } else { - return Err(Error::BadConfig("Object store is required for snapshot script and is not configured for servers".to_string())); + #[cfg(not(all(feature = "enterprise", feature = "parquet")))] + { + return Err(Error::ExecutionErr("codebase is an EE feature".to_string())); + } + + #[cfg(all(feature = "enterprise", feature = "parquet"))] + if let Some(os) = object_store { + check_license_key_valid().await?; + + let path = windmill_common::s3_helpers::bundle(&w_id, &id); + if let Err(e) = os + .put(&object_store::path::Path::from(path.clone()), data.into()) + .await + { + tracing::info!("Failed to put snapshot to s3 at {path}: {:?}", e); + return Err(Error::ExecutionErr(format!("Failed to put {path} to s3"))); + } + } else { + return Err(Error::BadConfig("Object store is required for snapshot script and is not configured for servers".to_string())); + } } } // println!("Length of `{}` is {} bytes", name, data.len()); @@ -4537,13 +4560,6 @@ async fn run_bundle_preview_script( Ok((StatusCode::CREATED, job_id.unwrap().to_string())) } -#[cfg(not(all(feature = "enterprise", feature = "parquet")))] -async fn run_bundle_preview_script() -> error::Result<(StatusCode, String)> { - return Err(Error::BadRequest( - "bundle preview is an ee feature".to_string(), - )); -} - #[derive(Deserialize)] pub struct RunDependenciesRequest { pub raw_scripts: Vec,