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.
Add remote administration and local workflow runs
3abbe749096f4d7ff76f4d468e4427829b8a6f95 · Keenan Nemetz · 16d ago · parent 520470e1
Add remote administration and local workflow runs Make `vole admin` the single namespace for user, repository, and access management, runnable locally or over SSH by instance admins. Instance-admin grants live in users.db, and the audit log names the actor separately from the account being changed. Add `vole workflow run` to execute workflow jobs in the working tree without a server or runner. Positional arguments select workflows, --job selects jobs, and the command reuses the push-time validator. Update the README and guides for the new command shapes.
docs/ci.md +28−5
| @@ -46,6 +46,29 @@ vole workflow check | |||
| 46 | 46 | vole workflow list | |
| 47 | 47 | ``` | |
| 48 | 48 | ||
| 49 | ## Run a workflow locally | ||
| 50 | |||
| 51 | You can run the steps without a server or a runner. From the repository root: | ||
| 52 | |||
| 53 | ```sh | ||
| 54 | vole workflow run # every job in every workflow | ||
| 55 | vole workflow run build # every job in build.yaml | ||
| 56 | vole workflow run ci -j test # one job in one workflow | ||
| 57 | vole workflow run -j test # the job named test in every workflow | ||
| 58 | ``` | ||
| 59 | |||
| 60 | A workflow can be named with or without its extension (`ci` or `ci.yaml`). Steps | ||
| 61 | run in the working tree, in the order the workflow declares them. The command | ||
| 62 | stops at the first failure and exits with that step's status, so it can wrap a | ||
| 63 | script. It validates the workflow first, with the same checker a push uses. | ||
| 64 | |||
| 65 | A local run is a check of the commands, not a rehearsal of the push. It ignores | ||
| 66 | `on.push` filters and `runs-on`, and it does not publish artifacts or deploy a | ||
| 67 | site. It sets `CI=true`, `VOLE_CI=1`, and `VOLE_CI_LOCAL=1`, gives each step its | ||
| 68 | declared timeout, and reads no standard input. Jobs share your working tree, so | ||
| 69 | a later job sees files an earlier one wrote; a pushed run starts each job from a | ||
| 70 | clean checkout. | ||
| 71 | |||
| 49 | 72 | ## Start a runner | |
| 50 | 73 | ||
| 51 | 74 | Start a runner anywhere it can reach the Vole server: | |
| @@ -81,10 +104,10 @@ A job runs repository code, so Vole uses a runner allowlist for both taking a jo | |||
| 81 | 104 | and reporting its result: | |
| 82 | 105 | ||
| 83 | 106 | ```sh | |
| 84 | vole acl runners demo ci-runner-1 # replace the list | ||
| 85 | vole acl runners demo --add ci-runner-2 # add one account | ||
| 86 | vole acl runners demo --remove ci-runner-1 # remove one account | ||
| 87 | vole acl runners demo --clear # back to admins only | ||
| 107 | vole admin acl runners demo ci-runner-1 # replace the list | ||
| 108 | vole admin acl runners demo --add ci-runner-2 # add one account | ||
| 109 | vole admin acl runners demo --remove ci-runner-1 # remove one account | ||
| 110 | vole admin acl runners demo --clear # back to admins only | ||
| 88 | 111 | ``` | |
| 89 | 112 | ||
| 90 | 113 | Admins always count. For everyone else, a writer running CI on their laptop does | |
| @@ -207,5 +230,5 @@ instance (`pages_ref`), not by the workflow. | |||
| 207 | 230 | - If a runner disappears, its job is requeued. After five attempts the job fails | |
| 208 | 231 | instead of cycling forever. | |
| 209 | 232 | - Deleting `data/runs.db` loses attempts that were in flight. Current branch and | |
| 210 | tag tips are queued again from Git, and `vole index rebuild` restores finished | ||
| 233 | tag tips are queued again from Git, and `vole admin index rebuild` restores finished | ||
| 211 | 234 | history from the records on each repository's `vole` branch. | |