Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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