CI containers for Mobrule
  • Dockerfile 100%
Find a file
2026-07-13 22:39:47 +02:00
.forgejo/workflows Initial commit 2026-07-13 22:39:47 +02:00
docs/agents Initial commit 2026-07-13 22:39:47 +02:00
.gitattributes Initial commit 2026-07-13 22:39:47 +02:00
.gitignore Initial commit 2026-07-13 22:39:47 +02:00
CLAUDE.md Initial commit 2026-07-13 22:39:47 +02:00
Containerfile Initial commit 2026-07-13 22:39:47 +02:00
CONTEXT.md Initial commit 2026-07-13 22:39:47 +02:00
LICENSE Initial commit 2026-07-13 22:39:47 +02:00
README.md Initial commit 2026-07-13 22:39:47 +02:00

mobrule-ci

build-image

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/*@v4 JS 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.

License

AGPL-3.0-only