The machine that runs the job
A runner is the machine your job actually executes on. GitHub provides hosted runners; you can also bring your own (self-hosted runners).
Hosted runners
ubuntu-latest— Linux. Cheapest. Default for almost everything.ubuntu-22.04,ubuntu-20.04— pinned versions.windows-latest— Windows Server. 2× the minute cost.macos-latest,macos-14,macos-15— macOS. 10× the minute cost. Required for iOS / native macOS builds.- Larger runners:
ubuntu-latest-4-cores, etc. (must be enabled per org).
Self-hosted runners
- Tag with
runs-on: [self-hosted, gpu, linux-x64]to target specific machines. - Used for: cost (large CI bills), specialized hardware (GPU, Apple Silicon), private network access, persistent caches.
- You're responsible for OS, security, and uptime.
What's pre-installed on hosted runners
Quite a lot — Python, Node, Go, Rust, Docker, Java, .NET, Ruby, common build tools. Check the runner-images repo for the exact manifest. If your tool is on the list, you don't need to install it; if it isn't, install it as a step.