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.
refactor
c5902451905acdaa478f8476844ccd4a510d9ca9 · Keenan Nemetz · 16d ago · parent ec2aba4b
README.md +24−2
| @@ -128,6 +128,27 @@ so tell it once if the web is served through a proxy or another address: | |||
| 128 | 128 | public_url = "https://forge.example.com" # optional; the CLI prints links to it | |
| 129 | 129 | ``` | |
| 130 | 130 | ||
| 131 | ## Extending Vole | ||
| 132 | |||
| 133 | The forge is also a Go library. The public packages are grouped by | ||
| 134 | responsibility, and a tool can talk to an instance or embed one without shelling | ||
| 135 | out to `vole`: | ||
| 136 | |||
| 137 | - `client` — the clone side: metadata branch writes, the roster and `whoami` | ||
| 138 | SSH verbs, object transfer, review helpers, and site deploys | ||
| 139 | - `core/id`, `core/git`, `core/lfs` — shared primitives and storage | ||
| 140 | - `forge` — instance lifecycle and administration; `forge/config`, | ||
| 141 | `forge/identity`, `forge/access`, `forge/repo`, and `forge/index` are its stores | ||
| 142 | - `metadata` — everything on `refs/heads/vole`: issues, requests, releases, | ||
| 143 | comments, approvals, and their validation | ||
| 144 | - `ci` — workflow validation and the queue (`ci/runs`); `ci/agent` is the | ||
| 145 | embeddable CI agent, used as `agent.Run` | ||
| 146 | - `server` — listeners and wiring; `server/ssh`, `server/githttp`, | ||
| 147 | `server/web`, `server/pages`, and `server/hook` are the edge adapters | ||
| 148 | |||
| 149 | `cmd/vole` stays a CLI: it parses git-style flags, chooses a command, and prints | ||
| 150 | the result. Logic that more than one caller needs lives in the packages above. | ||
| 151 | |||
| 131 | 152 | ## Filing an issue | |
| 132 | 153 | ||
| 133 | 154 | An issue is one file on the `vole` branch. No client tooling is required: | |
| @@ -197,8 +218,9 @@ clone. | |||
| 197 | 218 | ||
| 198 | 219 | Options follow git's conventions: `--long value`, `--long=value`, `-o value`, | |
| 199 | 220 | `-ovalue`, repeatable `-l`, `--` to end option parsing, and `-h` for usage. | |
| 200 | Options come before arguments — `vole issue comment -m text <id>`, not the other | ||
| 201 | way round — and a usage mistake exits 129, as git does. | ||
| 221 | Options may come before or after arguments, as in git itself — both | ||
| 222 | `vole issue comment -m text <id>` and `vole issue comment <id> -m text` work — and a | ||
| 223 | usage mistake exits 129, as git does. | ||
| 202 | 224 | ||
| 203 | 225 | The CLI writes the files, commits to the `issues` branch, validates locally and | |
| 204 | 226 | pushes. Its author is the account your key resolves to — the CLI asks the instance | |