Skip to content

Runners

Runners

A runner is somewhere builds can execute. Walis ships with one built in.

The local runner

local runs inside the API process. Its concurrency comes from Concurrent build limit in Settings → Build — that is what the slot count reflects.

Remote agents

walis-runner is a self-contained binary. It needs no runtime installed on the target machine:

bash
walis-runner \
  --server https://walis.example.com/ \
  --name builder-01 \
  --labels linux,docker

The agent polls, claims work with POST /api/runners/{name}/claim — the response contains the steps the server has already planned — reports each step's output and result, then closes the build out. Artifacts go up separately.

The step loop is the same code locally and remotely (BuildStepSequence in Walis.Core); the only difference is whether the sink writes to the database or posts HTTP. A step behaves the same way on a remote agent as it does on an API node.

Slots, labels and heartbeats

ConceptMeaning
SlotsHow many builds this runner will accept at once.
LabelsFree-form tags — macos, arm64, docker. Descriptive.
HeartbeatReported every minute. Silent for five minutes and the runner is marked offline.

Runner-offline can raise a notification. Stop accepting work drains a runner without deleting it: running builds finish, new ones are not claimed.

Work pinned to an offline runner

Builds assigned to a runner that is not connected stay queued. They are not reassigned and not dropped. This is deliberate — a job pinned to the machine with the signing key should wait for that machine, not quietly run somewhere else — but it does mean a queue that will not drain is usually a runner that has not come back.

Released under the MIT License.