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.
Stream run logs over the runner's SSH channel
5ece70a50ebda392626b92bdf29d28bc9b444954 · Keenan Nemetz · 11d ago · parent fdf2340f
Stream run logs over the runner's SSH channel The runner wrote the log to a temp file and uploaded it as one LFS object when the job ended, so a running job had no log to read and a log was stored like a shared artifact even though it belongs to one attempt. The runner sends 128 KiB chunks over the same runner channel that holds the lease. The server appends them to data/logs/<repo>/<run>/<attempt>.log and records the size while the run is still running. The finish record carries the final size; the server checks the file length, syncs it, and stores the result. A partial or failed stream leaves no log on the record. Logs are no longer LFS objects: they are not shared, not content-addressed, and the web serves the file directly, with range and step slices. GC no longer treats them as LFS roots.
forge/gc.go +4−3
| @@ -43,9 +43,10 @@ type GCRepo struct { | |||
| 43 | 43 | type GCOptions struct { | |
| 44 | 44 | Repos []GCRepo | |
| 45 | 45 | Store *lfs.Store | |
| 46 | // RunOIDs are objects named by the run queue, per repository: archived logs and | ||
| 47 | // published run artifacts. Neither is reachable from a git ref, so a sweep that only | ||
| 48 | // marked git would delete every finished log and every build output a run published. | ||
| 46 | // RunOIDs are objects named by the run queue, per repository: published run | ||
| 47 | // artifacts. They are not reachable from a git ref, so a sweep that only marked | ||
| 48 | // git would delete every build output a run published. Logs are files under the | ||
| 49 | // instance's log directory and are not part of this pool. | ||
| 49 | 50 | RunOIDs map[string][]string | |
| 50 | 51 | // Grace protects recent objects that a concurrent upload has not made reachable yet. | |
| 51 | 52 | Grace time.Duration | |