forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

spindle architecture#

Spindle is a small CI runner service. Here's a high level overview of how it operates:

  • listens for sh.tangled.spindle.member and sh.tangled.repo records on the Jetstream.
  • when a new repo record comes through (typically when you add a spindle to a repo from the settings), spindle then resolves the underlying knot and subscribes to repo events (see: sh.tangled.pipeline).
  • the spindle engine then handles execution of the pipeline, with results and logs beamed on the spindle event stream over wss

the engine#

At present, the only supported backend is Docker (and Podman, if Docker compatibility is enabled, so that /run/docker.sock is created). Spindle executes each step in the pipeline in a fresh container, with state persisted across steps within the /tangled/workspace directory.

The base image for the container is constructed on the fly using Nixery, which is handy for caching layers for frequently used packages.

The pipeline manifest is specified here.