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.

Code

392 commit(s) on main

Merge change request 01M70WES5ZZDJ6RP226WB11BBZ: Let people rename and remove their own passkeys keenan · 26m ago 4b8c9e1d
history blame raw 7.7 KiB
1{{define "run"}}
2{{template "header" .}}
3{{template "repohead" (nav .Page "runs")}}
4<div class="page-head">
5 <div class="page-head-main">
6 <h1>Run · {{.Run.JobTitle}}</h1>
7 <p class="page-sub">
8 <span class="status {{.Run.Status}}">{{runstatus .Run.Status}}</span>
9 {{if .Run.TriggerTitle}}· {{.Run.TriggerTitle}}{{end}}
10 {{if ne .Run.JobTitle .Run.WorkflowTitle}}· {{.Run.WorkflowTitle}}{{end}}
11 · {{if .Run.Tag}}tag {{.Run.Tag}}{{else}}{{.Run.Branch}}{{end}}
12 at <a class="sha" href="/{{.Name}}/commit/{{.Run.SHA}}">{{short .Run.SHA}}</a>
13 · attempt {{.Run.Attempts}}
14 </p>
15 {{if .Run.JobDescription}}<p class="page-sub">{{.Run.JobDescription}}</p>{{end}}
16 {{if and .Run.WorkflowDescription (ne .Run.WorkflowDescription .Run.JobDescription)}}<p class="page-sub">{{.Run.WorkflowDescription}}</p>{{end}}
17 </div>
18 {{if or .CanCancel .CanRerun}}
19 <div class="page-head-actions">
20 {{if .CanCancel}}<form class="inline" method="post" action="/{{.Name}}/runs/{{.Run.ID}}/cancel">
21 <input type="hidden" name="csrf" value="{{.CSRF}}">
22 <button type="submit" class="warn">{{icon "circle-x"}}{{if eq .Run.Status "running"}}Stop running run{{else}}Cancel queued run{{end}}</button>
23 </form>{{end}}
24 {{if .CanRerun}}<form class="inline" method="post" action="/{{.Name}}/runs/{{.Run.ID}}/rerun">
25 <input type="hidden" name="csrf" value="{{.CSRF}}">
26 <button type="submit" class="secondary">{{icon "rotate-ccw"}}Rerun</button>
27 </form>{{end}}
28 </div>
29 {{end}}
30</div>
31
32<div class="run-summary">
33 <div class="card">
34 <span class="run-summary-label">{{icon "history"}}Duration</span>
35 {{if .Run.Started.IsZero}}
36 <strong>{{duration .Wait}}</strong>
37 <span class="status-note">{{if eq .Run.Status "queued"}}waiting for a runner{{else}}queued{{end}}</span>
38 {{else}}
39 <strong>{{duration .Duration}}</strong>
40 <span class="status-note">{{if .Run.Finished.IsZero}}running now{{else}}finished {{since .Run.Finished.Unix}}{{end}}</span>
41 {{end}}
42 </div>
43 <div class="card">
44 <span class="run-summary-label">{{icon "history"}}Queue wait</span>
45 <strong>{{duration .Wait}}</strong>
46 <span class="status-note">{{if .Run.Started.IsZero}}so far{{else}}before the first runner leased it{{end}}</span>
47 </div>
48 <div class="card">
49 <span class="run-summary-label">{{icon "server"}}Environment</span>
50 {{if .Run.OS}}<strong>{{.Run.OS}}/{{.Run.Arch}}</strong>{{else}}<strong class="muted">not reported</strong>{{end}}
51 <span class="status-note">{{if .Run.Image}}<code>{{if .Run.ImageFile}}{{.Run.ImageFile}}{{else}}{{.Run.Image}}{{end}}</code>{{if .Run.Runtime}} via {{.Run.Runtime}}{{end}}{{else}}no image recorded{{end}}</span>
52 {{if .Run.Services}}<span class="status-note">services: {{range $i, $s := .Run.Services}}{{if $i}}, {{end}}{{$s.ID}} · <code>{{$s.Image}}</code>{{end}}</span>{{end}}
53 </div>
54 <div class="card">
55 <span class="run-summary-label">{{icon "git-commit-horizontal"}}Commit</span>
56 <strong><a class="sha" href="/{{.Name}}/commit/{{.Run.SHA}}">{{short .Run.SHA}}</a></strong>
57 <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>
58 </div>
59 <div class="card">
60 <span class="run-summary-label">{{icon "file-code"}}Workflow</span>
61 <strong><a href="/{{.Name}}/blob/{{.Run.SHA}}/{{pathurl .Run.Workflow}}">{{.Run.WorkflowTitle}}</a></strong>
62 <span class="status-note"><code>{{.Run.Workflow}}</code></span>
63 </div>
64</div>
65
66{{if eq .Run.Status "canceled"}}
67<p class="muted">{{if .Run.CancelRequested}}Stopped while running{{else}}Canceled while queued{{end}}{{if .Run.CancelActor}} by <strong>{{.Run.CancelActor}}</strong>{{end}}.</p>
68{{else if eq .Run.Status "error"}}
69<p class="muted">This job never started, so nothing about {{short .Run.SHA}} was tested:
70{{if .Run.FailureMessage}}the runner said <code>{{.Run.FailureMessage}}</code>.{{else}}the runner did not record why.{{end}}
71Re-run it once the machine can build; the commit is not what failed.</p>
72{{else if and (eq .Run.Status "running") .Run.CancelRequested}}
73<p class="muted">Stopping{{if .Run.CancelActor}} at the request of <strong>{{.Run.CancelActor}}</strong>{{end}} at the runner's next heartbeat.</p>
74{{end}}
75{{if .Run.Bot}}<p class="muted">acted as <strong>{{.Run.Bot}}</strong> with a credential for this run</p>{{end}}
76{{if .Run.OS}}<p class="muted">ran on {{.Run.OS}}/{{.Run.Arch}}{{if .Run.Image}} · in {{if .Run.ImageFile}}image-file <code>{{.Run.ImageFile}}</code> ({{short .Run.ImageSHA}}){{else}}<code>{{.Run.Image}}</code>{{end}} via {{.Run.Runtime}}{{end}}{{if .Run.Network}} · {{if eq .Run.Network "none"}}no network{{else}}network {{.Run.Network}}{{end}}{{end}}</p>{{end}}
77{{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}}
78{{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}}
79
80<h2 class="with-more"><span>{{icon "terminal"}}Logs</span>{{if .HasLog}} <a class="more" href="/{{.Name}}/runs/{{.Run.ID}}/log?attempt={{.LogAttempt}}&amp;download=1">{{icon "file"}}Download full log</a>{{end}}</h2>
81{{if .HasLog}}
82{{if gt (len .Logs) 1}}<div class="run-logbar">
83 {{range .Logs}}<a class="chip" href="/{{$.Name}}/runs/{{$.Run.ID}}/log?attempt={{.Attempt}}">{{icon "file"}}attempt {{.Attempt}}</a> {{end}}
84</div>{{end}}
85<div class="card run-log-card">
86 {{if .Live}}
87 <details class="run-log run-log-live" open>
88 <summary>
89 {{icon "terminal"}}<span class="run-log-title">Job output</span>
90 <span class="run-log-meta">attempt {{.LogAttempt}} · <span class="run-log-state">live</span></span>
91 </summary>
92 <pre class="run-log-text" data-log-stream
93 data-log-url="/{{.Name}}/runs/{{.Run.ID}}/log?attempt={{.LogAttempt}}"
94 data-log-final="0"></pre>
95 </details>
96 {{end}}
97 {{range .Steps}}
98 <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}}>
99 <summary>
100 <span class="run-step-num">{{.Number}}</span>
101 <span class="run-step-name">{{.Name}}</span>
102 <span class="status {{.Status}}">{{.Label}}</span>
103 <span class="run-step-meta">{{if .Duration}}{{duration .Duration}}{{else}}—{{end}}</span>
104 </summary>
105 {{if .LogURL}}<pre class="run-log-text"></pre>{{else}}<p class="run-log-empty">{{if eq .Status "running"}}This step is running; its output is in the job output above.{{else if eq .Status "pending"}}Waiting for this step.{{else if eq .Status "queued"}}Waiting for a runner.{{else if eq .Status "not run"}}Not run.{{else}}No output was captured for this step.{{end}}</p>{{end}}
106 </details>
107 {{end}}
108</div>
109{{else}}
110<div class="empty-state"><p>No log was archived for this run.</p></div>
111{{end}}
112
113<h2>{{icon "hard-drive"}}Artifacts</h2>
114{{if .Artifacts}}
115<div class="panel">
116 <table>
117 <tr><th>File</th><th>Size</th><th>SHA-256</th><th></th></tr>
118 {{range .Artifacts}}
119 <tr>
120 <td><a href="/{{$.Name}}/runs/{{$.Run.ID}}/artifacts/{{.Name}}">{{.Name}}</a></td>
121 <td class="muted">{{bytes .Size}}</td>
122 <td class="muted"><code>{{short .OID}}</code></td>
123 <td><a href="/{{$.Name}}/runs/{{$.Run.ID}}/artifacts/{{.Name}}">download</a></td>
124 </tr>
125 {{end}}
126 </table>
127</div>
128<p class="muted">Built from {{short .Run.SHA}} by this run. The bytes live once in the
129instance's content-addressed store, and are swept only when nothing names them.</p>
130{{else}}
131<div class="empty-state"><p>No artifacts published by this run.</p></div>
132{{end}}
133{{template "footer" .}}
134{{end}}
135