Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/nix/module-eval
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas b68b74d687 swarm-builder: build each agent config PR head and post a commit status
A new `swarm-builder` service, in its own container on the host that sets
`deploy.builder.enable` (defaulted on by `allSwarmServices` where the host
has the builder's store leaf, like the review classifier).

When an `agent-configs/<agent>` PR is opened, reopened or synchronized,
swarm-controller queues a `build_agent` jobq node. The node sets a
`swarm-builder` commit status to pending on the PR head, sends
`{agent, rev, pr}` to the builder over NATS request-reply
(`$SWARM.builder.build`), and writes success (store path), failure (last
line nix printed) or error (no builder / no reply) on the head. The node
fails when the build does, so the Jobs page matches the PR.

The builder builds nix/builder/check-flake's `check` with every input
overridden: hyperhive and nixpkgs to the host's own
`c0re.hyperhiveFlake`/`c0re.nixpkgsFlake` (what a hive there renders into
its meta flake), and the agent to the PR head on the forge. Evaluation is
pure and runs in the container; builds go to the host nix daemon as an
untrusted client. The private config repo is fetched with the token of a
new read-only `builder` forge account (in the `hives` team), which the
controller mints into `swarm/services/builder/forge/token`; git gets it
from a credential helper reading the child's environment, so it is in no
argument or URL.

Credentials: a `builder` store leaf minted by glue-bao-tls on the store
host, a `swarm-builder` reader policy (forge token + its own OIDC client
secret), an authelia machine client, and a `--builder-client` grant in the
queue's auth-callout responder. The controller gains a grant on the token
path and the secret publisher a deny on it.

This is the agent-config build check atlas scoped on #5081 (slice 3):
nothing is pushed to a cache, nothing is written to KV, and a red status
gates no deploy. The check composes agent-base + the config without the
values a hive adds (CA, docs, claude-code path, ports, input follows), so
it can disagree with a hive's own build.
2026-10-14 03:30:46 +02:00
..
agent-forge-bao.nix agents: swap the agent's bao leaf in with one rename 2026-10-11 10:00:43 +02:00
agent-github-bao.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
agent-icon.nix nix: split module-eval into per-subsystem checks 2026-09-20 04:25:54 +02:00
agent-matrix.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
agent-memory.nix subagent, bash: run each subagent run and bash task in its own cgroup 2026-10-13 12:25:27 +02:00
agent-otel.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
agent-plugins.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
agent-queue-bao.nix module-eval: restore agentWith in agent-queue-bao.nix 2026-10-13 14:56:25 +02:00
agent-runtime.nix agents: swap the agent's bao leaf in with one rename 2026-10-11 10:00:43 +02:00
agent-user.nix module-eval: agent-user test asserts the heal_own_dir form 2026-10-09 11:30:30 +02:00
bao-basics.nix swarm-bao-agent-pki: decide openbao's restart on the shared locale-independent compare 2026-10-13 17:00:56 +02:00
bao-controller.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
bao-grants.nix swarm-builder: build each agent config PR head and post a commit status 2026-10-14 03:30:46 +02:00
bao-matrix-reader.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
bao-otel-collector.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
builder.nix swarm-builder: build each agent config PR head and post a commit status 2026-10-14 03:30:46 +02:00
core-toggle.nix swarm-victorialogs: size the agent-auth limit for a host booting its agents together 2026-10-14 01:54:54 +02:00
forge-placement.nix glue: otel scrape targets for authelia, grafana and nats move out of the services 2026-10-14 01:40:40 +02:00
grafana.nix glue: otel scrape targets for authelia, grafana and nats move out of the services 2026-10-14 01:40:40 +02:00
hive-otel.nix glue: consumers' start-after-bao ordering moves into one glue module 2026-10-13 22:05:16 +02:00
hive-tls.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
journald-severity.nix module-eval: assert the severity table once, not once per tier 2026-09-20 14:23:56 +02:00
lib.nix module-eval: set the hive-controller option only in tests that need a hive 2026-10-05 09:58:13 +02:00
matrix-core.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
name-guards.nix swarm: refuse swarm.hives keys that are not valid hive identifiers 2026-10-12 21:45:50 +02:00
nats-authelia.nix glue: otel scrape targets for authelia, grafana and nats move out of the services 2026-10-14 01:40:40 +02:00
nats-tls.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
secret-publisher.nix glue: the secret publisher's authelia-dependent settings move out of the publisher module 2026-10-14 01:52:53 +02:00
shared.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
swarm-otel-core.nix module-eval: evaluate shared fixture configs once 2026-10-13 08:14:50 +02:00
swarm-otel-identity.nix swarm-otel: declare forgejo's published scrape target on every host 2026-10-13 22:15:13 +02:00
swarm-services-switch.nix swarm-builder: build each agent config PR head and post a commit status 2026-10-14 03:30:46 +02:00