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.
Require a linked issue when a change request opens
0789f22ea633bf995417893c0052abb6a36d5520 · Keenan Nemetz · 9d ago · parent 1265ea55
Require a linked issue when a change request opens Add a per-repository policy for teams that want every proposed update to trace back to an issue. The browser marks Closes as required, and the pre-receive hook applies the same rule to requests added through the CLI or a hand-written metadata commit. Existing requests stay editable and landable.
forge/access/acl_test.go +4
| @@ -251,6 +251,7 @@ func TestJSONRoundTrip(t *testing.T) { | |||
| 251 | 251 | t.Parallel() | |
| 252 | 252 | a := Empty("keenan") | |
| 253 | 253 | a.Protected = []string{"refs/heads/main"} | |
| 254 | a.RequireLinkedIssue = true | ||
| 254 | 255 | b, err := a.Bytes() | |
| 255 | 256 | if err != nil { | |
| 256 | 257 | t.Fatal(err) | |
| @@ -265,6 +266,9 @@ func TestJSONRoundTrip(t *testing.T) { | |||
| 265 | 266 | if !got.IsProtected("refs/heads/main") { | |
| 266 | 267 | t.Fatal("protection lost") | |
| 267 | 268 | } | |
| 269 | if !got.RequiresLinkedIssue() { | ||
| 270 | t.Fatal("linked-issue rule lost") | ||
| 271 | } | ||
| 268 | 272 | } | |
| 269 | 273 | func TestParseRejectsBadRoles(t *testing.T) { | |
| 270 | 274 | t.Parallel() | |