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.
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/web/releases.go +4−1
| @@ -49,7 +49,8 @@ func (w *Web) Releases(rw http.ResponseWriter, r *http.Request) { | |||
| 49 | 49 | Name string | |
| 50 | 50 | Tags []git.Tag | |
| 51 | 51 | Lightweight int | |
| 52 | }{w.page(r, m.Name+" · releases"), m.Name, tags, light}, 0) | ||
| 52 | CanManage bool | ||
| 53 | }{w.page(r, m.Name+" · releases"), m.Name, tags, light, w.canManageReleases(r, m)}, 0) | ||
| 53 | 54 | } | |
| 54 | 55 | ||
| 55 | 56 | func (w *Web) ReleaseView(rw http.ResponseWriter, r *http.Request) { | |
| @@ -111,6 +112,7 @@ func (w *Web) ReleaseView(rw http.ResponseWriter, r *http.Request) { | |||
| 111 | 112 | LFSPointers bool | |
| 112 | 113 | Artifacts []metadata.Artifact | |
| 113 | 114 | ArtifactBytes int64 | |
| 115 | CanEdit bool | ||
| 114 | 116 | }{ | |
| 115 | 117 | Page: w.page(r, m.Name+" · "+t.Name), | |
| 116 | 118 | Name: m.Name, | |
| @@ -124,6 +126,7 @@ func (w *Web) ReleaseView(rw http.ResponseWriter, r *http.Request) { | |||
| 124 | 126 | LFSPointers: lfsPointers, | |
| 125 | 127 | Artifacts: artifacts, | |
| 126 | 128 | ArtifactBytes: artifactBytes, | |
| 129 | CanEdit: w.canManageReleases(r, m) && t.Annotated && len(artifacts) == 0, | ||
| 127 | 130 | }, 0) | |
| 128 | 131 | } | |
| 129 | 132 | ||