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.
Store CI run records in the database, not the repository
b312e1660ac3d570fc35350a22b3514c56ab466f · Keenan Nemetz · 11d ago · parent db5e4382
Store CI run records in the database, not the repository A finished attempt was a set of files on the vole branch: a record, step ranges, and artifact pointers, pushed as a commit. At 959 files, CI records were 849 of them, and every human metadata write had to carry them. The runner now sends the record with its finish message over the SSH channel that holds the lease. The server checks the account, the job, and the log and artifact pointers, then writes the attempt, steps, artifacts, attestation, and run result in one transaction in data/runs.db. A tagged build still pushes its release pointers to the branch after the record is stored. Pre-receive refuses a new runs/ file. vole admin index rebuild imports records still on an old branch; records written since are never deleted by a rebuild. The run page reads the stored attempt, and runs.db is now a source that must be backed up. This stops new CI history from entering Git. Existing commits keep the records they already have; removing those would require rewriting the protected vole branch, which this change does not do.
docs/configuration.md +2−2
| @@ -65,7 +65,7 @@ vole admin account list | |||
| 65 | 65 | | `lfs_object_max_bytes` | `2147483648` (2 GiB) | Largest single LFS object | | |
| 66 | 66 | | `lfs_warn_bytes` | `5242880` (5 MiB) | Warn when a large binary is committed outside LFS; `0` turns the warning off | | |
| 67 | 67 | | `repo_max_refs` | `500` | Branches and tags in one repository; a push that would exceed it is refused | | |
| 68 | | `repo_max_metadata_entries` | `2000` | Documents on the metadata branch in one repository: issues, requests, comments, approvals, run and release records | | ||
| 68 | | `repo_max_metadata_entries` | `2000` | Documents on the metadata branch in one repository: issues, requests, comments, approvals, and release records | | ||
| 69 | 69 | | `repo_max_metadata_bytes` | `33554432` (32 MiB) | Total size of those files | | |
| 70 | 70 | | `repo_max_bytes` | `5368709120` (5 GiB) | Git objects in one repository; a repository already over it refuses further pushes | | |
| 71 | 71 | | `repo_max_lfs_bytes` | `10737418240` (10 GiB) | LFS objects, CI logs and run artifacts in one repository, checked on upload | | |
| @@ -319,7 +319,7 @@ connection intact. | |||
| 319 | 319 | | `data/users.db` | Accounts, names, instance roles, SSH keys, passkeys, enrollment links, browser sessions, access rules, locks, and daily page-view counters. This is the main account database. Session and enrollment-link tokens are stored only as hashes. | | |
| 320 | 320 | | `data/repos/` | Your Git repositories. | | |
| 321 | 321 | | `data/index.db` | A rebuildable search index. | | |
| 322 | | `data/runs.db` | The CI queue, finished-run index, and contributor-branch CI approvals. Partly rebuildable; deleting it loses pending work and approvals. | | ||
| 322 | | `data/runs.db` | The CI queue, finished-run records and steps, artifact pointers, and contributor-branch CI approvals. It is a source of truth: back it up. Deleting it loses CI history and pending work. | | ||
| 323 | 323 | | `data/lfs/` | Stored large files, CI logs, and build artifacts. | | |
| 324 | 324 | | `data/audit.log` | A record of privileged actions: one tab-separated line per action, `timestamp`, `action`, `actor`, `subject`, `detail`. Created and kept at mode `0600`. See [Audit log](operations.md#audit-log). | | |
| 325 | 325 | | `data/ssh_host_ed25519_key` | The SSH host key. It is the instance's long-term secret; browser credentials are public keys and session tokens are hashed. | | |