Skip to content

runnerd v0.1.0

Latest

Choose a tag to compare

@qxf-72 qxf-72 released this 13 Aug 00:20
· 1 commit to main since this release

First public release of runnerd. This release provides the complete planned
scope for a local, single-user Linux task runner.

Added

  • runnerd daemon and runnerctl client communicating over a permission-bound
    Unix Domain Socket.
  • Length-prefixed binary framing with PING, SUBMIT, STATUS, LIST, and CANCEL
    operations.
  • Single-threaded epoll event loop for client connections, child output
    pipes, signalfd notifications, and timerfd deadlines.
  • Process execution through fork/execve, with an exec error pipe that
    distinguishes startup failure from a program exiting with code 127.
  • Per-job process groups for supervising the direct child and its descendants.
  • FIFO scheduling with a configurable --max-running concurrency bound.
  • Cancellation and execution timeouts with SIGTERM followed by SIGKILL
    after a one-second grace period.
  • Persistent stdout/stderr files with private permissions and a 10 MiB limit
    per stream; excess output is drained and discarded to prevent pipe stalls.
  • In-memory job states and result queries, including exit codes, exit signals,
    output byte counts, and truncation flags.
  • 84 GoogleTest unit and integration tests covering protocol handling,
    scheduling, process lifecycle, cancellation, timeouts, and output capture.
  • GitHub Actions checks for GCC Debug, Clang Debug, GCC Release, ASan, and UBSan.
  • A reproducible end-to-end latency benchmark reporting throughput and
    P50/P95/P99/Max latency.

Known limitations

  • Linux-only and intended for trusted users and workloads on one host.
  • Job metadata and JobId allocation are not persisted across daemon restarts.
  • Persisted output cannot yet be retrieved through runnerctl.
  • No authentication, sandboxing, cgroup isolation, or remote execution.
  • The protocol and command-line interface may still change during the 0.x
    release series.