Skip to content

Check-in — 2026-08-21 on-demand Hyper-V runners

TL;DR

CAPTAINKANGAPOO no longer keeps five GitHub Actions guests committed 24/7. Scheduled task HomelabHyperVRunnerScaler starts Hyper-V VMs from queued jobs and ACPI-stops them after 15 minutes idle. API fleet cron runs on homelab-lan-01. Wake was proven 2026-08-21: gha-mgmt Off → Running for qualify run 32547732271.

Phase status

Item Status
Hyper-V scaler in git Merged #302
Host scaler + AutomaticStartAction=Nothing Live on CAPTAINKANGAPOO
API control plane on LAN RUNNER_FLEET_API_RUNS_ON set
Wake proof gha-mgmt started for qualify; run succeeded
Dedicated build machine Out of scope

What shipped

  • Placement map infra/github-runners/hyperv-scaler/placements.yml plus python -m scripts.hyperv_scaler and Invoke-HyperVRunnerScaler.ps1.
  • Observe / watchdog / dispatcher validate on RUNNER_FLEET_API_RUNS_ON (fallback DEPLOY_RUNS_ON).
  • Prometheus and scheduled fleet-alert issue logic treat sleeping Hyper-V runners as expected; 10-minute queue/capacity alerts still fire if the scaler fails.

Known gaps / drift

  • First job after sleep waits about 1–3 minutes (qualify wake was ~1 minute to Starting).
  • Each scaler tick polls every fleet repo (tens of seconds); the 15s sleep is in addition to that.
  • Guests with no matching work stop after 15 minutes idle. Host reboot does not auto-start them.

What remains

Who Work Priority
(done) Host install and wake proof Done
Later Dedicated build host P3
flowchart LR
  queued[Queued_job] --> scaler[Windows_scaler]
  scaler --> startVm[Start_VM]
  startVm --> listeners[systemd_listeners]
  cron[Observe_watchdog] --> lan[homelab_lan_01]
  apply[Maintain_apply] --> mgmt[gha_mgmt]