Depot GitHub Actions Runners
Depot provides managed, ephemeral, single-tenant GitHub Actions runners. Drop-in replacement for GitHub-hosted runners — change the
label and everything else stays the same.
Requirement: Repository must be owned by a GitHub organization (not a personal account).
Setup
- Depot dashboard → GitHub Actions → Connect to GitHub → Install Depot GitHub App
- For public repos: GitHub org settings → Actions → Runner groups → Default → "Allow public repositories"
- Update in your workflow files
Runner Labels
Use a single label. Format:
depot-{os}-{version}[-{arch}][-{size}]
Ubuntu (Intel x86 — AMD EPYC)
| Label | CPUs | RAM | Disk | $/min |
|---|
| 2 | 8 GB | 100 GB | $0.004 |
| 4 | 16 GB | 130 GB | $0.008 |
| 8 | 32 GB | 150 GB | $0.016 |
| 16 | 64 GB | 180 GB | $0.032 |
| 32 | 128 GB | 200 GB | $0.064 |
| 64 | 256 GB | 250 GB | $0.128 |
Ubuntu 22.04 also available:
,
, etc.
Ubuntu (ARM — Graviton4)
Same sizes and pricing as Intel. Add
suffix:
,
,
, etc.
Windows Server
| Label | CPUs | RAM | $/min |
|---|
| 2 | 8 GB | $0.008 |
| 4 | 16 GB | $0.016 |
| through | 8–64 | 32–256 GB | $0.032–$0.256 |
Windows Server 2022 also available:
, etc.
Windows limitation: No Hyper-V. Docker does not work on Windows runners.
macOS (Apple M2)
| Label | CPUs | RAM | $/min |
|---|
| / | 8 | 24 GB | $0.08 |
| 8 | 24 GB | $0.08 |
macOS is NOT fully elastic — fixed pool with FIFO queuing. Startup plan+ only.
Aliases
→ Ubuntu 24.04,
→ Windows 2025,
→ macOS 15
Migration Example
yaml
jobs:
build:
# Before:
# runs-on: ubuntu-latest
# After:
runs-on: depot-ubuntu-24.04-4
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm test
Common Mistakes
yaml
# ❌ WRONG — multiple labels cause stability issues
runs-on: [self-hosted, depot-ubuntu-24.04]
# ✅ CORRECT — always use a single Depot runner label
runs-on: depot-ubuntu-24.04-4
Caching
Actions using the GitHub Actions cache API automatically use
Depot Cache — no config changes needed. This includes
,
,
,
, and any action using
.
Pre-configured build tool caches (zero config on Depot runners):
| Tool | What's pre-configured |
|---|
| Turborepo | env var set — just run |
| Bazel | pre-populated — just run |
| sccache | set — use |
| Maven | pre-populated (cache id ) |
| Pants | pre-configured — just run |
| moonrepo | Env vars set — just run |
Cache behavior: repository-scoped, no branch isolation, encrypted, up to 1000 MiB/s throughput, configurable retention (7/14/30 days).
To disable auto-cache: org settings → turn off "Allow Actions jobs to automatically connect to Depot Cache."
Dagger Integration
yaml
runs-on: depot-ubuntu-latest,dagger=0.15.1
Launches a dedicated Dagger Engine VM with persistent NVMe cache. Dagger CLI pre-installed. Additional $0.04/min.
Egress Filtering (Linux Only)
Configure in org settings → GitHub Actions Runners → Egress Rules. Set default rule to Allow or Deny, then add specific allow/deny rules for IPs, CIDRs, or hostnames. Not supported on macOS or Windows. Incompatible with Tailscale.
Dependabot
Enable "Dependabot on self-hosted runners" in GitHub org settings. Jobs auto-run on
.
Important: OIDC is not supported for Dependabot. Use
input with a
secret instead.
SSH Debugging
yaml
steps:
- uses: actions/checkout@v4
- uses: mxschmitt/action-tmate@v3
- run: npm test
Troubleshooting
| Error | Fix |
|---|
| "No space left on device" | OS uses ~70 GB disk; upgrade to larger runner or clean disk in workflow |
| "Lost communication with server" | Check status.depot.dev; check org usage caps |
| "Operation was canceled" | Manual cancel, concurrency cancel-in-progress, or OOM — check memory in dashboard |
| "Unable to get ACTIONS_ID_TOKEN_REQUEST_URL" | Dependabot doesn't support OIDC — use secret |
| Workflows not starting | Verify single runner label; check runner group allows the repo; verify Depot GitHub App permissions |
| Stuck workflows | Force cancel via GitHub API: POST /repos/{owner}/{repo}/actions/runs/{id}/force-cancel
|