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.

docs/ci.md +19−1

@@ -39,6 +39,24 @@ Triggers work like this:
39 39 When a push starts a job, Vole remembers the exact commit and the exact workflow
40 40 file. Editing the workflow later does not change a job that is already queued.
41 41
42 ## Contributor branches
43
44 A push to `refs/heads/contrib/<account-id>/...` queues no work by itself. Those
45 branches contain code from outside the project's maintainer group, and running a
46 workflow executes it on a runner. CI is held until a maintainer or admin opens the
47 repository page and chooses **Allow CI for this tip** next to the contributor
48 branch.
49
50 The approval is keyed by the exact commit, not by the branch. A new commit or a
51 force-push is a new decision, so the contributor cannot push once and inherit
52 approval forever. The approval is stored in the CI queue database, so a
53 reconciliation or a temporary queue outage does not silently run an unapproved
54 tip.
55
56 Allowing CI queues every workflow that applies to the branch. Workflows with no
57 `on.push.branches` filter run on every branch, including names with slashes such
58 as contributor branches.
59
42 60 You can check workflows locally before pushing:
43 61
44 62 ```sh
@@ -110,7 +128,7 @@ vole admin acl runners demo --remove ci-runner-1 # remove one account
110 128 vole admin acl runners demo --clear # back to admins only
111 129 ```
112 130
113 Admins always count. For everyone else, a writer running CI on their laptop does
131 Admins always count. For everyone else, a maintainer running CI on their laptop does
114 132 not turn a required check green. The result is still recorded, and the run page
115 133 says whether it counts.
116 134