Skip to content

feat(sync): multi-target fan-out via extra_targets (M7) - #32

Merged
ArianAr merged 2 commits into
mainfrom
feat/multi-target
Jul 16, 2026
Merged

feat(sync): multi-target fan-out via extra_targets (M7)#32
ArianAr merged 2 commits into
mainfrom
feat/multi-target

Conversation

@ArianAr

@ArianAr ArianAr commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

Optional fan-out destinations for a sync rule on the same target provider.

Closes #31

  • Rule field extra_targets: semicolon list of bucket or bucket:prefix
  • Dry-run classifies each destination independently (destination column)
  • Sync streams separate GetObject→PutObject per destination that needs work
  • delete_on_target applies only to the primary target
  • Dashboard field + README note

Test

  • go test ./...
  • Frontend build

Allow rules to copy to additional buckets on the same target provider
using semicolon-separated bucket or bucket:prefix entries. Dry-run and
sync classify each destination independently; delete_on_target stays
primary-only.

Closes #31
@ArianAr

ArianAr commented Jul 16, 2026

Copy link
Copy Markdown
Owner Author

Review notes

  • ParseExtraTargets rejects empty buckets; colon splits on first : only.
  • Extra destinations reuse the primary target provider client; independent listing/classify avoids re-uploading objects already in sync on an extra bucket.
  • Deletes remain primary-only by design (strict mirror shouldn't wipe unrelated backup buckets).
  • Unit coverage: TestParseExtraTargets, TestObjectsMatch, TestClassifyAgainstExtraDestination.

Approve when CI is green.

@ArianAr
ArianAr enabled auto-merge (squash) July 16, 2026 18:57
Integrate compare_mode with extra_targets dry-run classification.
@ArianAr
ArianAr merged commit 078cc7e into main Jul 16, 2026
8 of 9 checks passed
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.

feat: multi-target fan-out destinations (M7)

1 participant