From ab3818146d2e405dceeb26dcf400f3b0c7ddfdad Mon Sep 17 00:00:00 2001 From: Benjamin Date: Thu, 15 Jan 2026 15:45:21 +0100 Subject: [PATCH] feat(storage): auto-create S3 bucket if it doesn't exist Instead of failing when bucket doesn't exist, attempt to create it. This improves the initial setup experience with MinIO and other S3 compatible storage providers. --- backend/pkg/storage/s3.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/pkg/storage/s3.go b/backend/pkg/storage/s3.go index cf61750..4c956fe 100644 --- a/backend/pkg/storage/s3.go +++ b/backend/pkg/storage/s3.go @@ -62,12 +62,19 @@ func NewS3Provider(cfg S3Config) (*S3Provider, error) { client := s3.NewFromConfig(awsCfg, s3Opts...) - // Verify bucket exists + // Check if bucket exists, create if not _, err = client.HeadBucket(context.Background(), &s3.HeadBucketInput{ Bucket: aws.String(cfg.Bucket), }) if err != nil { - return nil, fmt.Errorf("failed to access S3 bucket %s: %w", cfg.Bucket, err) + // Try to create the bucket + _, createErr := client.CreateBucket(context.Background(), &s3.CreateBucketInput{ + Bucket: aws.String(cfg.Bucket), + }) + if createErr != nil { + return nil, fmt.Errorf("bucket %s does not exist and failed to create it: %w", cfg.Bucket, createErr) + } + logger.Logger.Info("S3 bucket created", "bucket", cfg.Bucket) } logger.Logger.Info("S3 storage provider initialized", "bucket", cfg.Bucket, "endpoint", cfg.Endpoint)