Commit 078b91ce3e

078b91ce3e2e4073ceeac9c100dba6ae6bb695ea

parent: 97f30bdded

Verified · cmc ci/build: success ci/test: success

cmc <hello@cleberg.net> · 2026-09-20 04:57 UTC

web: copy edits across six templates

The 404 note, the SSH key and email sections, the notification notes, the
admin index, the bookmarks note, the dashboard hints and the repository
settings hints, in cmc's wording. The dashboard end-to-end test asserts
the hint it now renders.
e2e/dashboard_test.go +1 −1
@@ -97,7 +97,7 @@ func TestDashboard(t *testing.T) {
9797 "Waiting on your review", "assigned to you", "Recent activity",
9898 "from bob", "alice/app!1", "todo one", "alice/app#1",
9999 `href="/alice/app/mrs/1"`, `href="/alice/app/issues/1"`,
100 "Yours anywhere, and every one in a repository you can write to.",
100 "Your MRs across all repos.",
101101 } {
102102 if !strings.Contains(body, want) {
103103 t.Errorf("dashboard missing %q", want)
internal/web/templates/404.html +1 −1
@@ -4,7 +4,7 @@
44<div class="notfound">
55 <p class="bigcode">404</p>
66 <h1>Page not found</h1>
7 <p class="desc">nothing lives at this address — the path may be wrong,
7 <p class="desc">nothing lives at this address. the path may be wrong,
88 or the repository may be private.</p>
99 <p><a href="/">← back to {{.Site}}</a></p>
1010</div>
internal/web/templates/account.html +8 −9
@@ -48,8 +48,7 @@ Write it with a push, or edit it here.</p>
4848
4949<section id="keys"><h2>SSH keys</h2>
5050<p class="meta">Your keys are your identity here. A <code>full</code> key can run
51commands and push; a <code>git</code> key can only move git data, which is what
52a CI checkout wants.</p>
51commands and push; a <code>git</code> key can only move git data (e.g., CI).</p>
5352{{if .Keys}}<div class="tablewrap"><table class="keys nowrap">
5453<tr class="cols"><th scope="col">label</th><th scope="col">fingerprint</th><th scope="col">type</th><th scope="col">scope</th><th scope="col"><span class="vh">actions</span></th></tr>
5554{{range .Keys}}<tr>
@@ -60,7 +59,7 @@ a CI checkout wants.</p>
6059 <td class="act"><form method="post" action="/settings"><input type="hidden" name="field" value="key-remove"><input type="hidden" name="fingerprint" value="{{.Fingerprint}}">{{template "confirmfield" .Confirm}} <button type="submit" class="danger">Remove</button></form></td>
6160</tr>
6261{{end}}</table></div>
63{{else}}<p class="none">No SSH keys — which cannot be right, since you signed in.</p>{{end}}
62{{else}}<p class="none">No SSH keys? Which cannot be right, since you signed in.</p>{{end}}
6463<details class="editbox">
6564 <summary>Add an SSH key</summary>
6665 <form method="post" action="/settings" class="setform stack">
@@ -71,8 +70,8 @@ a CI checkout wants.</p>
7170 <input id="key-label" name="label" maxlength="64" placeholder="defaults to the key's comment">
7271 <label for="scope">Scope</label>
7372 <select id="scope" name="scope">
74 <option value="full">full — commands and git</option>
75 <option value="git">git — git transport only</option>
73 <option value="full">full: commands and git</option>
74 <option value="git">git: git transport only</option>
7675 </select>
7776 <button type="submit" class="btn">Add key</button>
7877 </form>
@@ -80,8 +79,8 @@ a CI checkout wants.</p>
8079</section>
8180
8281<section id="emails"><h2>Email addresses</h2>
83<p class="meta">A verified address is what ties your signed commits to this
84account, and where notifications go.</p>
82<p class="meta">A verified address ties signed commits to this
83account and where notifications go.</p>
8584{{if .Emails}}<ul class="plain">
8685{{range .Emails}}<li>{{.Address}}
8786 {{if .Primary}}<span class="chip">primary</span>{{end}}
@@ -137,14 +136,14 @@ account, and where notifications go.</p>
137136 <input type="checkbox" id="notify-mail" name="mail" value="on"{{if .MailOn}} checked{{end}}>
138137 <button type="submit" class="btn">Save</button>
139138</form>
140<p class="meta">The inbox is filed either way; this is the mail half. Login links are not activity and still arrive.</p>
139<p class="meta">Enable to receive activity alerts by email. Login links will arrive regardless of this setting.</p>
141140<form method="post" action="/settings" class="setform">
142141 <input type="hidden" name="field" value="notify-watch">
143142 <label for="notify-watch">Watch repositories you can write to</label>
144143 <input type="checkbox" id="notify-watch" name="watch" value="on"{{if .WatchOn}} checked{{end}}>
145144 <button type="submit" class="btn">Save</button>
146145</form>
147<p class="meta">Every issue and merge request on those repositories, as if you had watched each. A watch or mute on a repository still wins.</p>
146<p class="meta">Alerts for every issue and merge request on those repositories. A watch or mute on a repository has priority over this setting.</p>
148147</section>
149148
150149<section id="appearance"><h2>Appearance</h2>
internal/web/templates/admin.html +2 −2
@@ -2,8 +2,8 @@
22{{define "title"}}admin · {{.Site}}{{end}}
33{{define "content"}}
44<h1>Admin</h1>
5<p class="meta">Server build {{.Commit}}. Every background worker's backlog, the same read as <code>gitbay dashboard --json</code> for an admin.</p>
6<p class="meta"><a href="/admin/users">Accounts</a> — every account, with promote, demote, disable and enable.</p>
5<p class="meta">Server build {{.Commit}}. Every background worker's backlog. This is the same read as <code>gitbay dashboard --json</code> for an admin.</p>
6<p class="meta"><a href="/admin/users">Accounts</a>: view every instance user account.</p>
77
88<div class="withcol narrow">
99<nav class="sidecol" aria-label="Sections">
internal/web/templates/bookmarks.html +3 −3
@@ -2,8 +2,8 @@
22{{define "content"}}
33<h1>Bookmarks</h1>
44<p class="meta">Repositories you saved to come back to. A pin is private quick
5access to your own work; a bookmark says something is worth returning to, and
6its count is public.</p>
5 access to your own work; a bookmark is a public vote to save access to another
6 repo.</p>
77<ul class="repolist">
88{{range .Bookmarks}}<li>
99 <p class="title"><a href="/{{.Path}}">{{.Path}}</a>
@@ -11,6 +11,6 @@ its count is public.</p>
1111 <span class="count">{{.Bookmarks}}</span></p>
1212 {{if .Description}}<p class="desc">{{.Description}}</p>{{end}}
1313</li>
14{{else}}<li class="empty">nothing bookmarked yet — open a repository and press Bookmark</li>{{end}}
14{{else}}<li class="empty">nothing bookmarked yet. open a repository and press Bookmark</li>{{end}}
1515</ul>
1616{{end}}
internal/web/templates/dashboard.html +3 −3
@@ -39,9 +39,9 @@
3939</div>
4040{{if .Reviews}}{{template "queue" dict "ID" "reviews" "Title" "Waiting on your review" "Items" .Reviews "Kind" "mrs" "Empty" "Nothing waiting on you"}}{{end}}
4141{{if .Assigned}}{{template "queue" dict "ID" "assigned" "Title" "Assigned to you" "Items" .Assigned "Kind" "issues" "Empty" "Nothing assigned to you"}}{{end}}
42{{if .MRs}}{{template "queue" dict "ID" "mrs" "Title" "Open merge requests" "Items" .MRs "Kind" "mrs" "Empty" "No open merge requests" "Hint" "Yours anywhere, and every one in a repository you can write to."}}{{end}}
43{{if .Issues}}{{template "queue" dict "ID" "issues" "Title" "Open issues" "Items" .Issues "Kind" "issues" "Empty" "No open issues" "Hint" "Yours anywhere, and every one in a repository you can write to."}}{{end}}
44{{if not (or .Reviews .Assigned .MRs .Issues)}}<p class="none">Nothing open anywhere you can write to.</p>{{end}}
42{{if .MRs}}{{template "queue" dict "ID" "mrs" "Title" "Open merge requests" "Items" .MRs "Kind" "mrs" "Empty" "No open merge requests" "Hint" "Your MRs across all repos."}}{{end}}
43{{if .Issues}}{{template "queue" dict "ID" "issues" "Title" "Open issues" "Items" .Issues "Kind" "issues" "Empty" "No open issues" "Hint" "Your issues across all repos."}}{{end}}
44{{if not (or .Reviews .Assigned .MRs .Issues)}}<p class="none">Nothing open.</p>{{end}}
4545</section>
4646
4747<aside class="feedcol" aria-label="Recent activity">
internal/web/templates/settings.html +8 −8
@@ -44,7 +44,7 @@
4444</form>
4545{{if .Branches}}<form method="post" action="{{$base}}" class="setform">
4646 <input type="hidden" name="field" value="default-branch">
47 <div><label for="default-branch">Default branch</label><p class="hint">What a clone checks out and what CI builds on trigger.</p></div>
47 <div><label for="default-branch">Default branch</label></div>
4848 <div><select id="default-branch" name="default-branch">{{$cur := .Repo.DefaultBranch}}{{range .Branches}}<option value="{{.Name}}"{{if eq .Name $cur}} selected{{end}}>{{.Name}}</option>{{end}}</select></div>
4949 <div><button type="submit" class="btn">Save</button></div>
5050</form>{{end}}
@@ -53,7 +53,7 @@
5353<section id="access"><h2>Access</h2>
5454<form method="post" action="{{$base}}" class="setform">
5555 <input type="hidden" name="field" value="visibility">
56 <div><span class="fieldname">Visibility</span><p class="hint">Private repositories answer not found to everyone without access, including in search and on your profile.</p></div>
56 <div><span class="fieldname">Visibility</span></div>
5757 <div class="check">
5858 <label><input type="radio" name="visibility" value="public"{{if eq .Repo.Visibility "public"}} checked{{end}}> Public</label>
5959 <label><input type="radio" name="visibility" value="private"{{if eq .Repo.Visibility "private"}} checked{{end}}> Private</label>
@@ -62,7 +62,7 @@
6262</form>
6363<form method="post" action="{{$base}}" class="setform">
6464 <input type="hidden" name="field" value="git-daemon">
65 <div><label for="git-daemon">Serve over git://</label><p class="hint">Unauthenticated, unencrypted read access on port 9418. Public repositories only.</p></div>
65 <div><label for="git-daemon">Serve over git://</label><p class="hint">Public repositories only.</p></div>
6666 <div class="check"><input type="checkbox" id="git-daemon" name="git-daemon" value="on"{{if .Repo.Settings.GitDaemon}} checked{{end}}></div>
6767 <div><button type="submit" class="btn">Save</button></div>
6868</form>
@@ -72,13 +72,13 @@
7272<p class="meta">Checked before a merge, in this order: checks, approvals, resolved threads, signatures.</p>
7373<form method="post" action="{{$base}}" class="setform">
7474 <input type="hidden" name="field" value="require-checks">
75 <div><label for="require-checks">Required checks</label><p class="hint">A request waits until every CI job that would report on its head has succeeded.</p></div>
75 <div><label for="require-checks">Required checks</label><p class="hint">Requires CI to succeed.</p></div>
7676 <div class="check"><input type="checkbox" id="require-checks" name="require-checks" value="on"{{if .Repo.Settings.RequireChecks}} checked{{end}}></div>
7777 <div><button type="submit" class="btn">Save</button></div>
7878</form>
7979<form method="post" action="{{$base}}" class="setform">
8080 <input type="hidden" name="field" value="require-approvals">
81 <div><label for="approvals">Approvals</label><p class="hint">Approvals from people with write access. Zero means none required.</p></div>
81 <div><label for="approvals">Approvals</label><p class="hint">Approvals from anyone with write access. Zero means none required.</p></div>
8282 <div><input type="number" id="approvals" name="approvals" min="0" max="10" value="{{.Repo.Settings.RequireApprovals}}"></div>
8383 <div><button type="submit" class="btn">Save</button></div>
8484</form>
@@ -90,7 +90,7 @@
9090</form>
9191<form method="post" action="{{$base}}" class="setform">
9292 <input type="hidden" name="field" value="require-codeowners">
93 <div><label for="require-codeowners">CODEOWNERS</label><p class="hint">Owners of every touched path must approve.</p></div>
93 <div><label for="require-codeowners">CODEOWNERS</label><p class="hint">Code owners must approve.</p></div>
9494 <div class="check"><input type="checkbox" id="require-codeowners" name="require-codeowners" value="on"{{if .Repo.Settings.RequireCodeowners}} checked{{end}}></div>
9595 <div><button type="submit" class="btn">Save</button></div>
9696</form>
@@ -151,12 +151,12 @@
151151<section id="deps"><h2>Dependencies</h2>
152152<form method="post" action="{{$base}}" class="setform">
153153 <input type="hidden" name="field" value="deps">
154 <div><label for="deps-enabled">Check for updates</label><p class="hint">Compares the manifests on <code>{{.Repo.DefaultBranch}}</code> against proxy.golang.org, npm, crates.io, and PyPI once a day, and tracks what is behind in an issue. Checking a private repository tells those registries what it depends on.</p></div>
154 <div><label for="deps-enabled">Check for updates</label><p class="hint">Evaluates the manifests on <code>{{.Repo.DefaultBranch}}</code> and opens an issue. Go, NPM, Crates, and PyPI only.</p></div>
155155 <div class="check"><input type="checkbox" id="deps-enabled" name="deps" value="on"{{if .DepsEnabled}} checked{{end}}></div>
156156 <div><button type="submit" class="btn">Save</button></div>
157157</form>
158158{{if .DepsEnabled}}
159<p class="meta">Last checked {{if .Deps.LastCheck}}{{when .Deps.LastCheck}}{{else}}never{{end}}{{if .Deps.IssueNumber}} · tracked in <a href="/{{.Repo.OwnerName}}/{{.Repo.Name}}/issues/{{.Deps.IssueNumber}}">#{{.Deps.IssueNumber}}</a>{{end}}</p>
159<p class="meta">Last checked {{if .Deps.LastCheck}}{{when .Deps.LastCheck}}{{else}}never{{end}}{{if .Deps.IssueNumber}} · <a href="/{{.Repo.OwnerName}}/{{.Repo.Name}}/issues/{{.Deps.IssueNumber}}">#{{.Deps.IssueNumber}}</a>{{end}}</p>
160160{{if .Deps.LastError}}<p class="error" role="alert">{{.Deps.LastError}}</p>{{end}}
161161{{if .Deps.Behind}}<div class="tablewrap"><table class="keys">
162162<tr class="cols"><th scope="col">dependency</th><th scope="col">pinned</th><th scope="col">latest</th></tr>