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.
Build out the forge web UI
f09ef39efe44de693748053a7b596ef328fcf06b · Keenan Nemetz · 15d ago · parent 70b70264
Build out the forge web UI Turn the web surface into a compact, server-rendered forge with HTMX as the progressive dynamic layer. - Split templates and assets into embedded files; add a tokenised dark theme, Lucide icons, and vendored HTMX. - Add the repository Overview page and a separate chronological Activity feed with type filters and HTMX fragment updates. - Finish the issue and change workflows: create pages, comments, close/reopen, labels and assignees, approval, discussion, line-anchored review comments, and HTMX list filters. - Add syntax-highlighted blobs, contributor/statistics derivation, branch-aware code browsing, and a repository Runs list. - Add a loopback-only development login for local write testing, with explicit configuration and listener checks. - Extend tests for the new pages, fragments, labels, assignees, anchors, and development login.
server/integration_test.go +2−2
| @@ -417,7 +417,7 @@ func TestPushOverSSHThenReadOverBothTransports(t *testing.T) { | |||
| 417 | 417 | ||
| 418 | 418 | // The web shows it without any login. | |
| 419 | 419 | if code, body := f.get("/r/" + f.repo); code != 200 || !strings.Contains(body, "readme.md") { | |
| 420 | t.Fatalf("repo page: %d", code) | ||
| 420 | t.Fatalf("overview page: %d", code) | ||
| 421 | 421 | } | |
| 422 | 422 | if code, body := f.get("/r/" + f.repo + "/blob/main/readme.md"); code != 200 || !strings.Contains(body, "hello from vole") { | |
| 423 | 423 | t.Fatalf("blob page: %d", code) | |
| @@ -1491,7 +1491,7 @@ func TestIssueFiltersAndSearch(t *testing.T) { | |||
| 1491 | 1491 | } | |
| 1492 | 1492 | ||
| 1493 | 1493 | for _, c := range []struct{ query, want string }{ | |
| 1494 | {"", "Docs typo"}, | ||
| 1494 | {"?state=all", "Docs typo"}, | ||
| 1495 | 1495 | {"?label=bug", "Segfault on startup"}, | |
| 1496 | 1496 | {"?state=closed", "Docs typo"}, | |
| 1497 | 1497 | {"?q=parser", "Slow parser"}, | |