Skip to content

Conversation

@minodisk
Copy link
Owner

Summary

  • Add ImageUploader interface to abstract image storage operations
  • Implement GoogleDriveUploader, GCSUploader, and S3Uploader
  • Allow users to select storage backend via DECK_IMAGE_STORAGE environment variable
  • GCS and S3 use signed/presigned URLs (1 hour expiry) for security

New Environment Variables

Storage Selection

  • DECK_IMAGE_STORAGE: "gdrive" (default), "gcs", or "s3"

GCS Configuration

  • DECK_GCS_BUCKET: Bucket name (required for GCS)
  • DECK_GCS_PREFIX: Object prefix (optional)
  • DECK_GCS_SERVICE_ACCOUNT_KEY: Service account JSON (optional, falls back to ADC)

S3 Configuration

  • DECK_S3_BUCKET: Bucket name (required for S3)
  • DECK_S3_PREFIX: Object prefix (optional)
  • DECK_S3_REGION: AWS region
  • DECK_S3_ENDPOINT: Custom endpoint for S3-compatible services (MinIO, R2)
  • DECK_S3_ACCESS_KEY_ID, DECK_S3_SECRET_ACCESS_KEY: Credentials (optional, falls back to AWS SDK default chain)

Test plan

  • Build succeeds
  • Existing tests pass
  • Manual test with GCS
  • Manual test with S3

🤖 Generated with Claude Code

Add ImageUploader interface to abstract image storage operations,
allowing users to choose between Google Drive (default), GCS, or S3
for temporary image uploads.

New environment variables:
- DECK_IMAGE_STORAGE: select storage backend ("gdrive", "gcs", "s3")
- DECK_GCS_BUCKET, DECK_GCS_PREFIX, DECK_GCS_SERVICE_ACCOUNT_KEY: GCS config
- DECK_S3_BUCKET, DECK_S3_PREFIX, DECK_S3_REGION, DECK_S3_ENDPOINT: S3 config
- DECK_S3_ACCESS_KEY_ID, DECK_S3_SECRET_ACCESS_KEY: S3 credentials

GCS and S3 use signed/presigned URLs (1 hour expiry) for security.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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.

2 participants