vole
Clone
Read only, no credentials:
https://rodent.software/git/vole.git
Write over SSH with a registered key:
git clone ssh://git@0.0.0.0: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 · 10d 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.
server/web/templates/status.html −1
| @@ -93,7 +93,6 @@ | |||
| 93 | 93 | <table> | |
| 94 | 94 | <thead><tr><th>Kind</th><th>Objects</th><th>Size</th></tr></thead> | |
| 95 | 95 | <tbody> | |
| 96 | <tr><td>CI logs</td><td>{{.LFS.Logs.Objects}}</td><td>{{bytes .LFS.Logs.Bytes}}</td></tr> | ||
| 97 | 96 | <tr><td>CI artifacts</td><td>{{.LFS.Artifacts.Objects}}</td><td>{{bytes .LFS.Artifacts.Bytes}}</td></tr> | |
| 98 | 97 | <tr><td>Repository LFS and other</td><td>{{.LFS.Other.Objects}}</td><td>{{bytes .LFS.Other.Bytes}}</td></tr> | |
| 99 | 98 | <tr class="status-total"><td>Object pool</td><td>{{.LFS.Total.Objects}}</td><td>{{bytes .LFS.Total.Bytes}}</td></tr> | |