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 · 2h ago 4b8c9e1d
history blame raw 4.3 KiB
1{{define "releases"}}
2{{template "header" .}}
3{{template "repohead" (nav .Page "releases")}}
4
5<div class="page-head">
6 <div class="page-head-main">
7 <h1>Releases</h1>
8 <p class="page-sub">{{if .Tags}}{{len .Tags}} tag(s){{if .Lightweight}} · {{.Lightweight}} lightweight{{end}}{{else}}Tags with notes, artifacts, and archives.{{end}}</p>
9 </div>
10 {{if .CanManage}}<div class="page-head-actions"><a class="button" href="/{{.Name}}/releases/new">{{icon "plus"}}New release</a></div>{{end}}
11</div>
12
13{{if .Tags}}
14<div class="panel">
15 <table>
16 <tr><th>Tag</th><th>Notes</th><th>Tagger</th><th>Age</th><th>Source</th>{{if .CanManage}}<th></th>{{end}}</tr>
17 {{range .Tags}}
18 <tr>
19 <td><a href="/{{$.Name}}/releases/{{esc .Name}}">{{.Name}}</a>{{if not .Annotated}} <span class="label">lightweight</span>{{end}}</td>
20 <td class="muted">{{.Subject}}</td>
21 <td class="muted">{{if .Tagger}}{{.Tagger}}{{else}}—{{end}}</td>
22 <td class="muted">{{since .When}}</td>
23 <td><a href="/{{$.Name}}/releases/{{esc .Name}}/archive.tar">tar</a> · <a href="/{{$.Name}}/releases/{{esc .Name}}/archive.tar.gz">tar.gz</a></td>
24 {{if $.CanManage}}<td>{{if .Annotated}}<a href="/{{$.Name}}/releases/edit?tag={{urlquery .Name}}">edit notes</a>{{end}}</td>{{end}}
25 </tr>
26 {{end}}
27 </table>
28</div>
29{{else}}
30<div class="empty-state">
31 <p>No releases yet. A release is an annotated tag, so this is the whole flow:</p>
32 <pre>git tag -a v1.0.0 -F notes.md
33git push --follow-tags</pre>
34</div>
35{{end}}
36{{if .Lightweight}}
37<p class="muted">{{.Lightweight}} lightweight tag(s) are listed but carry no notes: <code>git tag -a</code>
38records a tagger and a message, which is what makes a tag a release.</p>
39{{end}}
40{{template "footer" .}}
41{{end}}
42
43{{define "release"}}
44{{template "header" .}}
45{{template "repohead" (nav .Page "releases")}}
46<div class="page-head">
47 <div class="page-head-main">
48 <h1>{{.Tag.Name}}</h1>
49 <p class="page-sub">
50 {{if .Tag.Annotated}}annotated tag{{else}}lightweight tag{{end}}
51 {{if .Tag.Tagger}}by {{.Tag.Tagger}}{{end}}
52 · {{since .Tag.When}}
53 · commit <a class="sha" href="/{{.Name}}/commit/{{.Tag.Commit}}">{{short .Tag.Commit}}</a>
54 </p>
55 </div>
56 {{if .CanEdit}}<div class="page-head-actions"><a class="button secondary" href="/{{.Name}}/releases/edit?tag={{urlquery .Tag.Name}}">{{icon "sliders-horizontal"}}Edit notes</a></div>{{end}}
57</div>
58
59{{if .Notes}}
60<div class="md">{{.Notes}}</div>
61{{else if not .Tag.Annotated}}
62<div class="empty-state">
63 <p>A lightweight tag has no notes. Annotate it (<code>git tag -a</code>) to give this release a description; the tarball below works either way.</p>
64</div>
65{{end}}
66
67<div class="card">
68 <h2>Artifacts</h2>
69 {{if .Artifacts}}
70 <table>
71 <tr><th>File</th><th>Size</th><th>SHA-256</th><th></th></tr>
72 {{range .Artifacts}}
73 <tr>
74 <td><a href="/{{$.Name}}/releases/{{esc $.Tag.Name}}/artifacts/{{.Name}}">{{.Name}}</a></td>
75 <td class="muted">{{.Size}}</td>
76 <td class="muted"><code>{{short .OID}}</code></td>
77 <td><a href="/{{$.Name}}/releases/{{esc $.Tag.Name}}/artifacts/{{.Name}}">download</a></td>
78 </tr>
79 {{end}}
80 </table>
81 <p class="muted">Bytes live once in the instance's content-addressed store, so the same
82 file on two releases costs one copy.</p>
83 {{else}}
84 <p class="muted">No artifacts attached. Push the tag first, then:</p>
85 <pre>vole release attach {{.Tag.Name}} dist/*</pre>
86 {{end}}
87</div>
88
89<div class="card">
90 <h2>Source</h2>
91 <p><a href="/{{.Name}}/releases/{{esc .Tag.Name}}/archive.tar">Download .tar</a>
92 · <a href="/{{.Name}}/releases/{{esc .Tag.Name}}/archive.tar.gz">Download .tar.gz</a></p>
93 <p class="muted">Generated from the tag when you ask for it, not stored — the same bytes on
94 every request, so a cached copy cannot go stale.</p>
95 {{if .LFSPointers}}<p class="muted">This repository tracks files with Git LFS: those files appear
96 in the tarball as pointer files, not their contents. Clone with <code>git lfs</code> for the
97 real bytes.</p>{{end}}
98</div>
99
100<h2>{{if .Prev}}{{.Count}} commit(s) since {{.Prev}}{{else}}{{.Count}} commit(s){{end}}</h2>
101<div class="panel">{{template "commitlist" .}}</div>
102{{if .Capped}}<p class="muted">Showing the first {{.CappedAt}}; the rest are in the history.</p>{{end}}
103{{template "footer" .}}
104{{end}}
105