Zont

Builds without the CI appliance. One small Rust runner starts a normal just recipe, streams its output, limits how long it waits for the launched process, and trusts the exit code.

Host-native on the validated macOS and Linux setups; optional containers where a job needs one. The repository plan expects fish and Unix command-line tools.

  Zont Console

Local evaluation: inject private UUID-valued CI_WORKSPACE_ID and CI_WORKSPACE_SECRET through your secret manager or service environment, run just ci-serve, and serve site-kit on localhost. In production, the static HTML and WASM come from the regular API image and pod. The isolated ci.lifub.com edge route sends only /api/* to the selectorless loxal-ci Service and EndpointSlice, which point at host-native ci serve on port 8787. The CI API is not running in the regular API container. just update-ci deploys the host runtime and, when CI UI or router image inputs changed, rolls the owning shared deployment and verifies the public CI package revision.

The plan is a justfile

Each public recipe is a job. Its build steps, wall-clock budget, and supported trigger metadata live together in ops/zont/justfile: a job may run for changes matching a repository-relative path-prefix rule, at a fixed interval, or from the authenticated manual control. The comment immediately above a recipe becomes its displayed description through just --dump --dump-format json. A job passes when its recipe exits 0 and fails when it does not.

# ops/zont/justfile - metadata values are seconds # site-kit CI site-kit: @# ci:path=site-kit @# ci:timeout=1500 cargo test -p site-kit cd site-kit; and just test-wasm # Throughput / load bench bench: @# ci:timeout=1800 @# ci:interval=86400 just bench-page-finder mkdir -p ci/artifacts/bench cp -r target/criterion ci/artifacts/bench/ 2>/dev/null; or true

There is no second pipeline DSL or trigger sidecar to keep synchronized with the commands developers already run.

Native first

Run directly on macOS or Linux with fish, just, and the job’s toolchain.

Containers are optional

Choose a container image only for jobs that need it; host-native jobs stay simple.

Git-aware triggers

Repository-relative path-prefix rules attached to job definitions match exact root files such as Cargo.toml as well as descendants of a directory. The watcher polls the remote and evaluates accumulated changes at the newest pushed head.

Built-in scheduler

Intervals attached to job definitions run without adding cron or launchd configuration. Their next deadlines are durable, so restarting or redeploying the watcher does not keep postponing a daily job.

Local build evidence

Completed runs append result, commit, duration, OS, and exit code as JSONL and retain the full console output as an audit log; telemetry can be disabled.

Browser runs stay bounded

The authenticated console queues a listed fixed job directly, including ci-redeploy. Ordinary console-launched jobs can be cancelled while queued or running. Self-redeployment is deliberately non-cancellable: its image rollout, runtime activation, and rollback must complete atomically. The browser cannot supply custom arguments, refs, containers, timeouts, retries, arbitrary deployment targets, or read secrets.

Six commands cover the engine and console

ci run site-kit --timeout 2100 ci on-change --since HEAD~1 ci watch --remote origin --branch main ci schedule ci list # authenticated console API and fixed-job run/cancel queue, loopback by default ci serve
CommandOne responsibility
runExecute one recipe and preserve its exit result.
on-changeMap changed paths to the jobs that need a verdict.
watchPoll Git and evaluate accumulated changes at the newest pushed revision.
scheduleFire jobs from interval metadata embedded in their justfile definitions.
listList the public jobs declared by the justfile.
serveExpose one private-workspace-gated JSON snapshot and bodyless fixed-job run/cancel controls for the authenticated console.

One authoritative CI

Lifub CI is the repository's authoritative build and deployment system. Its serial host-native runner maps changed paths to fixed jobs, records immutable commit and package metadata, and keeps the protected self-redeployment transaction ahead of ordinary queued work.

The predecessor CI was fully decommissioned in August 2026; nothing of it is exposed, scheduled, or consulted, and this runner is the sole source of build verdicts. Fastly applies remain serialized through ci.lifub.com, avoiding two state writers for an object store without locking.

The current console shows completed local build metadata, retained audit logs, and queue state for its manual runs. It can start only fixed console-launched recipes and cancel every ordinary one; the protected ci-redeploy transition is the sole cancellation exception. Live log streaming, artifacts, arbitrary remote commands, multiple tenants, and distributed runners are outside the current scope. The small surface is intentional and the page does not claim otherwise.

Support CI

Lifub CI is not a public download or self-serve licence — repository operators run the engine and console locally. If it earns its keep, chip in to help us keep building it.

  View console UI   Support indie, corporate-free software!   Buy me a coffee!