Skip to content

feat(storage): S3/MinIO provider + config-driven selection (DEV-48)#12

Merged
RndmCodeGuy20 merged 1 commit into
stagingfrom
feat/dev-48-go-s3-storage
Jun 16, 2026
Merged

feat(storage): S3/MinIO provider + config-driven selection (DEV-48)#12
RndmCodeGuy20 merged 1 commit into
stagingfrom
feat/dev-48-go-s3-storage

Conversation

@RndmCodeGuy20

Copy link
Copy Markdown
Owner

First child of the S3 epic (DEV-41). Adds a Go S3/MinIO StorageX implementation and makes provider selection config-driven.

Changes

  • s3.gos3Storage via aws-sdk-go-v2 implementing the full StorageX interface; presigned URLs via s3.PresignClient; MinIO support through S3_ENDPOINT_URL + path-style addressing.
  • factory.gostoragex.New(...) selects GCS vs S3 from the configured provider.
  • Interface neutralisedGetObjectAttrs now returns a provider-agnostic storagex.ObjectAttrs instead of the GCS-specific *storage.ObjectAttrs (the single caller only checks existence). Unblocks any non-GCS impl.
  • Config wiring — new S3Config + S3_*/BUCKET_NAME env vars; service now picks provider from BUCKET_PROVIDER (was hardcoded GCPProvider) and uses the configured bucket (was hardcoded "mpiper").

Spec divergences (deliberate)

The DEV-48 issue's interface signature was stale — the real StorageX takes bucket per call, uses option structs, and had the GCS-typed GetObjectAttrs. Implemented against the actual interface; neutralised the GCS leak.

Verification

  • go build ./... + go vet clean.
  • MinIO round-trip integration test (s3_test.go): put → head → get (body match) → presign (signed, contains key) → delete → post-delete miss. Verified green against a real minio/minio container; skips when S3_TEST_ENDPOINT is unset (so CI stays green).

Next: DEV-49 (Python worker S3) + add MinIO to compose → fully-local credential-free e2e.

🤖 Generated with Claude Code

…tion

- Implement s3Storage (aws-sdk-go-v2) for AWS S3 and MinIO (DEV-48)
- Add storagex.New factory; select provider from BUCKET_PROVIDER config
- Neutralise GetObjectAttrs to a provider-agnostic storagex.ObjectAttrs
- Add S3Config + BUCKET_NAME/S3_* env wiring; drop hardcoded "mpiper" bucket
- MinIO support via S3_ENDPOINT_URL + path-style addressing
- Add MinIO round-trip integration test (skips without S3_TEST_ENDPOINT)
- Ignore local e2e artifacts (.env.local, .secrets, compose override)
@RndmCodeGuy20 RndmCodeGuy20 merged commit 5b35304 into staging Jun 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant