Skip to content

v2.3.0 — Runner selection, colored output, and capability reporting

Choose a tag to compare

@jhuebel jhuebel released this 17 Jul 02:38
· 4 commits to main since this release

Runner selection, colored output, and runner capability reporting

A cluster of related improvements to how scripts get routed to runners, what
you can see about a runner's actual capabilities, and how output is
displayed.

Why

With multiple runners in a fleet, "which runner will run this?" and "why did
this fail?" were both harder to answer than they should be — assignment was
always automatic, output with color codes rendered as literal escape-sequence
garbage, and there was no visibility into a runner's own health (version,
architecture, disk space) beyond whether it was online.

What's new

  • Manual runner selection — Run Script and Scheduled Jobs pages let you
    pick a specific runner instead of Auto (least-busy). The picker only lists
    runners that report the script's language as installed; RunnerAssignmentService
    enforces this server-side too, with a specific failure message
    (offline / at capacity / wrong language) instead of a generic one.
    Scheduled jobs can be permanently pinned to a runner via
    preferred_runner_id.
  • Real ANSI color rendering — script output now renders actual color and
    style (16-color palette, bold, dim, italic, underline, reverse, blink)
    instead of showing raw \x1b[...m escape codes as literal text. Applies to
    both the live Run Script terminal and the static History detail view. New
    resources/js/ansi.js (24 unit tests) plus three sample scripts
    (ANSI Color Palette (Bash), ANSI Color Palette (PowerShell),
    Colored Status Report (Bash)) to try it out immediately.
  • Runner capability visibility — History shows which runner ran each
    script (with live status), and Settings → Runners now has an expandable
    detail row showing per-language support, the runner's own binary version,
    CPU architecture, and free/total disk space on its temp directory — so a
    stale runner or one running low on disk is visible instead of silently
    failing later.
  • UI polish — Run Script's output terminal now fills the page instead of
    stopping at a fixed height, and correctly clears when switching between
    scripts instead of leaking the previous script's output underneath the
    newly-selected one.
  • Runner bugfix — fixed a PATH-resolution mismatch where the runner could
    report an interpreter (e.g. a Homebrew-installed pwsh) as available in
    its heartbeat, but actual script execution still failed to find it because
    it only checked the process's inherited PATH, not the same fallback
    search used for detection. Runner binary bumped to 1.2.0.

Upgrading

Two new migrations (preferred_runner_id on scheduled_jobs; version,
arch, disk_free_bytes, disk_total_bytes on runners) — run
php artisan migrate --force as usual. Existing runners will start
reporting the new capability fields on their next heartbeat after being
restarted with the updated binary; until then those fields just show as
unset, nothing breaks.