Part 1 was Jenkins as code with ephemeral workers. Part 2 was macOS. This one moves a chunk of the CI workload off Jenkins entirely - onto GitHub Actions, with EC2 spot as the runner fleet.
Jenkins isn't dead here. It still handles the big builds - macOS, Windows, anything that runs for hours or needs custom orchestration. GitHub Actions runs alongside it for the workloads where it fits better.
This post covers the self-hosted spot runner pattern: how to point GitHub Actions at your own ephemeral EC2 fleet, and what bites once you do.
Why bother
GitHub's managed runners are fine for small teams. A few things push you toward self-hosted:










