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.
Create and edit releases from the browser
ec34301375902f6b08c0171bf91b98cbcc55c63c · Keenan Nemetz · 15d ago · parent 09b15120
Create and edit releases from the browser Maintainers get a New release form that writes the same annotated tag the CLI writes: tag name, target commit, and notes become the tag message, with the account as tagger. Edit notes rewrites the tag message only while no artifact is attached, matching the release-immutability rule; lightweight tags and releases with files stay locked. Tag names are validated, existing tags are refused, reserved page names are rejected, and both actions are audited.
server/server.go +4
| @@ -224,6 +224,10 @@ func (s *Server) routes() *http.ServeMux { | |||
| 224 | 224 | mux.HandleFunc("POST /r/{name}/settings/rename", w.RenameRepository) | |
| 225 | 225 | mux.HandleFunc("POST /r/{name}/settings/delete", w.DeleteRepository) | |
| 226 | 226 | mux.HandleFunc("GET /r/{name}/releases", w.Releases) | |
| 227 | mux.HandleFunc("GET /r/{name}/releases/new", w.ReleaseNewPage) | ||
| 228 | mux.HandleFunc("POST /r/{name}/releases", w.CreateRelease) | ||
| 229 | mux.HandleFunc("GET /r/{name}/releases/edit", w.ReleaseEditPage) | ||
| 230 | mux.HandleFunc("POST /r/{name}/releases/edit", w.UpdateRelease) | ||
| 227 | 231 | mux.HandleFunc("GET /r/{name}/releases/{tag...}", w.ReleaseView) | |
| 228 | 232 | mux.HandleFunc("GET /r/{name}/releases/{tag}/archive.tar", w.ReleaseTar) | |
| 229 | 233 | mux.HandleFunc("GET /r/{name}/releases/{tag}/archive.tar.gz", w.ReleaseTarGz) | |