refactor: extract object store into dedicated crate with filesystem backend (#7996)

* refactor: extract object store code into windmill-object-store crate with filesystem backend

Consolidate all object_store-dependent code from windmill-common into a new
windmill-object-store crate. Add a filesystem-backed object store implementation
using LocalFileSystem for dev/testing without cloud credentials. Includes 30
comprehensive tests covering render_endpoint, lfs_to_object_store_resource,
duckdb_connection_settings, error mapping, and filesystem-backed integration tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* all

* all

* all

* all

* fix: fix raw_app hardcoded path, add missing ObjectStoreResource import, and add tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: move S3ModeFormat to windmill-types, make windmill-parser-sql optional, restore debug logs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* all

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ruben Fiszel
2026-02-18 13:24:45 +01:00
parent 05707188fe
commit a3b6fa4eb3
58 changed files with 1968 additions and 1189 deletions

View File

@@ -152,10 +152,10 @@ pub async fn test_email(
}
#[cfg(feature = "parquet")]
use windmill_common::s3_helpers::ObjectSettings;
use windmill_object_store::ObjectSettings;
#[cfg(feature = "parquet")]
use windmill_common::s3_helpers::build_object_store_from_settings;
use windmill_object_store::build_object_store_from_settings;
#[cfg(feature = "parquet")]
pub async fn test_s3_bucket(
@@ -170,7 +170,7 @@ pub async fn test_s3_bucket(
.await?
.store;
let mut list = client.list(Some(&object_store::path::Path::from("".to_string())));
let mut list = client.list(Some(&windmill_object_store::object_store_reexports::Path::from("".to_string())));
let first_file = list.next().await;
if first_file.is_some() {
if let Err(e) = first_file.as_ref().unwrap() {
@@ -182,13 +182,13 @@ pub async fn test_s3_bucket(
tracing::info!("No files in blob storage");
}
let path = object_store::path::Path::from(format!(
let path = windmill_object_store::object_store_reexports::Path::from(format!(
"/test-s3-bucket-{uuid}",
uuid = uuid::Uuid::new_v4()
));
tracing::info!("Testing blob storage at path: {path}");
client
.put(&path, object_store::PutPayload::from_static(b"hello"))
.put(&path, windmill_object_store::object_store_reexports::PutPayload::from_static(b"hello"))
.await
.map_err(|e| anyhow::anyhow!("error writing file to {path}: {e:#}"))?;
let content = client