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.
Add browser auth, contributor access, and gated CI
6c84d387e5f608360e30484a1a5b1cff41076850 · Keenan Nemetz · 16d ago · parent c36d5073
Add browser auth, contributor access, and gated CI Browser sign-in now uses passkeys. Enrollment links are one-time, sessions are hashed in users.db, and issue/comment/approval writes use the session account. HTTPS public_url is required for WebAuthn. Add the contributor role between read and maintain. Contributors can discuss and open change requests, and may push only refs/heads/contrib/<account-id>/. Contributor CI is held per commit until a maintainer allows the exact tip from the repository page. Rename the write role to maintain. write remains accepted as the historical spelling, and access.Write remains as a Go alias so existing callers and ACL rows keep working. Update the web, CLI, queue schema, and guides for the new flows, and cover the role, namespace, auth, and CI-gating paths in tests.
docs/configuration.md +9−7
| @@ -41,9 +41,9 @@ vole admin user list | |||
| 41 | 41 | | Setting | Default | What it does | | |
| 42 | 42 | |---|---:|---| | |
| 43 | 43 | | `data_dir` | `"./data"` | Where Vole keeps repositories, databases, stored files, and the audit log | | |
| 44 | | `http_addr` | `"127.0.0.1:8080"` | Address for the read-only web interface and anonymous Git clone | | ||
| 45 | | `ssh_addr` | `"127.0.0.1:2222"` | Address for SSH, the only way to write | | ||
| 46 | | `public_url` | empty | The address people use in a browser, so the CLI can print useful links | | ||
| 44 | | `http_addr` | `"127.0.0.1:8080"` | Address for the web interface and anonymous Git clone | | ||
| 45 | | `ssh_addr` | `"127.0.0.1:2222"` | Address for SSH, the authenticated Git transport | | ||
| 46 | | `public_url` | empty | Canonical browser address; must be HTTPS to enable passkey login | | ||
| 47 | 47 | | `max_blob_bytes` | `104857600` (100 MiB) | Largest single file accepted in a push | | |
| 48 | 48 | | `receive_max_bytes` | `1073741824` (1 GiB) | Largest whole push Vole will accept | | |
| 49 | 49 | | `lfs_object_max_bytes` | `2147483648` (2 GiB) | Largest single LFS object | | |
| @@ -69,7 +69,9 @@ public_url = "https://forge.example.com" | |||
| 69 | 69 | ``` | |
| 70 | 70 | ||
| 71 | 71 | The CLI uses this to print a link to an issue, comment, or release it just | |
| 72 | created. It does not change how Vole routes requests. | ||
| 72 | created. It is also the WebAuthn relying-party origin: browser login is enabled | ||
| 73 | only when `public_url` is an `https://` URL. Vole does not change how it routes | ||
| 74 | requests based on this setting. | ||
| 73 | 75 | ||
| 74 | 76 | ## Running behind a proxy | |
| 75 | 77 | ||
| @@ -96,12 +98,12 @@ connection intact. | |||
| 96 | 98 | ||
| 97 | 99 | | Path | What it is | | |
| 98 | 100 | |---|---| | |
| 99 | | `data/users.db` | Accounts, names, SSH keys, instance admins, access rules, and locks. This is the main user database. | | ||
| 101 | | `data/users.db` | Accounts, names, SSH keys, passkeys, enrollment invites, browser sessions, instance admins, access rules, and locks. This is the main user database. Session and invite tokens are stored only as hashes. | | ||
| 100 | 102 | | `data/repos/` | Your Git repositories. | | |
| 101 | 103 | | `data/index.db` | A rebuildable search index. | | |
| 102 | | `data/runs.db` | The CI queue and finished-run index. Partly rebuildable. | | ||
| 104 | | `data/runs.db` | The CI queue, finished-run index, and contributor-branch CI approvals. Partly rebuildable; deleting it loses pending work and approvals. | | ||
| 103 | 105 | | `data/lfs/` | Stored large files, CI logs, and build artifacts. | | |
| 104 | 106 | | `data/audit.log` | A record of privileged actions. | | |
| 105 | | `data/ssh_host_ed25519_key` | The SSH host key. It is the only secret Vole keeps. | | ||
| 107 | | `data/ssh_host_ed25519_key` | The SSH host key. It is Vole's only long-term stored secret; browser credentials are public keys and session tokens are hashed. | | ||
| 106 | 108 | ||
| 107 | 109 | See [Operations](operations.md) for backup and recovery. | |