feat(rustfs): deliver the forgejo key and mirror its bucket #500

Merged
binjovi-bot merged 1 commit from sean/rustfs-forgejo into trunk 2026-09-09 18:21:16 +00:00 AGit
Owner

Stage 3, bucket three of five. Source side only: delivers the scoped credential to namespace forgejo and copies the bucket (1,208 objects / 2.1 GiB, measured). forgejo-app is repointed in its own commit once the mirror is green. The only user-data bucket in the migration. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76

Stage 3, bucket three of five. Source side only: delivers the scoped credential to namespace forgejo and copies the bucket (1,208 objects / 2.1 GiB, measured). forgejo-app is repointed in its own commit once the mirror is green. The only user-data bucket in the migration. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
feat(rustfs): deliver the forgejo key and mirror its bucket
All checks were successful
binjovi/ci Binjovi completed the frozen plan
920f7d4dfa
Stage 3, bucket three of five. Source side only: this delivers the scoped
credential to namespace forgejo and copies the bucket. forgejo-app still reads
MinIO after this lands, and is repointed in its own commit once the mirror is
green.

USER DATA, and the only bucket in this migration that is. Attachments,
avatars, release assets, LFS objects and packages -- everything Forgejo does
not keep in PostgreSQL. MEASURED before writing the mirror: 1,208 objects in
2.1 GiB, an average object of about 1.8 MiB. That is the byte case rather than
the object-count case, and small on both counts: a thirtieth of loki's objects
and a fiftieth of zot's bytes.

The MinIO copy stays untouched as the rollback, and for this bucket that
matters more than for the others. A log chunk or a trace that goes missing is
an inconvenience; a missing attachment is a person's data.

The shaped Secret keeps minio_access_key / minio_secret_key. THAT WORD IS
FORGEJO'S, NOT OURS: Forgejo's storage driver is literally named `minio` and
has no `s3` alias, so STORAGE_TYPE stays `minio` after the repoint and
FORGEJO__STORAGE__MINIO_ACCESS_KEY_ID is fixed by upstream. Renaming the
fields here would add a rename to the cutover and buy nothing.

This bucket has no lifecycle rule, so unlike binjovi-logs and loki the source
does not expire objects underneath the mirror. It can still delete one --
someone removing an attachment or a release asset -- so destination-only lines
remain not-a-fault and the gate stays directional and identical to every other
file here.

Both class guards cover the new files on arrival: 5 identities, 4 mirrors, 32
behaviours executed against stubbed binaries. The mirror inherits the
resilience that landed in #496, so a node reboot during the transfer costs a
wait rather than a restart.

Claude-Session: https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sean/seanfarm!500
No description provided.