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/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.