Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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.

Store repository secrets encrypted, with a CLI and a settings form

0c40a1d3b48eb0ade37334f62ee526c371ecb61c · Keenan Nemetz · 7d ago · parent 122cbe4f

Store repository secrets encrypted, with a CLI and a settings form

A repository has values that cannot live in its code: a deploy key, a
registry token, a staging password. They are now stored in data/secrets.db,
sealed with AES-256-GCM under data/secrets.key, and read through one store
that records every read and every change. The key is a separate file, and
secrets_key can move it, so a backup of the data directory can be a backup of
ciphertext rather than of plaintext.

`vole secret list|set|get|rm` asks the instance over the key the caller
already pushes with, since the store is server-side. set reads the value from
stdin or a file and never from the argument list; get writes the value and
nothing else. The maintainer role is the capability: the accounts that approve
work and allow CI own the credentials those jobs will use.

The repository's Settings tab gains the same list — names, versions, who
changed one, when a value was last read — with set, replace and delete. It
never renders a value, and a maintainer who is not an admin now reaches that
page for this section alone.

Values are limited to what one environment variable can carry: 128 KiB for
NAME=value, valid UTF-8 and no NUL. A longer value could never reach a step,
and the refusal says so.

Slice 1 of #154.

docs/accounts-and-access.md +7−1

@@ -225,7 +225,7 @@ specific accounts.
225 225 | `none` | No access |
226 226 | `read` | Clone, fetch, and browse the repository |
227 227 | `contribute` | Read, file issues and comments, push only `refs/heads/contrib/<name>/*`, and open change requests from those branches |
228 | `maintain` | Everything the contribute role can do, plus push shared branches, triage issues, and approve change requests |
228 | `maintain` | Everything the contribute role can do, plus push shared branches, triage issues, approve change requests, and manage the repository's secrets |
229 229 | `admin` | Everything a maintainer can do, plus manage access, push protected branches, override locks, and repair metadata |
230 230
231 231 Rules are edited with a compare-and-swap. A page or a command that read the rules
@@ -257,6 +257,12 @@ repository-specific role. Access rules and review policy remain instance-admin
257 257 operations: instance admins can edit them on the repository's **Settings** tab,
258 258 or with `vole admin acl`.
259 259
260 A maintainer who is not an admin also opens that tab, for one section: the
261 repository's secrets. Values a repository keeps out of its code — a deploy key, a
262 registry token, a staging password — belong to the accounts that approve work and allow CI,
263 so the page shows them the names, versions and read times, and the form that sets
264 them. It never shows a value; `vole secret get` prints one when somebody needs it.
265
260 266 ## Changing access
261 267
262 268 ```sh