Repository navigation
v2.3.0 — Runner selection, colored output, and capability reporting
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[...mescape 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-installedpwsh) as available in
its heartbeat, but actual script execution still failed to find it because
it only checked the process's inheritedPATH, 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.