mirror of
https://github.com/penpot/penpot.git
synced 2026-10-30 06:20:32 +00:00
Introduce optional named S3 targets and route internal semantic buckets (for example tempfile) to them, keeping the fs/s3 backend choice and the storage_object.backend value unchanged. Targets and routes are read from an EDN file referenced by PENPOT_OBJECTS_STORAGE_S3_ROUTES_FILE. The chosen target id is stored in the object metadata as :storage-target and resolved on reads, URL signing, deduplication, individual deletes and both GC tasks. The implicit :default target is built from PENPOT_OBJECTS_STORAGE_S3_*, so behavior is unchanged when the file is absent. Bulk deletion now carries the target, and one S3 client/presigner pair is shared per distinct region/endpoint. Closes #11630 AI-assisted-by: deepseek-flash