GitHub Actions Runner No Space Left On Device
Get a free runner storage preview first: largest buckets, a safe starter cleanup YAML, and the review-first paths that should not be deleted blindly. If the failure still needs judgment, send one email for a scope check and receive the $29 CI report link only when paid review is useful.
Send one email. Pay only if the runner still needs judgment.
Use this when the runner still fails after obvious cleanup, or when Docker, tool cache, workspace, Nix/Cargo output, or `_diag` logs need a safe order. No card, no secrets, and no full log upload here.
CPU images should not pull CUDA wheels.
For failures where a CPU Docker image pulls `torch`, `nvidia-*`, `triton`, or `libtorch_cuda.so` and fills the GitHub runner, preview the Docker-specific sample first. The paid triage turns the failing layer, dependency pins, and disk snapshot into one safe fix order.
Try the safe starter cleanup before paying.
Copy the YAML below first. It only removes rebuildable temp/build cache on disposable runners and leaves volumes, tool caches, workspaces, simulator runtimes, and diagnostic logs alone. If the job still fails, use the $29 triage form with the before/after disk output.
Copy the disposable-runner cleanup YAML first.
This starter only targets rebuildable CI state on GitHub-hosted or disposable runners: temp files, package temp caches, DerivedData, SwiftPM/CocoaPods caches, and Docker build cache. It avoids volumes, archives, tool caches, workspaces, simulator runtimes, and `_diag` logs.
- name: SafeDisk starter cleanup
if: always()
shell: bash
run: |
set -euo pipefail
echo "Before cleanup"
df -h
rm -rf "${RUNNER_TEMP:-/tmp}"/* 2>/dev/null || true
rm -rf ~/.npm/_cacache/tmp 2>/dev/null || true
rm -rf ~/.cache/pip 2>/dev/null || true
if [ "${RUNNER_OS:-}" = "macOS" ]; then
rm -rf ~/Library/Developer/Xcode/DerivedData/* 2>/dev/null || true
rm -rf ~/Library/Caches/org.swift.swiftpm/* 2>/dev/null || true
rm -rf ~/Library/Caches/CocoaPods/* 2>/dev/null || true
fi
docker builder prune -af 2>/dev/null || true
echo "After cleanup"
df -h
For persistent self-hosted runners, review tool caches, Docker volumes, and workspace retention before using any cleanup step.
See the runner policy preview before paying.
The sample preview loads locally on this page. For your runner, copy the read-only Action once; it uploads a text artifact only and never deletes caches, Docker state, Xcode runtimes, runner workspaces, or `_diag` logs.
- name: SafeDisk CI storage scan
if: always()
uses: liuminsheng3/safedisk-ci-scan-action@v1
The local policy preview will show the largest bucket, free starter cleanup, and what remains review-first.
Use the free layer for the obvious cleanup, then pay only for judgment.
Start with the read-only scan or the sample preview. The page gives a starter YAML for safer cleanup. If review-first buckets remain, send the artifact for the $29 incident triage and get the exact cleanup boundary for Docker cache, runner workspaces, tool caches, Xcode runtimes, or `_diag` logs.
No mail app or GitHub login? Send this directly from any inbox.
liuminsheng3@gmail.com - SafeDisk free CI scope check
Prefer private email over a public GitHub issue? Start with the free scope check. We send the $29 triage or $99 team policy link only if the evidence fits.
Run the read-only Action
Add this step near the failing build on `ubuntu-latest`, `macos-latest`, or a self-hosted Linux/macOS runner. It prints disk, inode, Docker, workspace, cache, and Xcode metadata only, uploads a scan artifact, and does not delete runner files.
- name: SafeDisk CI storage scan
if: always()
uses: liuminsheng3/safedisk-ci-scan-action@v1
Get the safest next CI disk check by email.
Email is enough for the first pass. Add the runner OS or failing command only if you have it handy; we reply with the next read-only check or the safest cleanup boundary.
Check whether this needs a $99 team policy.
Use this when a workflow fails with ENOSPC, Docker builds fill the runner, a self-hosted runner keeps growing, or team members disagree about what can be deleted safely.
What the scan checks
- Runner disk overview, workspace, temp, tool cache, current job paths, and runner image metadata.
- Linux runner pressure points: `/home/runner/actions-runner`, `_work`, `_diag`, `_tool`, `/tmp`, `/var/lib/docker`, and Docker build cache.
- macOS runner pressure points: Xcode, DerivedData, Archives, CoreSimulator, SwiftPM, CocoaPods, Homebrew, npm, pnpm, and Gradle caches.
- Large workspace files and common build outputs that grow silently across repeated CI jobs.
How to interpret no-space failures
A CI runner can be out of usable space even when the root cause is not obvious from the failing command. `no space left on device` can be triggered by Docker overlay growth, a build cache, a test artifact directory, `/tmp`, Xcode simulator runtimes, or a self-hosted runner that never rotates old workspaces.
Usually safe to automate
- Per-job temp files after the job finishes.
- Known rebuildable package caches with a size cap.
- Old workflow artifacts copied into runner-local scratch paths.
Review before deleting
- Docker images, build cache, and volumes used by later jobs.
- Shared tool caches on self-hosted runners.
- Xcode runtimes, SDKs, and simulator state required by pinned builds.
Do not touch blindly
- Runner registration, service files, credentials, and `_diag` logs needed for incident review.
- Persistent Docker volumes that may contain databases or test fixtures.
- Team-specific build outputs that are reused outside the current job.
Local CI preview
Preview the runner policy before sending anything.
Upload or paste the generated CI scan. The preview runs in your browser and stores the scan only for checkout prefill.
Upload or paste a SafeDisk CI scan to preview the runner cleanup policy.
Close the incident with a policy
The paid pilot turns one representative scan into a cleanup policy your team can review, automate, and reuse instead of debating every disk-full incident from scratch.