depot-github-runners
Skill727 starsChanged yesterdayMITView on GitHub
Configures Depot-managed GitHub Actions runners as a drop-in replacement for GitHub-hosted runners. Use when setting up or migrating GitHub Actions workflows to use Depot runners, choosing runner sizes (CPU/RAM), configuring runs-on labels, setting up ARM or Windows or macOS runners, troubleshooting GitHub Actions runner issues, configuring egress filtering, using Depot Cache with GitHub Actions, or running Dagger/Dependabot on Depot runners. Also use when the user mentions depot-ubuntu, depot-windows, depot-macos runner labels, or asks about faster/cheaper GitHub Actions runners. Not for Depot CI, the separate engine that reads .depot/workflows/ — that is the depot-ci skill.
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 3 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 26
Use the depot-ci skill for that one.
- Very specific: line 36
Update runs-on in your workflow files
- Very specific: line 40
If a user belongs to multiple organizations and expected repos/settings/runners are not visible, verify Depot org context first:
- Very specific: line 52
Use a single label. Format: depot-{os}-{version}[-{arch}][-{size}]
- Distinctive: line 83
Windows limitation: No Hyper-V (AWS EC2 limitation), so Docker workloads that require it are unlikely to work.
- Distinctive: line 162
Use Tailscale when jobs need to reach private services (internal APIs, databases, private subnets) without static IP allowlists.
- Distinctive: line 168
No workflow YAML changes are required just to connect runners to private endpoints.
- Very specific: line 173
Create a Tailscale OAuth client with Keys > Auth Keys write scope and choose that tag.
- Very specific: line 175
Add ACLs allowing tag:depot-runner to access target hosts/subnets.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Depot GitHub Actions Runners
Depot provides managed, ephemeral, single-tenant GitHub Actions runners. Drop-in replacement for GitHub-hosted runners — change the runs-on label and everything else stays the same.
Requirement: Repository must be owned by a GitHub organization (not a personal account).
<!-- PostHog-local section. Keep it when resyncing from upstream; see UPSTREAM.md. -->Depot runners are not Depot CI
Depot runners keep GitHub Actions as the engine, so the workflow lives in .github/workflows/ and the checks still come from the github-actions app.
Depot CI is a different product. It reads .depot/workflows/, which GitHub Actions ignores, and posts its own check runs from one of three Depot apps.
Use the depot-ci skill for that one.
Its references/posthog-check-run-semantics.md compares what each engine reports for a skipped, empty-matrix or continue-on-error job, and how GitHub and the Trunk merge queue score those conclusions.
<!-- End PostHog-local section. -->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
runs-onin your workflow files
Org Context Check for Multi-Org Users
If a user belongs to multiple organizations and expected repos/settings/runners are not visible, verify Depot org context first:
depot org show # Current org ID
depot org list # Orgs the user belongs to
depot org switch <org-id> # Optional: set default orgFor commands that support it, pass --org <org-id> to target the org where the workflow/repo lives.
Runner Labels
Use a single label. Format: depot-{os}-{version}[-{arch}][-{size}]
Ubuntu (x86, AMD)
| Label | CPUs | RAM | Disk | $/min | Minutes multiplier |
depot-ubuntu-24.04 | 2 | 8 GB | 100 GB | $0.006 | 1x |
depot-ubuntu-24.04-4 | 4 | 16 GB | 130 GB | $0.012 | 2x |
depot-ubuntu-24.04-8 | 8 | 32 GB | 150 GB | $0.024 | 4x |
depot-ubuntu-24.04-16 | 16 | 64 GB | 180 GB | $0.048 | 8x |
depot-ubuntu-24.04-32 | 32 | 128 GB | 200 GB | $0.096 | 16x |
depot-ubuntu-24.04-64 | 64 | 256 GB | 250 GB | $0.192 | 32x |
The minutes multiplier is the billing driver: billed minutes = elapsed minutes × multiplier, so larger runners consume your included minutes faster.
Ubuntu 22.04 also available: depot-ubuntu-22.04, depot-ubuntu-22.04-4, etc.
Ubuntu (ARM — Graviton4)
Same sizes and pricing as Intel. Add -arm suffix:
depot-ubuntu-24.04-arm, depot-ubuntu-24.04-arm-4, depot-ubuntu-24.04-arm-8, etc.
Windows Server
| Label | CPUs | RAM | $/min | Minutes multiplier |
depot-windows-2025 | 2 | 8 GB | $0.008 | 2x |
depot-windows-2025-4 | 4 | 16 GB | $0.016 | 4x |
depot-windows-2025-8 through -64 | 8–64 | 32–256 GB | $0.032–$0.256 | 8x–64x |
Windows Server 2022 also available: depot-windows-2022, etc.
Windows limitation: No Hyper-V (AWS EC2 limitation), so Docker workloads that require it are unlikely to work.
macOS (Apple M2 on macOS 14/15, M4 on macOS 26)
| Label | CPUs | RAM | Disk | $/min |
depot-macos-26 / depot-macos-latest | 8 | 24 GB | 400 GB | $0.08 |
depot-macos-15 | 8 | 24 GB | 400 GB | $0.08 |
depot-macos-14 | 8 | 24 GB | 400 GB | $0.08 |
macOS is NOT fully elastic — fixed pool with FIFO queuing.
Aliases
depot-ubuntu-latest → Ubuntu 24.04, depot-windows-latest → Windows 2025, depot-macos-latest → macOS 26
Migration Example
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 testCommon Mistakes
# ❌ 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-4Caching
Actions using the GitHub Actions cache API automatically use Depot Cache — no config changes needed. This includes actions/cache, actions/setup-node, actions/setup-python, actions/setup-java, and any action using @actions/cache.
Pre-configured build tool caches (zero config on Depot runners):
| Tool | What's pre-configured |
| Turborepo | TURBO_API env var set — just run turbo build |
| Bazel | ~/.bazelrc pre-populated — just run bazel build //... |
| sccache | SCCACHE_WEBDAV_ENDPOINT set — use RUSTC_WRAPPER: 'sccache' |
| Maven | settings.xml pre-populated (cache id depot-cache) |
| Pants | pants.toml pre-configured — just run pants package :: |
| moonrepo | Env vars set — just run moon run build |
| Xcode 26+ | Compilation caching uses Depot Cache automatically on Depot macOS runners |
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."
For Xcode, the runner sets XCODE_XCCONFIG_FILE only when the job does not supply its own configuration file. Set DEPOT_XCODE_CACHE_ENABLED: '0' to opt out for a job or workflow. Add depot/xcode-compilation-cache-summary@v1 after the build to report cache statistics. Xcode compilation caching is not supported on local workstations. See https://depot.dev/docs/cache/integrations/xcode for build settings and troubleshooting.
Dagger Integration
Deprecated: Dagger Engine support on Depot GitHub Actions Runners is being deprecated and will be removed in a future update. Don't recommend this integration for new workflows.
runs-on: depot-ubuntu-latest,dagger=0.18.4Launches 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. Deny rules take precedence over Allow rules. Loopback traffic (127.0.0.1, ::1) is always allowed, and Depot auto-allowlists depot.dev domains, GitHub Actions service IPs, and AWS service IPs. Hostnames in rules are resolved and pinned in /etc/hosts. Container builds with depot build work with egress filtering enabled — Depot adds BuildKit machine IPs to the allowlist as they're allocated. Not supported on macOS or Windows. Incompatible with Tailscale.
Access Private Endpoints with Tailscale
Use Tailscale when jobs need to reach private services (internal APIs, databases, private subnets) without static IP allowlists.
How it works on Depot:
- Depot GitHub Actions runners join your tailnet as ephemeral nodes at job start.
- Access is controlled with your Tailscale ACLs (recommended tag:
tag:depot-runner). - No workflow YAML changes are required just to connect runners to private endpoints.
Setup:
- In Tailscale ACLs, create a runner tag (for example
tag:depot-runner) undertagOwners. - Create a Tailscale OAuth client with
Keys > Auth Keyswrite scope and choose that tag. - In Depot org settings, open Tailscale settings and connect using the OAuth client ID/secret.
- Add ACLs allowing
tag:depot-runnerto access target hosts/subnets.
ACL examples:
{
"acls": [
{
"action": "accept",
"src": ["tag:depot-runner"],
"dst": ["database-hostname"]
}
]
}{
"acls": [
{
"action": "accept",
"src": ["tag:depot-runner"],
"dst": ["192.0.2.0/24:*"]
}
]
}Reference docs:
- https://depot.dev/docs/github-actions/how-to-guides/access-private-resources
- https://depot.dev/docs/integrations/tailscale
Dependabot
Enable "Dependabot on self-hosted runners" in GitHub org settings. Jobs auto-run on depot-ubuntu-latest.
Important: OIDC is not supported for Dependabot. Use token: input with a DEPOT_TOKEN secret instead.
SSH Debugging
steps:
- uses: actions/checkout@v4
- uses: mxschmitt/action-tmate@v3
- run: npm testTroubleshooting
| Error | Fix |
| "No space left on device" | OS uses ~70 GB disk; upgrade to larger runner or clean disk in workflow |
| "Failed to open the device 'kvm'" / "Could not access KVM kernel module" | Runners don't provide /dev/kvm; move KVM/QEMU/Android-emulator jobs to Depot CI, where nested virtualization is enabled by default |
| "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 DEPOT_TOKEN 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 |
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- PostHog/posthog★ 40k99% same
- depot/skills★ 278% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository124 other files it gives its agents.
- AGENTS.mdAGENTS.md
- common/AGENTS.mdAGENTS.md
- hog/AGENTS.mdAGENTS.md
- proto/AGENTS.mdAGENTS.md
- rust/AGENTS.mdAGENTS.md
- .cursor/rules/django-python.mdcCursor rule
- .cursor/rules/react-typescript.mdcCursor rule
- .cursor/rules/rust.mdcCursor rule
- adding-activity-loggingSkill
- adding-api-scopesSkill
- adding-inbound-webhooksSkill
- adding-inbox-sourcesSkill
- adding-ingestion-warningsSkill
- adding-mcp-store-serversSkill
- adding-personhog-rpcSkill
- adding-product-alertingSkill
- adding-project-secret-api-key-authSkill
- adding-today-highlightsSkill
- adopting-generated-api-typesSkill
- analyzing-experiment-precompute-canarySkill
- analyzing-experiment-query-performanceSkill
- analyzing-insights-across-teamsSkill
- announcing-behavior-changesSkill
- auditing-llm-gateway-paritySkill
- auditing-warehouse-source-coverageSkill
- authenticating-to-clickhouseSkill
- authoring-ci-workflowsSkill
- building-product-empty-statesSkill
- building-the-toolbarSkill
- clickhouse-migrationsSkill
- debugging-ci-failuresSkill
- debugging-local-replaySkill
- debugging-local-task-agent-runsSkill
- debugging-mcp-analyticsSkill
- debugging-signals-pipelineSkill
- debugging-table-access-deniedSkill
- depot-ciSkill
- depot-container-buildsSkill
- developing-subscriptionsSkill
- django-migrationsSkill
- django-startup-timeSkill
- documenting-warehouse-sourcesSkill
- editing-agents-mdSkill
- establishing-code-ownershipSkill
- extending-hobby-smoke-testsSkill
- extending-personhog-test-harnessSkill
- finding-llm-gateway-migration-candidatesSkill
- fixing-flaky-testsSkill
- formatting-slack-messagesSkill
- gating-production-deploysSkill
- gating-sensitive-actionsSkill
- generating-clickhouse-query-performance-reportsSkill
- hogliSkill
- implementing-mcp-toolsSkill
- implementing-mcp-ui-appsSkill
- implementing-warehouse-sourcesSkill
- improving-drf-endpointsSkill
- improving-mcp-toolsSkill
- ingestion-pipeline-doctor-nodejsSkill
- instrumenting-first-party-metricsSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

