vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
Phase 5: LFS objects, over SSH for writes and the proxy for reads
64ac5071a173e4e9ce8bc8d7170f9b0411bee52a · Keenan Nemetz · 18d ago · parent 35eaeccf
Phase 5: LFS objects, over SSH for writes and the proxy for reads Large files leave the git object database and land in one content-addressed store per instance. Reads are anonymous like clone; writes ride the SSH key that already authenticates the push, so no token exists anywhere. - internal/lfs: sha256-addressed store that verifies content and size before an object becomes visible; parser for the pointer format a client writes - HTTP: POST .../info/lfs/objects/batch for downloads, GET .../objects/<oid> with the object id as ETag; upload over HTTP is refused and names SSH - SSH: git-lfs-transfer speaking the pure SSH protocol (pkt-line), so `git lfs push` needs nothing but the key at the handshake - pre-receive: a pointer whose object is missing, or whose size disagrees with the stored object, fails the push that introduced it; a binary over lfs_warn_bytes is accepted with a `git lfs track` suggestion. Checks run before the protected-branch gate, because an admin's approval bypass is about review, not about whether the commit can be checked out - runs: a finished log becomes a content-addressed object in the same write that records the status, served at /r/<repo>/runs/<id>/log - vole gc [--dry-run] [--grace]: marks pointer targets from every ref in every repository plus archived logs, sweeps the rest. Mark-and-sweep rather than reference counts: a counter that is one too low deletes an artifact, a walk over the refs cannot be wrong about what is reachable
internal/web/web.go +2
| @@ -20,6 +20,7 @@ import ( | |||
| 20 | 20 | "github.com/rodent-software/vole/internal/gitx" | |
| 21 | 21 | "github.com/rodent-software/vole/internal/identity" | |
| 22 | 22 | "github.com/rodent-software/vole/internal/index" | |
| 23 | "github.com/rodent-software/vole/internal/lfs" | ||
| 23 | 24 | "github.com/rodent-software/vole/internal/repo" | |
| 24 | 25 | "github.com/rodent-software/vole/internal/runs" | |
| 25 | 26 | ) | |
| @@ -29,6 +30,7 @@ type Web struct { | |||
| 29 | 30 | Index *index.Store | |
| 30 | 31 | Ident *identity.Store | |
| 31 | 32 | Runs *runs.Store | |
| 33 | LFS *lfs.Store | ||
| 32 | 34 | Cfg *config.Config | |
| 33 | 35 | Tmpl *template.Template | |
| 34 | 36 | Logger func(format string, args ...any) | |