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.

  1. 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).
  2. 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).
  3. A list of the Namespace features your workflows actually use. Grep the repository for nscloud, namespace-profile, namespacelabs/ and NSC_ 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-8x

A job on a Namespace runner profile changes the same way.

 jobs:
   integration:
-    runs-on: namespace-profile-large-builder
+    runs-on: warp-ubuntu-latest-x64-16x

Label 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 labelNamespace machineWarpBuild labelWarpBuild machine
nscloud-ubuntu-24.04-amd64-2x42 vCPU, 4 GBwarp-ubuntu-latest-x64-2x2 vCPU, 8 GB
nscloud-ubuntu-24.04-amd64-4x84 vCPU, 8 GBwarp-ubuntu-latest-x64-4x4 vCPU, 16 GB
nscloud-ubuntu-24.04-amd64-8x168 vCPU, 16 GBwarp-ubuntu-latest-x64-8x8 vCPU, 32 GB
nscloud-ubuntu-24.04-amd64-16x3216 vCPU, 32 GBwarp-ubuntu-latest-x64-16x16 vCPU, 64 GB
nscloud-ubuntu-24.04-amd64-32x6432 vCPU, 64 GBwarp-ubuntu-latest-x64-32x32 vCPU, 128 GB
nscloud-ubuntu-24.04-arm64-8x168 vCPU, 16 GBwarp-ubuntu-latest-arm64-8x8 vCPU, 32 GB
nscloud-ubuntu-22.04-amd64-8x168 vCPU, 16 GBwarp-ubuntu-2204-x64-8x8 vCPU, 32 GB
nscloud-ubuntu-26.04-amd64-8x168 vCPU, 16 GBwarp-ubuntu-2604-x64-8x8 vCPU, 32 GB
nscloud-ubuntu-20.04-amd64-8x168 vCPU, 16 GBNo Ubuntu 20.04 imageMove the job to 22.04 or newer
nscloud-windows-2022-amd64-4x84 vCPU, 8 GBwarp-windows-latest-x64-4x4 vCPU, 16 GB
nscloud-windows-2022-amd64-2x42 vCPU, 4 GBwarp-windows-latest-x64-4x4 vCPU, 16 GB, the smallest Windows size
nscloud-macos-sonoma-arm64-6x146 vCPU, 14 GBwarp-macos-14-arm64-6x6 vCPU, 22 GB
nscloud-macos-sequoia-arm64-6x146 vCPU, 14 GBwarp-macos-15-arm64-6x6 vCPU, 22 GB
nscloud-macos-tahoe-arm64-6x146 vCPU, 14 GBwarp-macos-26-arm64-6x6 vCPU, 22 GB
nscloud-macos-tahoe-arm64-12x2812 vCPU, 28 GBwarp-macos-26-arm64-12x12 vCPU, 44 GB
nscloud-macos-goldengate-arm64-6x146 vCPU, 14 GBNo macOS 27 host image. warp-macos-26-arm64-6x ships Xcode 27.0 and the macOS 27 SDKs6 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 partWarpBuild equivalent
-with-cacheCache is enabled by default on WarpBuild Linux runners, so no label part is needed (caching)
-with-builders, nscloud-in-runner-builderRemote 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>gbNo sizing label. Cache is unlimited and billed per GB-month (pricing)
nscloud-cache-exp-do-not-commitUse WarpBuilds/cache/restore@v1 without the matching save step
namespace-features:tailscale.specnetwork.name=<config-name> on the runner label (networking)
namespace-features:job.priorityNo direct equivalent. Generally available WarpBuild Linux and Windows runners do not have plan-level concurrency caps.
namespace-features:github.run-idNo equivalent. It exists to make scheduling deterministic under concurrency limits
namespace-features:macos.channel=previewNo 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 test

After, 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 test

The 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 featureWarpBuild equivalentStatus
Cache VolumesWarpBuild cache, served through the WarpBuilds/cache action and enabled by default on Linux runnersDifferent architecture, same job
nscloud-cache-actionWarpBuilds/cache@v1, or a cache enabled WarpBuilds/setup-* action for language toolchainsEquivalent
Namespace ArtifactsNo named equivalent. Use actions/upload-artifact or your own object storageNo equivalent
Container image cachingContainer layer caching on WarpBuild runners, plus remote Docker builders with a persistent layer cacheEquivalent
nscloud-checkout-actionNo repository mirror cache. Revert to actions/checkout@v4No equivalent
Toolchain download cachingThe WarpBuilds/setup-* actions cache toolchains and package manager dependenciesEquivalent for the covered languages
Action download cachingNo named equivalentNo equivalent
Bazel remote cacheNo named Bazel product. Point Bazel at your own remote cacheNo equivalent
Turborepo cacheNo named Turborepo product. Store the Turborepo cache directory with WarpBuilds/cache@v1Partial
Gradle cacheWarpBuilds/gradle-actions, a drop-in replacement for gradle/actionsEquivalent
sccacheNo named sccache product. Store the sccache directory with WarpBuilds/cache@v1Partial

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 featureWarpBuild equivalentStatusNote
runs-on label switchwarp- labelsSupportedOne line per job, reversible in the same pull request
Runner profiles (namespace-profile-<name>)Labels plus label modifiers, and custom runner configuration on BYOCPartialProfile 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 runnersUbuntu 22.04, 24.04 and 26.04 on x64; 24.04 and 26.04 on ARM64SupportedUbuntu 20.04 has no WarpBuild image
Windows runnersWindows Server 2022 and 2025, from 4 vCPU upPartialNo 2 vCPU Windows machine on WarpBuild
macOS runnersmacOS 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 runtimesPartialCurrent 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 SiliconNoneUnsupportedJobs using it stay on Namespace or move to Linux ARM64
Breakpoints and SSH into a jobAction Debugger opens an SSH session from inside the workflowSupportedDifferent mechanics, same outcome
VNC remote display for macOSNoneUnsupportedmacOS UI sessions over VNC have no WarpBuild equivalent
Egress policies with allow and block rulesNot a WarpBuild product. Network policy lives in your own cloud on BYOCPartialBYOC runners inherit your VPC egress controls
Job metrics and insightsCI observability with OpenTelemetry metrics correlated to job logsSupported
SAML single sign-onSAML 2.0 and OIDC with self-serve identity provider setupSupportedFlat $250 per month, whatever the user count (pricing)
gRPC API and nsc CLIAutomation API for documented runner and image operations, plus a hosted MCP server for its supported toolsSupported
DevboxesNoneUnsupportedWarpBuild sells GitHub Actions infrastructure only
Concurrency plan capsNo plan-level concurrency caps for generally available Linux and Windows runnersSupportedReview 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:

  1. Pick the workflow with the longest queue plus run time.
  2. Move one job in it to a warp- label and leave every other job on its Namespace label.
  3. Let it run for a week so the cache warms and the comparison covers steady state rather than first run timings.
  4. 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-cache

Reverting 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-on change 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.