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/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/status.go +1−11

@@ -35,7 +35,6 @@ type statusStorageView struct {
35 35
36 36 type statusLFSView struct {
37 37 Total statusObjectCount
38 Logs statusObjectCount
39 38 Artifacts statusObjectCount
40 39 Other statusObjectCount
41 40 Err string
@@ -197,15 +196,9 @@ func (w *Web) lfsUsage() statusLFSView {
197 196 v.Disabled = true
198 197 return v
199 198 }
200 logs, artifacts := map[string]bool{}, map[string]bool{}
199 artifacts := map[string]bool{}
201 200 var problems []string
202 201 if w.Runs != nil {
203 logOIDs, err := w.Runs.LogOIDs()
204 if err != nil {
205 problems = append(problems, "run logs: "+err.Error())
206 } else {
207 logs = objectSet(logOIDs)
208 }
209 202 artifactOIDs, err := w.Runs.ArtifactOIDs()
210 203 if err != nil {
211 204 problems = append(problems, "run artifacts: "+err.Error())
@@ -217,9 +210,6 @@ func (w *Web) lfsUsage() statusLFSView {
217 210 v.Total.Objects++
218 211 v.Total.Bytes += size
219 212 switch {
220 case logs[oid]:
221 v.Logs.Objects++
222 v.Logs.Bytes += size
223 213 case artifacts[oid]:
224 214 v.Artifacts.Objects++
225 215 v.Artifacts.Bytes += size