Skip to content

feat(pipeline): add S3 send step for uploading output to S3-compatible storage#133

Open
trobanga wants to merge 4 commits intomainfrom
feature/126-s3-send-step
Open

feat(pipeline): add S3 send step for uploading output to S3-compatible storage#133
trobanga wants to merge 4 commits intomainfrom
feature/126-s3-send-step

Conversation

@trobanga
Copy link
Collaborator

Summary

  • Implement S3 send step to upload pipeline output files to S3-compatible storage
  • Add S3Uploader interface with AWS SDK v2 implementation
  • Support for AWS S3, MinIO, Ceph, and other S3-compatible APIs
  • Upload manifest tracking for retry resilience (skips already uploaded files)
  • Environment variable expansion for credentials (${VAR} syntax)
  • Error classification (transient vs non-transient) for automatic retry logic
  • Default region set to eu-central-1

Test plan

  • Unit tests pass for SendConfig validation
  • Unit tests pass for UploadManifest operations
  • Unit tests pass for MockS3Uploader
  • Unit tests pass for config loading with env var expansion
  • All existing tests continue to pass
  • Manual testing with MinIO (instructions in implementation plan)

Closes #126

@trobanga trobanga marked this pull request as draft January 28, 2026 15:40
@codecov-commenter
Copy link

codecov-commenter commented Jan 28, 2026

Codecov Report

❌ Patch coverage is 92.59259% with 22 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.10%. Comparing base (d7cce15) to head (6fab727).

Files with missing lines Patch % Lines
internal/pipeline/send.go 88.28% 9 Missing and 4 partials ⚠️
internal/models/send.go 84.09% 4 Missing and 3 partials ⚠️
internal/services/s3_uploader.go 97.91% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #133      +/-   ##
==========================================
+ Coverage   84.67%   85.10%   +0.42%     
==========================================
  Files          46       48       +2     
  Lines        4771     5056     +285     
==========================================
+ Hits         4040     4303     +263     
- Misses        567      581      +14     
- Partials      164      172       +8     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@trobanga trobanga force-pushed the feature/126-s3-send-step branch from 9c4db63 to c41889f Compare February 9, 2026 14:09
@trobanga trobanga marked this pull request as ready for review February 9, 2026 14:09
@trobanga trobanga force-pushed the feature/126-s3-send-step branch 4 times, most recently from a781860 to 2a4f13b Compare February 12, 2026 11:50
@trobanga trobanga force-pushed the feature/126-s3-send-step branch from 2a4f13b to e088782 Compare February 13, 2026 13:39
Add s3_upload as a third send mode alongside direct_resource_load and
transfer_load. This allows pipeline output files to be uploaded to any
S3-compatible object store (AWS S3, MinIO, Ceph).

- Add S3Config struct with endpoint, region, bucket, credentials,
  path-style, and timeout settings
- Add SendModeS3Upload constant and validation (bucket, region, creds)
- Add upload manifest for retry resilience (atomic save after each file)
- Add S3Uploader interface with AWSS3Uploader (AWS SDK v2) and mock
- Add S3Error type with transient/non-transient classification
- Add executeS3UploadSend() to pipeline send step
- Skip HTTP HEAD connectivity check for S3 mode (requires signing)
- Add S3 config loading with defaults (region=eu-central-1, timeout=30m)
- Add MinIO Docker compose and E2E test infrastructure
- Add 34 new unit tests, 0 existing tests broken

Closes #126
Add comprehensive tests for the real AWSS3Uploader (construction,
upload via httptest, proxy auth injection, error paths), formatSize
branches, S3 uploader factory error, corrupted manifest recovery,
non-existent input directory, S3 mode connectivity skip, and
unparseable S3 endpoint URL validation.
The minio-init init container exits after completing its setup task (exit 0).
Configure it in aether-runner's depends_on with service_completed_successfully
so docker compose up --wait doesn't treat the exit as a failure.
@trobanga trobanga force-pushed the feature/126-s3-send-step branch from e088782 to 6fab727 Compare February 20, 2026 07:56
@juliangruendner juliangruendner added this to the v0.6.0 milestone Mar 9, 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.

Send Step: Transfer data extraction to file storage (S3 API)

3 participants