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.
Phase 7 slice 1: review on the web, so approving does not start with a clone
78912785b00227cffe3f8fb26b057cd60159a6b4 · Keenan Nemetz · 17d ago · parent 9bea7f11
Phase 7 slice 1: review on the web, so approving does not start with a clone Phase 7 is re-scoped: signing is deferred (the SSH handshake already establishes who pushed, and there is no third-party verifier here), and the phase is now about the experience of using the forge. - GET /r/<repo>/commit/<sha>: a commit's metadata and the patch it introduced, per-file hunks with line numbers; the commit list links to it - change requests show the same diff, computed three-dot: a review is what the branch adds since it diverged, not every commit main gained meanwhile - diffs are capped at 512 KiB and labelled when cut, binary files are named rather than faked, and every line is escaped (a <script> line is a test) - the repository README renders on its home page and markdown blobs render as markdown, through the sanitiser issues already use
README.md +9−4
| @@ -41,7 +41,8 @@ Working today: | |||
| 41 | 41 | - Issues and change requests stored as files in the repository on the `vole` | |
| 42 | 42 | branch, validated at push time and rendered read-only on the web | |
| 43 | 43 | - Review as a git artifact: an approval names the exact commit it reviewed, and | |
| 44 | `git push` is the merge, gated by `pre-receive` | ||
| 44 | `git push` is the merge, gated by `pre-receive`. The web shows the review: a commit | ||
| 45 | page with its patch, and a change request with the diff that would land | ||
| 45 | 46 | - CI: workflows in `.vole/workflows/*.yaml`, validated by the push that introduces | |
| 46 | 47 | them. A push queues jobs; `vole runner` leases one over SSH with the same key, runs | |
| 47 | 48 | the shell steps, heartbeats and reports the log. Protected branches can require | |
| @@ -59,7 +60,9 @@ Working today: | |||
| 59 | 60 | - An instance ed25519 key generated at first boot (used for metadata signing in | |
| 60 | 61 | Phase 7) | |
| 61 | 62 | ||
| 62 | Not yet: workflow artifact uploads, signature verification, LFS locking. | ||
| 63 | Not yet: workflow artifact uploads, LFS locking. Signature verification is deferred, | ||
| 64 | not planned: the SSH handshake already establishes who pushed, so signing approvals | ||
| 65 | would restate it for a verifier this deployment does not have (see the roadmap). | ||
| 63 | 66 | ||
| 64 | 67 | ## Try it | |
| 65 | 68 | ||
| @@ -162,8 +165,10 @@ vole request approve <id> --as <your-name> | |||
| 162 | 165 | git push origin feature:refs/heads/main | |
| 163 | 166 | ``` | |
| 164 | 167 | ||
| 165 | The push is refused unless the new tip *is* the approved commit, or is a merge | ||
| 166 | whose parents are the branch tip and the approved commit. That second shape is why | ||
| 168 | The request page shows what would land — the diff against the merge base, the CI | ||
| 169 | checks for the head, and who has approved which commit — so a review does not start | ||
| 170 | with a clone. The push is refused unless the new tip *is* the approved commit, or is a | ||
| 171 | merge whose parents are the branch tip and the approved commit. That second shape is why | ||
| 167 | 172 | "merge, then push" works while "append a commit and call it approved" does not. | |
| 168 | 173 | ||
| 169 | 174 | ```sh | |