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.
Make the run list say what triggered each run
57dc79afa8097830de03fc2fc2c19561470b6d36 · Keenan Nemetz · 6d ago · parent 338a19dd
Make the run list say what triggered each run The runs table said only which ref a run used, so a push, an issue event and a manual dispatch looked alike. Give each run a TriggerTitle and show it in a "Triggered by" column; the run page uses the same words. Drop the separate workflows page. The run list is where a job is found, and the run page now links the workflow definition it ran, so a second page listing the same jobs only split the answer. Show the full log viewer only while a run is going. A finished run has per-step logs, and the full log is a download rather than a second copy of every step's output.
server/web/templates/run.html +13−6
| @@ -6,8 +6,8 @@ | |||
| 6 | 6 | <h1>Run · {{.Run.JobTitle}}</h1> | |
| 7 | 7 | <p class="page-sub"> | |
| 8 | 8 | <span class="status {{.Run.Status}}">{{.Run.Status}}</span> | |
| 9 | {{if .Run.Trigger}}· {{.Run.Trigger}}{{if .Run.TriggerAction}} {{.Run.TriggerAction}}{{end}}{{end}} | ||
| 10 | · {{.Run.WorkflowTitle}} | ||
| 9 | {{if .Run.TriggerTitle}}· {{.Run.TriggerTitle}}{{end}} | ||
| 10 | {{if ne .Run.JobTitle .Run.WorkflowTitle}}· {{.Run.WorkflowTitle}}{{end}} | ||
| 11 | 11 | · {{if .Run.Tag}}tag {{.Run.Tag}}{{else}}{{.Run.Branch}}{{end}} | |
| 12 | 12 | at <a class="sha" href="/r/{{.Name}}/commit/{{.Run.SHA}}">{{short .Run.SHA}}</a> | |
| 13 | 13 | · attempt {{.Run.Attempts}} | |
| @@ -55,6 +55,11 @@ | |||
| 55 | 55 | <strong><a class="sha" href="/r/{{.Name}}/commit/{{.Run.SHA}}">{{short .Run.SHA}}</a></strong> | |
| 56 | 56 | <span class="status-note">{{if .Run.Tag}}tag {{.Run.Tag}}{{else}}branch {{.Run.Branch}}{{end}}{{if eq .Run.Status "failed"}} · exit {{.Run.ExitCode}}{{end}}</span> | |
| 57 | 57 | </div> | |
| 58 | <div class="card"> | ||
| 59 | <span class="run-summary-label">{{icon "file-code"}}Workflow</span> | ||
| 60 | <strong><a href="/r/{{.Name}}/blob/{{.Run.SHA}}/{{pathurl .Run.Workflow}}">{{.Run.WorkflowTitle}}</a></strong> | ||
| 61 | <span class="status-note"><code>{{.Run.Workflow}}</code></span> | ||
| 62 | </div> | ||
| 58 | 63 | </div> | |
| 59 | 64 | ||
| 60 | 65 | {{if eq .Run.Status "canceled"}} | |
| @@ -67,21 +72,23 @@ | |||
| 67 | 72 | {{if .Attestation}}<p class="muted">reported by <strong>{{.Signer}}</strong> · the instance accepted this result from that account's runner connection, and logged it</p>{{end}} | |
| 68 | 73 | {{if .Counts}}<p class="muted">counts as a check for this repository</p>{{else if .CountsWhy}}<p class="muted">does not count as a check: {{.CountsWhy}}</p>{{end}} | |
| 69 | 74 | ||
| 70 | <h2>{{icon "terminal"}}Logs</h2> | ||
| 75 | <h2 class="with-more"><span>{{icon "terminal"}}Logs</span>{{if .HasLog}} <a class="more" href="/r/{{.Name}}/runs/{{.Run.ID}}/log?attempt={{.LogAttempt}}&download=1">{{icon "file"}}Download full log</a>{{end}}</h2> | ||
| 71 | 76 | {{if .HasLog}} | |
| 72 | 77 | {{if gt (len .Logs) 1}}<div class="run-logbar"> | |
| 73 | 78 | {{range .Logs}}<a class="chip" href="/r/{{$.Name}}/runs/{{$.Run.ID}}/log?attempt={{.Attempt}}">{{icon "file"}}attempt {{.Attempt}}</a> {{end}} | |
| 74 | 79 | </div>{{end}} | |
| 75 | 80 | <div class="card run-log-card"> | |
| 76 | <details class="run-log run-log-live" {{if .Live}}open{{end}}> | ||
| 81 | {{if .Live}} | ||
| 82 | <details class="run-log run-log-live" open> | ||
| 77 | 83 | <summary> | |
| 78 | 84 | {{icon "terminal"}}<span class="run-log-title">Job output</span> | |
| 79 | <span class="run-log-meta">attempt {{.LogAttempt}} · <span class="run-log-state">{{if .Live}}live{{else}}complete{{end}}</span></span> | ||
| 85 | <span class="run-log-meta">attempt {{.LogAttempt}} · <span class="run-log-state">live</span></span> | ||
| 80 | 86 | </summary> | |
| 81 | 87 | <pre class="run-log-text" data-log-stream | |
| 82 | 88 | data-log-url="/r/{{.Name}}/runs/{{.Run.ID}}/log?attempt={{.LogAttempt}}" | |
| 83 | data-log-final="{{if .Live}}0{{else}}1{{end}}"></pre> | ||
| 89 | data-log-final="0"></pre> | ||
| 84 | 90 | </details> | |
| 91 | {{end}} | ||
| 85 | 92 | {{range .Steps}} | |
| 86 | 93 | <details class="run-log{{if .LogURL}} run-step-log{{end}}"{{if .LogURL}} hx-get="{{.LogURL}}" hx-trigger="toggle once" hx-target="find pre" hx-swap="textContent"{{end}}> | |
| 87 | 94 | <summary> | |