I needed isolated CI runners for my desktop CAD app (Qt/C++/Rust, three platforms) and didn't want to set up Kubernetes just for that. So I built gha-outrunner - which provisions a fresh Docker container, KVM/QEMU VM, or Tart macOS VM for each job, then destroys it when done. It uses GitHub's scaleset API so it works as an autoscaling runner group. Written in Go, MIT licensed.
Happy to answer questions.