- Dockerfile 100%
| .forgejo/workflows | ||
| docs/agents | ||
| .gitattributes | ||
| .gitignore | ||
| CLAUDE.md | ||
| Containerfile | ||
| CONTEXT.md | ||
| LICENSE | ||
| README.md | ||
mobrule-ci
The CI image for the mobrule platform. One Ubuntu-based OCI image with everything a mobrule CI job needs, so workflows can pin a container and get on with it.
What's inside
- Ubuntu 24.04 base
- Node.js 22 (the
actions/*@v4JS actions need it) - Rust stable with cargo, clippy, and rustfmt, installed system-wide
- SpacetimeDB CLI (for e2e smoke tests against an ephemeral module)
- Python 3 + pip (the smoke-harness adapter)
- GTK3, tray, and X11 dev headers for the bridge daemon's Linux build (
libgtk-3-dev,libayatana-appindicator3-dev,libxdo-dev) - The usual suspects: git, curl, ripgrep, jq, build-essential, libssl-dev
WebKit is deliberately left out. The Tauri dashboard only builds on the Windows runner, so there's no point hauling it around here.
Why this exists
Forgejo's stock ubuntu-latest runner ships without node, which kills every actions/*@v4 action before your first step even runs. The old workaround was pinning a much larger general-purpose builder image full of toolchains that mobrule never touches. This image trims things down to exactly what the pure-Rust + bridge + adapter stack needs.
Using it
Pin it in your workflow:
jobs:
build:
runs-on: ubuntu-latest
container: git.aiko.works/aiko/mobrule-ci:latest
Jobs run as root inside the container (the spacetime CLI expects it).
Building and publishing
The build-image workflow rebuilds and pushes on any push to main that touches the Containerfile (or the workflow itself). You can also fire it manually via workflow_dispatch with an optional tag_suffix.
Every successful build pushes:
git.aiko.works/aiko/mobrule-ci:latest(mutable, what consumers pin)git.aiko.works/aiko/mobrule-ci:<short-sha>(immutable, pin this if you need reproducibility)git.aiko.works/aiko/mobrule-ci:<tag_suffix>(optional, supplied at dispatch time)
Rebuild when the rust toolchain bumps, a new spacetime CLI release lands, node changes major version, or a new prereq shows up in the Containerfile.
Repo secrets needed: REGISTRY_TOKEN (Forgejo registry token with package:write) and REGISTRY_USER.