Migrate from Depot to WarpBuild
Move GitHub Actions jobs from Depot runners to WarpBuild: label mapping, cache changes, compatibility table, parallel run plan, billing overlap, and rollback.
Last updated:
Moving GitHub Actions jobs from Depot runners to WarpBuild runners is a runs-on label change plus a caching change. This page has the label mapping for Linux, Windows, and macOS, the cache features that do and do not have a WarpBuild equivalent, a compatibility table with the unsupported rows stated plainly, the parallel run plan, and the rollback steps.
Still evaluating? WarpBuild vs Depot has the dimension table, and Depot alternatives covers the wider field. Every Depot fact below links to the page that states it, checked on 2026-08-13.
Prerequisites
- GitHub organization owner permissions, to install the WarpBuild GitHub app from the WarpBuild dashboard. The app cannot be installed from the GitHub Marketplace directly; sign up first, then install from the dashboard. See the quick start.
- Nothing new on repository ownership. Depot's docs already require that "your repository must be owned by a GitHub organization (not a personal account)", per their GitHub Actions overview, so a repository running Depot runners today already satisfies any organization prerequisite.
- Public repositories need one org setting. WarpBuild registers runners into the organization's
Defaultrunner group, and GitHub disables self hosted runners in public repositories by default. CheckAllow public repositorieson that runner group. See public GitHub repos. - A list of the labels you use today. Grep your workflows for
runs-on: depot-and count the distinct values. That list is the whole scope of the mechanical part of this migration.
Signup includes $10 in free credits, which covers a parallel run on most repositories. Per minute rates by runner label are on the pricing page.
The runs-on Diff
Adoption in either direction is one line per job.
jobs:
build:
name: Build
- runs-on: depot-ubuntu-24.04-8
+ runs-on: warp-ubuntu-latest-x64-8x
steps:
- uses: actions/checkout@v4runs-on is evaluated per job, so a single workflow file can send some jobs to the new labels and leave the rest where they are. That is what makes the parallel run below cheap.
Label Mapping
Depot publishes a six rung size ladder for every Linux and Windows family: 2 CPU with 8 GB, 4 with 16, 8 with 32, 16 with 64, 32 with 128, and 64 with 256, per their runner types page. WarpBuild publishes five rungs on Linux, from 2 vCPU with 8 GB up to 32 vCPU with 128 GB, in cloud runners. Map by vCPU and memory, and read the notes on the rows where the ladders differ.
Linux x64
| Depot label | vCPU / memory | WarpBuild label | vCPU / memory |
|---|---|---|---|
depot-ubuntu-24.04 | 2 / 8 GB | warp-ubuntu-latest-x64-2x | 2 / 8 GB |
depot-ubuntu-24.04-4 | 4 / 16 GB | warp-ubuntu-latest-x64-4x | 4 / 16 GB |
depot-ubuntu-24.04-8 | 8 / 32 GB | warp-ubuntu-latest-x64-8x | 8 / 32 GB |
depot-ubuntu-24.04-16 | 16 / 64 GB | warp-ubuntu-latest-x64-16x | 16 / 64 GB |
depot-ubuntu-24.04-32 | 32 / 128 GB | warp-ubuntu-latest-x64-32x | 32 / 128 GB |
depot-ubuntu-24.04-64 | 64 / 256 GB | warp-ubuntu-latest-x64-32x is the largest | 32 / 128 GB |
depot-ubuntu-22.04 and its suffixes | same ladder | warp-ubuntu-2204-x64-2x through -32x | same ladder |
depot-ubuntu-latest | current Ubuntu LTS | warp-ubuntu-latest-x64-2x | 2 / 8 GB |
Ubuntu 26.04 has no Depot label at time of writing and is available on WarpBuild as warp-ubuntu-2604-x64-2x through -32x.
Linux ARM64
| Depot label | vCPU / memory | WarpBuild label | vCPU / memory |
|---|---|---|---|
depot-ubuntu-24.04-arm | 2 / 8 GB | warp-ubuntu-latest-arm64-2x | 2 / 8 GB |
depot-ubuntu-24.04-arm-4 | 4 / 16 GB | warp-ubuntu-latest-arm64-4x | 4 / 16 GB |
depot-ubuntu-24.04-arm-8 | 8 / 32 GB | warp-ubuntu-latest-arm64-8x | 8 / 32 GB |
depot-ubuntu-24.04-arm-16 | 16 / 64 GB | warp-ubuntu-latest-arm64-16x | 16 / 64 GB |
depot-ubuntu-24.04-arm-32 | 32 / 128 GB | warp-ubuntu-latest-arm64-32x | 32 / 128 GB |
depot-ubuntu-24.04-arm-64 | 64 / 256 GB | warp-ubuntu-latest-arm64-32x is the largest | 32 / 128 GB |
depot-ubuntu-22.04-arm and its suffixes | same ladder | warp-ubuntu-latest-arm64-* (24.04) or warp-ubuntu-2604-arm64-* | same ladder |
WarpBuild deprecated its Ubuntu 22.04 ARM64 images on March 31, 2025, so a 22.04 ARM job moves to 24.04 or 26.04. Also note that the WarpBuild Ubuntu 24.04 ARM64 image sets the work directory to /runner/_work rather than GitHub's /home/runner/work/, which matters for any step with a hardcoded path.
Windows
| Depot label | vCPU / memory | WarpBuild label | vCPU / memory |
|---|---|---|---|
depot-windows-2022 | 2 / 8 GB | warp-windows-2022-x64-4x | 4 / 16 GB |
depot-windows-2022-4 | 4 / 16 GB | warp-windows-2022-x64-4x | 4 / 16 GB |
depot-windows-2022-8 | 8 / 32 GB | warp-windows-2022-x64-8x | 8 / 32 GB |
depot-windows-2022-16 | 16 / 64 GB | warp-windows-2022-x64-16x | 16 / 64 GB |
depot-windows-2022-32 | 32 / 128 GB | warp-windows-2022-x64-32x | 32 / 128 GB |
depot-windows-2022-64 | 64 / 256 GB | warp-windows-2022-x64-32x is the largest | 32 / 128 GB |
depot-windows-2025 and its suffixes | same ladder | warp-windows-2025-x64-4x through -32x | 4 / 16 GB up to 32 / 128 GB |
depot-windows-latest | Windows Server 2025 | warp-windows-2025-x64-4x | 4 / 16 GB |
Two traps on this platform. WarpBuild removed its 2 vCPU Windows runners on June 8, 2026, so the smallest Windows rung is 4 vCPU and a 2 CPU job sizes up. And warp-windows-latest-x64-* currently means Windows Server 2022, while depot-windows-latest means Windows Server 2025, so map by the explicit version label rather than by latest. Visual Studio 2026 is available on the transitional warp-windows-2025-vs2026-x64-* labels; the other Windows Server 2025 labels carry Visual Studio 2022.
macOS
| Depot label | CPU / memory | WarpBuild label | vCPU / memory |
|---|---|---|---|
depot-macos-26, depot-macos-latest | 8 / 24 GB | warp-macos-26-arm64-6x or warp-macos-26-arm64-12x | 6 / 22 GB or 12 / 44 GB |
depot-macos-15 | 8 / 24 GB | warp-macos-15-arm64-6x or warp-macos-15-arm64-12x | 6 / 22 GB or 12 / 44 GB |
depot-macos-14 | 8 / 24 GB | warp-macos-14-arm64-6x | 6 / 22 GB |
All three Depot macOS labels share one hardware shape. WarpBuild publishes two sizes on macOS 15 and 26 and one on macOS 14, so a job that was memory bound at 24 GB has a larger rung available, and a job that was CPU bound at 8 CPUs should be tested on the 12 vCPU label rather than assumed equivalent.
Full Workflow Example
A Node build with caching and a macOS job, after the migration. The runs-on values and the two cache related action swaps are the whole diff.
name: ci
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: warp-ubuntu-latest-x64-8x
steps:
- uses: actions/checkout@v4
- uses: WarpBuilds/setup-node@v6
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm test
build-ios:
runs-on: warp-macos-26-arm64-12x
steps:
- uses: actions/checkout@v4
- name: Restore derived data
uses: WarpBuilds/cache@v1
with:
path: ~/Library/Developer/Xcode/DerivedData
key: ${{ runner.os }}-derived-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-derived-
- run: xcodebuild -scheme App -destination 'platform=iOS Simulator,name=iPhone 16' testCache Migration
This is the part of the migration that is not a label change, so read it before you plan the cutover.
What happens to your Depot cache. Depot pre-configures their runners so that any action using the GitHub Actions cache API writes to Depot Cache instead of GitHub's, transparently, for actions/cache, actions/setup-node, actions/setup-python, actions/setup-java, and anything else on that API. Their cache integration docs state it plainly. That substitution is a property of running on their labels, so it ends the moment the label changes. Cache contents are not portable to another provider and no export path is documented on depot.dev, verified absent on 2026-08-13. Entries age out under the retention policy on their cache overview, and storage is billed as an hourly sampled monthly average, so a cache left in place during a parallel run keeps accruing.
What you configure on WarpBuild. WarpBuild Cache is a drop-in action swap rather than a transparent interception. Replace actions/cache@v4 with WarpBuilds/cache@v1, and replace actions/setup-* with the matching WarpBuilds/setup-* action, which uses WarpBuild Cache under the hood for toolchains and package manager dependencies. Caching is enabled by default on Linux runners. See caching and setup actions.
Expect cold caches for a run or two. This is reasoning rather than a vendor statement: because the two caches are separate stores keyed independently, the first job on a new label finds nothing and populates from scratch. Budget one or two slower runs per cache key, not a slower week.
Depot cache features and their WarpBuild equivalents
| Depot feature | WarpBuild equivalent | Status | Note |
|---|---|---|---|
| Depot Cache remote cache service | WarpBuild Cache | Equivalent | Different store, same job: build and dependency caching for GitHub Actions |
| Transparent GitHub Actions cache API interception | WarpBuilds/cache and WarpBuilds/setup-* actions | Partial | One line per cache using step instead of zero workflow edits |
| Cache scoped by repository | Cache scoped by key, version, and branch | Partial | WarpBuild scoping is narrower; see the note below this table |
| Non branch isolated cache namespace | No equivalent | Unsupported | Keys designed so that feature branches read main entries behave differently |
| Configurable cache retention (7, 14, or 30 days, plus size caps) | Entries expire 7 days after last use, manual delete from the action or console | Partial | No configurable retention window or size cap is documented |
| Cache Explorer | Reports cache billing tab | Partial | Usage and cost view rather than a per entry browser |
| Cache integrations for Bazel, sccache, Turborepo, Pants, moonrepo, Maven, Gradle, Go | WarpBuilds/setup-* actions for Node, Python, Go, Java, .NET, Ruby, Zig, Rust, Gradle, and mise | Partial | No documented WarpBuild remote cache backend for Bazel, sccache, Turborepo, Pants, moonrepo, or Maven. Those builds keep whatever remote cache they use today or fall back to the dependency cache |
| Depot Registry and pull through cache | No equivalent | Unsupported | Keep the registry you use today or move images to another OCI registry |
Container build layer cache attached to depot build | Remote Docker builders with persistent layer cache, or Docker layer caching through the cache backend | Partial | Different mechanism, and depot build steps do not move with a runs-on change |
| In memory disk accelerator | No equivalent under that name | Unsupported | WarpBuild runners ship SSD backed ephemeral storage per runner |
One behavioral difference deserves a second read. Depot states that cache entries from main and other branches share one namespace, so any job can read any entry. WarpBuild cache is scoped by key, version, and branch, following the GitHub Actions cache matching rules. If your restore-keys were written on the assumption that a feature branch inherits main caches without the standard fallback, expect lower hit rates on the first pull request builds and adjust the keys.
Compatibility Notes
| Source platform feature | WarpBuild status | Note |
|---|---|---|
| Six rung Linux size ladder, x64 and ARM64 | Partial | Five rungs, 2 vCPU through 32 vCPU. A 64 vCPU job splits or sizes down |
| Ubuntu 22.04 and 24.04 label families | Supported | Plus Ubuntu 26.04 labels with no source equivalent |
| Ubuntu 22.04 on ARM64 | Unsupported | Deprecated March 31, 2025; move to 24.04 or 26.04 ARM64 |
| Windows Server 2022 and 2025 families | Supported | Smallest rung is 4 vCPU; latest means different OS versions on each side |
| macOS 14, 15, and 26 | Supported | Two sizes on macOS 15 and 26, one on macOS 14 |
| Docker on Windows runners | Not applicable | The source platform's Windows runners have no Hyper-V, so no migrating workflow can already depend on this. This is a Depot fact only; it implies nothing about WarpBuild Windows runners, documented separately in cloud runners |
| Docker on macOS runners | Unsupported | WarpBuild macOS runners do not support nested virtualization and cannot run Docker |
| Cache on Windows runners | Unsupported | WarpBuild caching is available on Linux runners; Windows jobs keep using the GitHub Actions cache |
| Nested virtualization on Linux x64 | Supported | Enabled with the nested-virtualization.enabled=true label, see nested virtualization |
| Egress filtering rules, Linux only, incompatible with Tailscale | Not carried over | Rules configured in the source platform's org settings do not transfer. Rebuild the equivalent controls in your own network policy |
| Tailscale integration | Supported | WarpBuild network addons cover Tailscale, see networking |
| OIDC trust relationships with GitHub Actions | Supported | Cloud role trust policies keyed on the GitHub OIDC issuer are unaffected by the runner change |
| Custom runner AMIs, top plan only | Partial | WarpBuild custom VM images are a BYOC feature, see custom VM images |
| Dedicated macOS runners on an annual commitment | Contact support | Talk to WarpBuild support about sustained high macOS concurrency before you cut over |
depot build steps inside a workflow | Separate migration | A container build product with its own meter. It keeps running until you replace it; remote Docker builders are the WarpBuild equivalent |
Depot CI workflows in .depot/workflows/ | Different shape entirely | Those are not GitHub Actions workflows. Moving them back to .github/workflows/ is a separate project from a label swap |
Secrets and Permissions
Nothing moves. Secrets and variables for GitHub Actions runners live in GitHub on both platforms, so a runners to runners migration does not touch them. The permission changes are limited to two things: installing the WarpBuild GitHub app, which requires organization owner permissions, and the Allow public repositories setting on the Default runner group if any public repository uses the runners.
Cloud credentials obtained through OIDC are unaffected, because the trust relationship is between your cloud and GitHub's OIDC issuer rather than the runner vendor.
Parallel Run and Validation
runs-on is per job, so run both platforms at once on the same repository.
- Pick two or three workflows that run often and block nobody, such as unit tests on pull requests.
- Move one job in each to a
warp-label and leave its siblings where they are. - Let a week of real traffic go through, then compare queue time and total duration in each vendor's own dashboard. WarpBuild queue timings and per job metrics are on the Reports page.
- Watch the failure modes that are specific to a platform change: hardcoded runner paths, tools present in one image and absent in the other, and cache keys that assumed the old scoping.
Carry one caveat from Depot's own parallel run guidance, because it applies to any side by side validation: "Be mindful of workflows that write to external systems (deploys, artifact updates) since they will execute twice." Keep deploy jobs and anything that publishes artifacts on one platform at a time.
Billing During the Parallel Run
You pay both platforms during the overlap. Plan the window around the billing shapes.
On the Depot side, per their pricing page checked 2026-08-13: plans bill monthly on the 1st, and proration applies to mid month signup rather than to cancellation, so a cancelled plan runs to the end of its month. Included allowances are per month and do not roll over. Included minutes are consumed at the size multiplier published on their runner types page, so a parallel run on large runners burns the allowance faster than elapsed time suggests. Their docs state that included monthly minutes are not a hard cap, and self imposed usage caps are the control for that during a migration month. Storage is billed as an hourly sampled monthly average across cache and registry, so leaving cache in place during the overlap keeps accruing.
On the WarpBuild side, billing is purely usage based. There is no base subscription fee, no platform fee, and no seat fee, so the parallel run costs exactly the minutes it uses, against the $10 in signup credits first. Per minute rates by label are on the pricing page, and per job costs land in the Reports billing tab as they accrue.
The cheap sequence: start the parallel run early in a billing month, cap usage on the platform you are leaving, cut over before the next 1st, and cancel after the last job has moved.
Rollback
Reversibility is the reason to start with one job.
- Revert the pull request that changed the
runs-onvalues. Depot documents adoption as a one line change to the runner label on their GitHub Actions overview, so going back is the same one line change in the other direction. - Revert the cache action swap in the same pull request if you made it there, so
actions/cacheandactions/setup-*return and the transparent interception resumes on their labels. - Leave the old GitHub app installed and the old plan active until the parallel run ends. No teardown is needed to keep the option open; the cost of keeping it is the monthly plan charge.
- Expect cold caches again on the way back, for the same reason they were cold on the way over.
Steps 1 and 2 are a single pull request, so a rollback is a same day operation as long as the app and the plan are still in place. Decommission only after you have run a full week without reaching for this section.
Expected Time to First Green Build
Signup, app installation, and the first label change fit in one working session on a repository whose workflows you already know. The realistic schedule for a full migration is one afternoon for the label mapping and the first green job, one week of parallel running for confidence, and one pull request to move the rest. Slack support channels are available on demand if a job behaves differently on the new labels.
FAQ
How long does the migration take?
For a repository with a handful of workflows, the label change is a single pull request and most teams get a first green build in the same working session. The parallel run window is the part worth budgeting time for, and one week of real traffic is enough to compare queue time and duration on both platforms.
Do my caches move to WarpBuild?
No. Cache contents are not portable between providers, and no export path for Depot Cache is documented on depot.dev as of 2026-08-13. Expect cold caches on the first runs after the switch, then normal hit rates once keys repopulate. Depot Cache entries age out on their own under the retention policy documented at https://depot.dev/docs/cache/overview.
Do I have to change my workflow files beyond runs-on?
Only the caching steps. Depot pre-configures their runners so any action using the GitHub Actions cache API hits Depot Cache automatically (https://depot.dev/docs/cache/integrations/github-actions). WarpBuild Cache is a drop-in action swap instead: WarpBuilds/cache for actions/cache, and WarpBuilds/setup-* for the matching setup actions. See https://www.warpbuild.com/docs/ci/features/caching.
What happens to my depot build steps?
They keep running against Depot's container build service, because that is a separate product from their GitHub Actions runners and does not move with a runs-on change (https://depot.dev/docs/container-builds/integrations/github-actions). Plan that piece separately; WarpBuild remote Docker builders are the closest equivalent, documented at https://www.warpbuild.com/docs/ci/docker-builders.
How do I roll back if the migration goes badly?
Revert the pull request that changed the runs-on labels. Depot documents adoption as a one line change to the runner label (https://depot.dev/docs/github-actions/overview), so the reverse is the same one line change, and it is a same day operation as long as the GitHub app is still installed and the plan is still active.
Start with $10 in free credits
Change the runner label in your workflow and keep the rest of your GitHub Actions setup. Runner time is billed per minute.