Migrate from Namespace to WarpBuild
Move GitHub Actions workflows off Namespace: label mapping, cache equivalents, a full workflow example, parallel running, billing notes and same day rollback.
Last updated:
Moving GitHub Actions workflows from Namespace to WarpBuild is a label change plus the removal of the Namespace specific actions a workflow picks up over time. Namespace documents its own adoption as changing the runs-on field to a Namespace profile or label (their GitHub Actions docs), and the move back out has the same shape.
This page covers the label map, the cache equivalents by name, a full workflow example, the compatibility table including what has no equivalent, how to run both providers at once, what happens to billing during the overlap, and how to roll back.
Still deciding? WarpBuild vs Namespace has the dimension by dimension comparison, and Namespace alternatives covers the wider provider set.
Prerequisites
Three things before the first job moves.
- A WarpBuild account. Sign up at app.warpbuild.com, which includes $10 in free credits. Pricing is purely usage based with no base subscription fee, no platform fee and no seat fee (pricing).
- The WarpBuild GitHub bot installed on the organization, with access to the repositories you plan to move (quick start). If you are not a GitHub organization owner, an owner approves the install. This mirrors the Namespace GitHub App install, which their migration docs describe the same way (their migration docs).
- A list of the Namespace features your workflows actually use. Grep the repository for
nscloud,namespace-profile,namespacelabs/andNSC_to get it. That list is the real switching surface, and the compatibility table below covers each item.
Secrets, OIDC and GITHUB_TOKEN permissions carry over unchanged, because the workflows keep running on GitHub Actions against the same repository. Expect the first green build on the first push after the label change, once the bot has repository access.
The Workflow Change
A single job moves in one line.
jobs:
build:
- runs-on: nscloud-ubuntu-24.04-amd64-8x16-with-cache
+ runs-on: warp-ubuntu-latest-x64-8xA job on a Namespace runner profile changes the same way.
jobs:
integration:
- runs-on: namespace-profile-large-builder
+ runs-on: warp-ubuntu-latest-x64-16xLabel Map
Namespace machine labels take the form nscloud-{os}-{arch}-{shape} with optional -with-cache, -with-features and -with-builders suffixes, and only one nscloud label is allowed in a runs-on field (runner configuration). WarpBuild labels carry the size in the label itself (runner catalog).
Match the vCPU count first, then read the RAM column. At the same vCPU count, the WarpBuild Linux and Windows machines carry more memory than the Namespace standard shapes.
| Namespace label | Namespace machine | WarpBuild label | WarpBuild machine |
|---|---|---|---|
nscloud-ubuntu-24.04-amd64-2x4 | 2 vCPU, 4 GB | warp-ubuntu-latest-x64-2x | 2 vCPU, 8 GB |
nscloud-ubuntu-24.04-amd64-4x8 | 4 vCPU, 8 GB | warp-ubuntu-latest-x64-4x | 4 vCPU, 16 GB |
nscloud-ubuntu-24.04-amd64-8x16 | 8 vCPU, 16 GB | warp-ubuntu-latest-x64-8x | 8 vCPU, 32 GB |
nscloud-ubuntu-24.04-amd64-16x32 | 16 vCPU, 32 GB | warp-ubuntu-latest-x64-16x | 16 vCPU, 64 GB |
nscloud-ubuntu-24.04-amd64-32x64 | 32 vCPU, 64 GB | warp-ubuntu-latest-x64-32x | 32 vCPU, 128 GB |
nscloud-ubuntu-24.04-arm64-8x16 | 8 vCPU, 16 GB | warp-ubuntu-latest-arm64-8x | 8 vCPU, 32 GB |
nscloud-ubuntu-22.04-amd64-8x16 | 8 vCPU, 16 GB | warp-ubuntu-2204-x64-8x | 8 vCPU, 32 GB |
nscloud-ubuntu-26.04-amd64-8x16 | 8 vCPU, 16 GB | warp-ubuntu-2604-x64-8x | 8 vCPU, 32 GB |
nscloud-ubuntu-20.04-amd64-8x16 | 8 vCPU, 16 GB | No Ubuntu 20.04 image | Move the job to 22.04 or newer |
nscloud-windows-2022-amd64-4x8 | 4 vCPU, 8 GB | warp-windows-latest-x64-4x | 4 vCPU, 16 GB |
nscloud-windows-2022-amd64-2x4 | 2 vCPU, 4 GB | warp-windows-latest-x64-4x | 4 vCPU, 16 GB, the smallest Windows size |
nscloud-macos-sonoma-arm64-6x14 | 6 vCPU, 14 GB | warp-macos-14-arm64-6x | 6 vCPU, 22 GB |
nscloud-macos-sequoia-arm64-6x14 | 6 vCPU, 14 GB | warp-macos-15-arm64-6x | 6 vCPU, 22 GB |
nscloud-macos-tahoe-arm64-6x14 | 6 vCPU, 14 GB | warp-macos-26-arm64-6x | 6 vCPU, 22 GB |
nscloud-macos-tahoe-arm64-12x28 | 12 vCPU, 28 GB | warp-macos-26-arm64-12x | 12 vCPU, 44 GB |
nscloud-macos-goldengate-arm64-6x14 | 6 vCPU, 14 GB | No macOS 27 host image. warp-macos-26-arm64-6x ships Xcode 27.0 and the macOS 27 SDKs | 6 vCPU, 22 GB |
Namespace machine shape values are published in their runner configuration reference and machine shapes docs. WarpBuild labels, sizes and per minute rates are in the runner catalog.
The last macOS row needs a note. The warp-macos-26-arm64-6x and warp-macos-26-arm64-12x images carry Xcode 27.0 with the macOS 27 SDKs and the iOS 27.0, tvOS 27.0, watchOS 27.0 and visionOS 27.0 simulator runtimes (runner catalog), so a job pinned to a newer host image for the current Apple SDKs lands on macOS 26 here with the same toolchain. GitHub's upstream macOS 27 runner image is in beta, and a dedicated WarpBuild macOS 27 image follows once that image is released.
Label suffixes and companion labels map like this:
| Namespace label part | WarpBuild equivalent |
|---|---|
-with-cache | Cache is enabled by default on WarpBuild Linux runners, so no label part is needed (caching) |
-with-builders, nscloud-in-runner-builder | Remote Docker builders selected by builder profile in Warpbuilds/build-push-action (Docker builders) |
nscloud-cache-tag-<name> | The key and restore-keys inputs on WarpBuilds/cache@v1 |
nscloud-cache-size-<n>gb | No sizing label. Cache is unlimited and billed per GB-month (pricing) |
nscloud-cache-exp-do-not-commit | Use WarpBuilds/cache/restore@v1 without the matching save step |
namespace-features:tailscale.spec | network.name=<config-name> on the runner label (networking) |
namespace-features:job.priority | No direct equivalent. Generally available WarpBuild Linux and Windows runners do not have plan-level concurrency caps. |
namespace-features:github.run-id | No equivalent. It exists to make scheduling deterministic under concurrency limits |
namespace-features:macos.channel=preview | No equivalent. WarpBuild publishes released macOS images only |
A Full Workflow
Before, on Namespace, using their checkout action, their cache action and a cached label:
name: build
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: nscloud-ubuntu-24.04-amd64-8x16-with-cache
steps:
- uses: namespacelabs/nscloud-checkout-action@v8
- uses: namespacelabs/nscloud-cache-action@v1 # keep whichever version your repository pins
with:
cache: pnpm
- uses: actions/setup-node@v4
with:
node-version: 22
- run: pnpm install --frozen-lockfile
- run: pnpm testAfter, on WarpBuild:
name: build
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: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm testThe cache enabled setup actions accept the same inputs as their upstream counterparts and store dependencies in WarpBuild cache, which is why the separate cache step disappears. Workflows that cache arbitrary paths keep an explicit step and use WarpBuilds/cache@v1, a drop-in replacement for actions/cache@v4:
- uses: WarpBuilds/cache@v1
with:
path: |
target
~/.cargo/registry
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-Cache Migration
Cache contents do not move between vendors. Namespace Cache Volumes are local NVMe volumes attached to their machines (cache volumes docs), and Namespace itself states that the volumes need workloads to run before they are filled and widely available (pricing FAQ). The same warm up applies on the way in to WarpBuild: the first run of each cache key is cold, and steady state runs are the ones worth comparing.
Namespace names eleven cache surfaces in their caching documentation. Here is each one and what WarpBuild has.
| Namespace cache feature | WarpBuild equivalent | Status |
|---|---|---|
| Cache Volumes | WarpBuild cache, served through the WarpBuilds/cache action and enabled by default on Linux runners | Different architecture, same job |
nscloud-cache-action | WarpBuilds/cache@v1, or a cache enabled WarpBuilds/setup-* action for language toolchains | Equivalent |
| Namespace Artifacts | No named equivalent. Use actions/upload-artifact or your own object storage | No equivalent |
| Container image caching | Container layer caching on WarpBuild runners, plus remote Docker builders with a persistent layer cache | Equivalent |
nscloud-checkout-action | No repository mirror cache. Revert to actions/checkout@v4 | No equivalent |
| Toolchain download caching | The WarpBuilds/setup-* actions cache toolchains and package manager dependencies | Equivalent for the covered languages |
| Action download caching | No named equivalent | No equivalent |
| Bazel remote cache | No named Bazel product. Point Bazel at your own remote cache | No equivalent |
| Turborepo cache | No named Turborepo product. Store the Turborepo cache directory with WarpBuilds/cache@v1 | Partial |
| Gradle cache | WarpBuilds/gradle-actions, a drop-in replacement for gradle/actions | Equivalent |
| sccache | No named sccache product. Store the sccache directory with WarpBuilds/cache@v1 | Partial |
Two more surfaces sit next to the cache list. Namespace Remote Builders map to WarpBuild remote Docker builders, which run outside the GitHub Actions runner with a persistent layer cache and are selected with a builder profile name in Warpbuilds/build-push-action. The Namespace container registry has no WarpBuild equivalent, so images stored there move to your own registry before the last job leaves.
Compatibility Notes
| Namespace feature | WarpBuild equivalent | Status | Note |
|---|---|---|---|
runs-on label switch | warp- labels | Supported | One line per job, reversible in the same pull request |
Runner profiles (namespace-profile-<name>) | Labels plus label modifiers, and custom runner configuration on BYOC | Partial | Profile only settings such as access level and swap have no label form on either side; configure the equivalent in the WarpBuild dashboard |
| Linux x64 and ARM64 runners | Ubuntu 22.04, 24.04 and 26.04 on x64; 24.04 and 26.04 on ARM64 | Supported | Ubuntu 20.04 has no WarpBuild image |
| Windows runners | Windows Server 2022 and 2025, from 4 vCPU up | Partial | No 2 vCPU Windows machine on WarpBuild |
| macOS runners | macOS 14, 15 and 26 in 6 vCPU and 12 vCPU sizes, with Xcode 27.0, the macOS 27 SDKs and the iOS, tvOS, watchOS and visionOS 27.0 simulator runtimes | Partial | Current Apple SDK targets build unchanged. Namespace publishes more host macOS versions and machine shapes, and the preview image channel has no WarpBuild equivalent |
| Linux on Apple Silicon | None | Unsupported | Jobs using it stay on Namespace or move to Linux ARM64 |
| Breakpoints and SSH into a job | Action Debugger opens an SSH session from inside the workflow | Supported | Different mechanics, same outcome |
| VNC remote display for macOS | None | Unsupported | macOS UI sessions over VNC have no WarpBuild equivalent |
| Egress policies with allow and block rules | Not a WarpBuild product. Network policy lives in your own cloud on BYOC | Partial | BYOC runners inherit your VPC egress controls |
| Job metrics and insights | CI observability with OpenTelemetry metrics correlated to job logs | Supported | |
| SAML single sign-on | SAML 2.0 and OIDC with self-serve identity provider setup | Supported | Flat $250 per month, whatever the user count (pricing) |
gRPC API and nsc CLI | Automation API for documented runner and image operations, plus a hosted MCP server for its supported tools | Supported | |
| Devboxes | None | Unsupported | WarpBuild sells GitHub Actions infrastructure only |
| Concurrency plan caps | No plan-level concurrency caps for generally available Linux and Windows runners | Supported | Review macOS and beta-runner quotas separately |
Run Both Platforms Side by Side
runs-on is evaluated per job, so a repository can run both providers at once with no coordination. The useful shape of a trial:
- Pick the workflow with the longest queue plus run time.
- Move one job in it to a
warp-label and leave every other job on its Namespace label. - Let it run for a week so the cache warms and the comparison covers steady state rather than first run timings.
- Compare the same job across providers on the same branch, then decide.
Nothing in the Namespace documentation forbids running jobs on both platforms, verified on 2026-08-13. Their runner configuration reference does forbid more than one nscloud label in a single runs-on field, which matters only while a job still points at them (runner configuration).
Billing During the Parallel Run
Namespace bills a prepaid plan fee plus overage on a monthly cycle, and states that plan changes apply immediately with prepaid charges prorated (billing and limits). A team mid contract on a paid plan keeps paying that base fee for the rest of the period while the parallel run happens, so the overlap costs the Namespace plan fee plus the WarpBuild minutes.
WarpBuild has no base subscription fee, no platform fee and no seat fee, so the parallel run costs only the minutes the moved jobs consume, and the $10 in signup credits covers the first ones. Per minute rates by runner label are published on the pricing page, and Namespace publishes their own rates on their pricing page.
Rollback
Rollback is the same one line change in reverse, and it lands the same day.
jobs:
build:
- runs-on: warp-ubuntu-latest-x64-8x
+ runs-on: nscloud-ubuntu-24.04-amd64-8x16-with-cacheReverting the pull request restores the label and any Namespace specific actions in one operation. Two things to know before you revert:
- Namespace publishes no rollback guide. Verified absent on 2026-08-13 on their migration docs and GitHub Actions docs. The mechanical symmetry comes from the forward move being a
runs-onchange in the first place. - Caches restart cold on the way back too, because Namespace cache volumes are theirs and WarpBuild cache entries are ours. Whichever direction you move, budget for one warm up cycle.
Keeping the Namespace account active during the trial period is what makes the revert a same day operation instead of a re-onboarding.
After the Move
Once the last job leaves Namespace, retire the Namespace GitHub App install and any workload identity federation configured for their runners, and move images out of their container registry.
From there, the WarpBuild surfaces worth adopting next are snapshot runners for workflows with expensive setup, remote Docker builders for container heavy pipelines, and BYOC if the runners should sit inside your own AWS, GCP or Azure account. Slack support channels are available on demand, and the compliance posture is SOC 2 Type 2 with evidence at trust.warpbuild.com.
FAQ
How much of my workflow changes?
The runs-on line on every job, plus any Namespace specific actions. Namespace documents its own adoption as changing the runs-on field to a Namespace profile or label at namespace.so/docs/solutions/github-actions, checked 2026-08-13, so the reverse move is the same shape. Workflows that adopted nscloud-checkout-action, nscloud-cache-action, nscloud-setup, cache volume mounts or the Namespace container registry have more lines to revert.
Do my caches transfer?
No. Namespace Cache Volumes are local NVMe volumes attached to their machines, described at namespace.so/docs/architecture/storage/cache-volumes, checked 2026-08-13. WarpBuild cache is served through the WarpBuilds/cache action and is enabled by default on Linux runners. Plan for cold cache runs on the first build of each key on WarpBuild, the same way Namespace documents a warm up period for their own volumes.
Can I run both providers at once?
Yes. runs-on is evaluated per job, so one job can point at a warp- label while every other job stays on a Namespace label. Nothing in the Namespace docs forbids it, verified 2026-08-13. Billing continues on both sides during the overlap.
What happens to my Namespace plan while I test?
Namespace bills a prepaid plan fee plus overage monthly and states that plan changes apply immediately with prepaid charges prorated at namespace.so/docs/workspaces/billing-and-limits, checked 2026-08-13. A team mid contract on a paid plan keeps paying the base fee during a parallel run. WarpBuild has no base subscription fee, so the parallel run costs only the minutes you use, and signup credits cover the first ones.
How do I roll back?
Revert the pull request. The runner label is the only required change, so rollback is a same day operation. Any Namespace specific actions you removed come back with the same revert.
Does anything change for secrets and permissions?
GitHub secrets, OIDC and GITHUB_TOKEN permissions are unchanged, because the workflow still runs on GitHub Actions with the same repository configuration. The WarpBuild GitHub bot needs repository access, and any Namespace workload identity federation configured for their runners is retired once no jobs run there.
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.