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.
Fold admin work into repository settings and a Users page
9579c1f976254fdeb2ec73d4016db5b25c7921c1 · Keenan Nemetz · 14d ago · parent 381d6aac
Fold admin work into repository settings and a Users page Remove the combined /admin tabs. Per-repository access rules now live on the repository's Settings page, visible to instance admins while repository details and the danger zone stay with repository admins. User management moves to /users, linked from the top navigation only for instance admins, and repository creation moves to /repos/new. Align the invite, danger-zone, and settings forms with the shared card-and-actions layout, and make settings section headings consistent.
server/home_test.go +1−1
| @@ -187,7 +187,7 @@ func TestFirstRunOnboardingIsAnInstanceAdminPage(t *testing.T) { | |||
| 187 | 187 | if resp.StatusCode != 200 { | |
| 188 | 188 | t.Fatalf("home = %d", resp.StatusCode) | |
| 189 | 189 | } | |
| 190 | for _, want := range []string{"No repositories yet", "New repository", "Or from the instance directory", "--owner keenan", `href="/admin/repos/new"`} { | ||
| 190 | for _, want := range []string{"No repositories yet", "New repository", "Or from the instance directory", "--owner keenan", `href="/repos/new"`} { | ||
| 191 | 191 | if !strings.Contains(body, want) { | |
| 192 | 192 | t.Fatalf("first-run page is missing %q:\n%s", want, body) | |
| 193 | 193 | } | |