From 0330b8fdb8e541a0c14e858d770019e2714c4452 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Wed, 29 Oct 2025 14:49:25 -0300 Subject: [PATCH] feat(bootstrap): improve bucket creation and error handling logic Enhance the bucket creation process in `BootstrapManager` to handle existing buckets gracefully. Adds logic to reuse the default template when a bucket already exists and ensures proper path formatting before creation. This improves reliability and prevents redundant bucket creation errors. --- src/bootstrap/mod.rs | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/bootstrap/mod.rs b/src/bootstrap/mod.rs index f4e102ab..b4637b02 100644 --- a/src/bootstrap/mod.rs +++ b/src/bootstrap/mod.rs @@ -395,14 +395,27 @@ impl BootstrapManager { let bot_name = path.file_name().unwrap().to_string_lossy().to_string(); let bucket = bot_name.trim_start_matches('/').to_string(); info!("Uploading template {} to Drive bucket {}", bot_name, bucket); - if operator.stat(&bucket).await.is_err() { - info!("Bucket {} not found, creating it", bucket); - operator.create_dir("/").await?; - debug!("Bucket {} created successfully", bucket); - } - self.upload_directory_recursive(&operator, &path, &bucket) - .await?; - info!("Uploaded template {} to Drive bucket {}", bot_name, bucket); +if operator.stat(&bucket).await.is_err() { + info!("Bucket {} not found, creating it", bucket); + let bucket_path = if bucket.ends_with('/') { bucket.clone() } else { format!("{}/", bucket) }; +match operator.create_dir(&bucket_path).await { + Ok(_) => { + debug!("Bucket {} created successfully", bucket); + } + Err(e) => { + let err_msg = format!("{}", e); + if err_msg.contains("BucketAlreadyOwnedByYou") { + log::warn!("Bucket {} already exists, reusing default.gbai", bucket); + self.upload_directory_recursive(&operator, &Path::new("templates/default.gbai"), "default.gbai").await?; + continue; + } else { + return Err(e.into()); + } + } + } +} +self.upload_directory_recursive(&operator, &path, &bucket).await?; +info!("Uploaded template {} to Drive bucket {}", bot_name, bucket); } } Ok(())