Migrate from GitHub-Hosted to Managed Runners (Without Downtime)
Moving to managed runners is usually a one-line change per job - runs-on: - done gradually so nothing breaks.
You do not have to migrate everything at once. Managed runners attach to your existing workflows by changing the runs-on: label, so you can move high-volume jobs first, verify, and expand.
Migration steps
- Identify your highest-minute workflows (the biggest cost savings first).
- Connect the managed-runner provider to your repo or org.
- Change
runs-on: ubuntu-latestto the provider label on one workflow. - Run it in parallel and confirm timing and results match.
- Roll out to remaining workflows by label, monitoring cost and speed.
.github/workflows/ci.yml
jobs:
build:
runs-on: latchkey-medium # was: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm testWhy this is low-risk
- It is per-job: revert a single label to roll back.
- Your workflow YAML, actions, and caching are unchanged.
- You can A/B one job before committing the fleet.
What you gain
Roughly 69% lower per-minute cost, built-in caching, and - on Latchkey - self-healing that retries transient failures automatically so you stop paying for re-runs.
Key takeaways
- Migration is a per-job
runs-on:label change. - Move highest-minute jobs first for the biggest savings.
- Roll back instantly by reverting a label.
Related guides
Migrate to Latchkey in 10 MinutesMove your GitHub Actions to Latchkey managed runners in about 10 minutes: connect the app, swap a label, and…
GitHub-Hosted vs Self-Hosted vs Managed Runners (2026)GitHub-hosted vs self-hosted vs managed GitHub Actions runners compared on cost, speed, maintenance, and reli…
GitHub Actions Cost Calculator - Estimate & Cut Your CI BillFree GitHub Actions cost calculator: enter your monthly CI minutes and runner size to see your current bill a…
How to Reduce GitHub Actions Costs: 12 Proven TacticsTwelve concrete ways to cut your GitHub Actions bill - caching, concurrency, path filters, runner sizing, kil…