Commit 8e2dbc6807

8e2dbc6807391812295e92a49ddf92e2b4bc1fb7

parent: 7a667c7b40

Verified · cmc ci/build: success ci/test: success

cmc <hello@cleberg.net> · 2026-09-10 01:26 UTC

deploy, wiki: the bay1 runner is bounded by its attachments, not -repos

The unit drops -repos; the key's attachments to krz/gitbay and
cmc/ci-smoke are what it may claim. Admin no longer says v1 runs on
the host with no containers.

Ref #184
.gitbay/wiki/Admin.org +9 −6
@@ -383,9 +383,11 @@ daemon instances; without the drop-in a deploy's copy over the admin
383383sshd stalled. Both deploy targets copy with =rsync --partial=, which
384384resumes a stalled transfer.
385385
386v1 runs steps directly on the host — no containers — so treat the
387runner machine as executing whatever your users push. Install the
388toolchains your builds need on it.
386Under =-isolation podman=, the default and what bay1 runs, each build
387is confined to a container (see Container isolation below). Under
388=-isolation none= steps run directly on the host as the runner's user,
389so treat that machine as executing whatever your users push, and
390install the toolchains your builds need on it.
389391
390392A runner claims the oldest pending build among the repositories its key
391393is attached to — for an admin key, the oldest in the instance. =-repos=
@@ -411,9 +413,10 @@ gitbay-runner -remote git@gitbay.org -repos krz/site,krz/docs \
411413
412414Add =-untrusted= only with =-isolation podman=.
413415
414gitbay.org's runner is scoped: it builds the forge's own repositories
415and the isolation canary, nothing else, because it shares the host with
416the forge; any other repository builds on a runner its owner attaches.
416gitbay.org's runner is attached to the forge's own repositories and
417the isolation canary, nothing else, because it shares the host with
418the forge; its unit names no =-repos=, the attachments are the
419boundary. Any other repository builds on a runner its owner attaches.
417420
418421=-repos= narrows an admin runner; for a runner key the attachments are
419422the boundary, held by the server, and =-repos= may only name
deploy/gitbay-runner.override.conf +6 −4
@@ -23,9 +23,11 @@
2323# would otherwise make read-only. Prepare the host with
2424# deploy/runner-podman-setup.sh before deploying a runner that isolates.
2525[Service]
26# cmc/ci-smoke is the nightly isolation canary; a runner scoped to named
27# repositories never claims a build it is not scoped to, so the canary
28# must be listed or its scheduled build waits forever.
26# The runner polls as a non-admin account with a runner-scoped key, and
27# claims only the repositories that key is attached to (`repo runner
28# add`): krz/gitbay and cmc/ci-smoke. The attachments are the boundary,
29# so ExecStart names no -repos. cmc/ci-smoke is the nightly isolation
30# canary; keep it attached or its scheduled build waits forever.
2931#
3032# Two layers of resource caps. MemoryMax and CPUQuota bound the unit —
3133# the runner and every build together — which is what keeps the forge
@@ -73,7 +75,7 @@ KillMode=mixed
7375# -untrusted: this runner isolates in podman, so it takes merge request
7476# heads from forks; a runner without a container must not.
7577ExecStart=
76ExecStart=/usr/local/bin/gitbay-runner -remote git@127.0.0.1 -workdir /var/lib/gitbay-runner/work -poll 5s -timeout 45m -repos krz/gitbay,cmc/ci-smoke -isolation podman -image localhost/gitbay-ci:1 -cpus 3 -memory 6g -untrusted
78ExecStart=/usr/local/bin/gitbay-runner -remote git@127.0.0.1 -workdir /var/lib/gitbay-runner/work -poll 5s -timeout 45m -isolation podman -image localhost/gitbay-ci:1 -cpus 3 -memory 6g -untrusted
7779Nice=10
7880CPUWeight=30
7981IOWeight=30