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.

Identify accounts by their registered name

62576fa8157d431dcf2d360f3ebe481de77bda03 · Keenan Nemetz · 14d ago · parent 642e5994

Identify accounts by their registered name

Drop the internal account id and display name. Users, keys, passkeys,
invites, sessions, ACL entries, approvals, locks and CI records now all
use the registered name as the single identity.

The roster migrates in place: old id-keyed tables are rebuilt around the
name, and access-rule/lock references are rewritten through the same
mapping. Display-name editing and whoami --id are removed.

server/hook/checks.go +5−5

@@ -20,7 +20,7 @@ import (
20 20 // counts when the host has allowed the account that reported it: a required check is
21 21 // a claim about a commit, and without that rule any writer could satisfy it by
22 22 // running CI on their own machine and saying it passed.
23 func checkGaps(g *git.Repo, runsDB, repo, sha, branch string, a *access.ACL, names func(string) string) ([]string, error) {
23 func checkGaps(g *git.Repo, runsDB, repo, sha, branch string, a *access.ACL) ([]string, error) {
24 24 wfs, problems := ci.At(g, sha)
25 25 if len(problems) > 0 {
26 26 return nil, fmt.Errorf("cannot read the workflows at %s: %s", format.SHA(sha), strings.Join(problems, "; "))
@@ -88,8 +88,8 @@ func checkGaps(g *git.Repo, runsDB, repo, sha, branch string, a *access.ACL, nam
88 88 "repository (runners: %s) — so the result is recorded and does not count. "+
89 89 "An admin can allow that account with `vole admin acl runners %s --add %s`, "+
90 90 "or a permitted runner can run the job",
91 wf.Path, job.ID, format.SHA(sha), names(att.Signer),
92 runnerSummary(a, names), repo, att.Signer))
91 wf.Path, job.ID, format.SHA(sha), att.Signer,
92 runnerSummary(a), repo, att.Signer))
93 93 }
94 94 }
95 95 }
@@ -98,13 +98,13 @@ func checkGaps(g *git.Repo, runsDB, repo, sha, branch string, a *access.ACL, nam
98 98
99 99 // runnerSummary renders the allowlist for a message. Admins are named as implicit
100 100 // because an operator reading the refusal needs to know who already counts.
101 func runnerSummary(a *access.ACL, names func(string) string) string {
101 func runnerSummary(a *access.ACL) string {
102 102 if len(a.Runners) == 0 {
103 103 return "none named, so only admins"
104 104 }
105 105 out := make([]string, 0, len(a.Runners))
106 106 for _, r := range a.Runners {
107 out = append(out, names(r))
107 out = append(out, r)
108 108 }
109 109 return strings.Join(out, ", ") + " and admins"
110 110 }