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/lfs_scope.go +2−7

@@ -37,16 +37,11 @@ func (s *Server) scopeLFSStore() {
37 37 for _, m := range repos {
38 38 scan = append(scan, forge.GCRepo{Name: m.Name, Dir: m.Dir})
39 39 }
40 // Run logs and artifacts are roots too, and they belong to the repository whose
41 // run produced them.
40 // Run artifacts are roots too, and they belong to the repository whose run
41 // produced them.
42 42 runOIDs := map[string][]string{}
43 43 if _, err := os.Stat(s.Cfg.RunsDB()); err == nil {
44 44 if rn, err := runs.Open(s.Cfg.RunsDB()); err == nil {
45 if logs, err := rn.LogOIDs(); err == nil {
46 for repo, oids := range logs {
47 runOIDs[repo] = append(runOIDs[repo], oids...)
48 }
49 }
50 45 if arts, err := rn.ArtifactOIDs(); err == nil {
51 46 for repo, oids := range arts {
52 47 runOIDs[repo] = append(runOIDs[repo], oids...)