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/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

Add browser auth, contributor access, and gated CI

6c84d387e5f608360e30484a1a5b1cff41076850 · Keenan Nemetz · 16d ago · parent c36d5073

Add browser auth, contributor access, and gated CI

Browser sign-in now uses passkeys. Enrollment links are one-time, sessions are hashed in users.db, and issue/comment/approval writes use the session account. HTTPS public_url is required for WebAuthn.

Add the contributor role between read and maintain. Contributors can discuss and open change requests, and may push only refs/heads/contrib/<account-id>/. Contributor CI is held per commit until a maintainer allows the exact tip from the repository page.

Rename the write role to maintain. write remains accepted as the historical spelling, and access.Write remains as a Go alias so existing callers and ACL rows keep working.

Update the web, CLI, queue schema, and guides for the new flows, and cover the role, namespace, auth, and CI-gating paths in tests.

server/web/releases.go +2−2

@@ -49,7 +49,7 @@ func (w *Web) Releases(rw http.ResponseWriter, r *http.Request) {
49 49 Name string
50 50 Tags []git.Tag
51 51 Lightweight int
52 }{w.base(m.Name + " · releases"), m.Name, tags, light}, 0)
52 }{w.page(r, m.Name+" · releases"), m.Name, tags, light}, 0)
53 53 }
54 54
55 55 func (w *Web) ReleaseView(rw http.ResponseWriter, r *http.Request) {
@@ -112,7 +112,7 @@ func (w *Web) ReleaseView(rw http.ResponseWriter, r *http.Request) {
112 112 Artifacts []metadata.Artifact
113 113 ArtifactBytes int64
114 114 }{
115 Page: w.base(m.Name + " · " + t.Name),
115 Page: w.page(r, m.Name+" · "+t.Name),
116 116 Name: m.Name,
117 117 Tag: t,
118 118 Notes: notes,