GitHub Actions Answers
Direct answers to common GitHub Actions questions, each backed by linked sources.
- Am I Billed When a Job Fails?Yes. A failed GitHub Actions job bills every minute its machine ran, so the lever is failing fast: matrix fail-fast, job timeouts, and cheap checks first.
- Are Build Secrets Visible to the Runner Platform?No. GitHub holds your secrets and injects them into the job environment, and WarpBuild documents that it does not access or store any build secrets.
- Are GitHub Actions Free for Open Source Repositories?Yes on standard GitHub-hosted runners: public repository minutes cost nothing. Managed runners work there once the Default runner group allows public repos.
- Are GitHub Actions Free for Private Repositories?No. Private repositories get a monthly GitHub Actions minute allowance per plan and pay per minute past it. WarpBuild Linux runners start at $0.004.
- Are Managed GitHub Actions Runners Secure?Yes, when each job gets its own ephemeral virtual machine. WarpBuild creates a VM per job, destroys it after the build, and holds SOC 2 Type 2 attestation.
- Are Snapshot Runners Safe for Public Repositories?Yes, with one rule: keep credentials off the snapshot disk. The documentation warns that a pull request run can boot from your alias on a public repository.
- Can AI Agents Run GitHub Actions Jobs?Yes. AI agents start GitHub Actions workflows like any other actor. What matters is the environment the job boots into and the feedback loop it returns.
- Can an AI Agent Query My GitHub Actions Metrics?Yes. WarpBuild hosts an MCP server at mcp.warpbuild.com/mcp that exposes the WarpBuild API to an editor assistant, so it reads job, runner, and cost data.
- Can BYOC Runners Reach Internal Services?Yes. BYOC runners are ephemeral EC2 instances inside your own VPC, so reaching an internal database, registry, or API follows your own routing rules.
- Can GitHub Actions Build iOS Apps Without a Mac?No. An iOS archive needs Xcode, and Xcode runs only on macOS, so the job lands on a macOS runner such as warp-macos-latest-arm64-6x at $0.08 a minute.
- Can GitHub Actions Build Multi Architecture Images?Yes. GitHub Actions builds multi architecture images natively across x64 and ARM64 runners, or in one job on a builder profile with both enabled.
- Can GitHub Actions Run an Android Emulator?Yes. GitHub Actions runs a hardware-accelerated Android emulator on Linux x86-64 runners that expose /dev/kvm, once the KVM udev permission step is added.
- Can GitHub Actions Run on ARM64?Yes. GitHub Actions runs natively on ARM64 runners. Point runs-on at an ARM64 label such as warp-ubuntu-latest-arm64-4x, billed at $0.006 per minute.
- Can GitHub Actions Run Windows Builds?Yes. GitHub Actions runs Windows builds on x86-64 Windows runners. Point runs-on at a label such as warp-windows-latest-x64-8x, billed at $0.032 per minute.
- Can I Still Build on Windows Server 2022?Yes. Windows Server 2022 stays in the WarpBuild catalog on the warp-windows-latest-x64 and warp-windows-2022-x64 labels, priced from $0.016 per minute.
- Can GitHub Actions Runners Reach My Private Network?Yes. The networking addon joins each WarpBuild runner to your Tailscale tailnet at job start as an ephemeral node that is removed when the job ends.
- Can GitHub Actions Runners Run in My Own Cloud Account?Yes. WarpBuild BYOC runs GitHub Actions runners inside your own AWS, GCP, or Azure account, your cloud bills the compute, WarpBuild charges $0.002 per minute.
- Can I Alert When a Runner Runs Out of Memory?Yes. Resource threshold alerts flag every runner whose max memory utilization reaches 80 percent, and the signal worth acting on is sustained pressure.
- Can I Attach an IAM Role to a BYOC Runner?Yes. AWS BYOC runners take an IAM instance profile per runner class, so GitHub Actions jobs receive scoped AWS credentials without an access key in a secret.
- Can I Build ARM64 Images on an x64 Runner?Yes, through QEMU emulation of aarch64 instructions. A native ARM64 label such as warp-ubuntu-latest-arm64-8x at $0.012 per minute skips the translation.
- Can I Cache a Built Image Instead of Rebuilding It?Yes. Push the image once and pull it by digest in later jobs, which usually beats saving a tar through the cache. The byte math, the YAML, the exceptions.
- Can I Keep a Database Warm Between Jobs?Yes. Snapshot a WarpBuild Ubuntu runner once the database is seeded, and later jobs boot with the data directory already on disk instead of importing it.
- Can I Keep Builds in the EU Only?Yes for build data. US and EU are the regions WarpBuild names publicly, and BYOC puts the runner, its disk, and the cache bucket in an EU region you own.
- Can I Keep DerivedData Between Runs?Yes. Cache the DerivedData directory keyed on your lockfile and Xcode version, or keep prepared machine state. What restores safely and what breaks.
- Can I Mix GitHub-Hosted and Managed Runners?Yes. runs-on is evaluated per job, so one workflow can send heavy jobs to a warp- label and leave short jobs on GitHub-hosted runners with no other change.
- Can I Restrict Outbound Traffic From Runners?Yes. Narrow the egress rules on your BYOC runner security group, as long as runners keep reaching the WarpBuild control plane, GitHub, and your registries.
- Can I Restrict Which Repositories Use My Runners?Yes. A GitHub runner group decides which repositories may claim a set of runners, and the WarpBuild connection list adds a second allowlist in front of it.
- Can I Build 32-bit ARM Targets on ARM64 Runners?Yes. Cross compile with an arm-linux-gnueabihf toolchain on an ARM64 runner such as warp-ubuntu-latest-arm64-4x at $0.006 per minute, then test on hardware.
- Can Android and iOS Builds Share One Workflow?Yes. runs-on is a per-job setting, so an Android job on a Linux label and an iOS job on a macOS label live in the same GitHub Actions workflow file.
- Can ARM64 and x64 Jobs Run in One Workflow?Yes. runs-on is set per job, so one matrix leg can run on warp-ubuntu-latest-arm64-8x at $0.012 per minute and another on an x64 label in the same run.
- Can I Run BYOC in More Than One Region?Yes. Create one BYOC stack per region under the same cloud connection, add custom runners to each stack, and the runs-on label picks the region a job lands in.
- Can BYOC Runners Run in a Private Subnet?Yes. BYOC runners launch in private subnets when static IPs are on, provided route tables and security group rules let each instance reach its destinations.
- Can I Run Docker Compose in GitHub Actions?Yes, on a Linux runner. Docker Compose v2 ships in the Ubuntu runner images, and stacks fail on runner memory and CPU rather than on compose itself.
- Can I Run Docker on Windows Runners?Yes, for Windows containers. Windows GitHub Actions runners run a Windows Docker daemon, so Linux images need a Linux warp- runner or a remote Docker builder.
- Can I Run macOS Runners in the EU?US and EU are the regions WarpBuild names publicly, and region selection applies to the runner fleet your org is assigned. macOS instances sit outside it.
- Can I Run More Jobs Than My Plan Allows?Yes. The concurrent job ceiling on your GitHub plan counts jobs on GitHub-hosted labels only, so jobs routed to warp- labels queue on WarpBuild capacity.
- Can I Run Unit Tests in Parallel on Windows Runners?Yes. Raise the test runner's worker count on one larger Windows runner, or shard the suite across several jobs. The two shapes carry different cost profiles.
- Can I Set a Spending Limit on GitHub Actions Runners?A spending limit on GitHub Actions runners lives in the workflow file: runner labels, timeout-minutes, concurrency groups, and path filters cap billed minutes.
- Can I Share a Cache Between GitHub Actions Workflows?Yes. Cache entries are addressed by key, version, and branch rather than by workflow, so any workflow in the same repository can restore what another saved.
- Can I Snapshot a Runner on a Feature Branch?Yes. Publish a clean snapshot on the default branch and let feature branches boot from it, or give a branch its own alias and sweep it on close.
- Can I SSH Into a GitHub Actions Runner?Yes. Add the open-source Action Debugger step to a job and the workflow pauses, an SSH session opens on the runner, and the URL lands in the logs.
- Can You Run Docker on macOS GitHub Actions Runners?No. macOS GitHub Actions runners cannot run Docker and have no nested virtualization. Send container steps to a Linux warp- label or a remote Docker builder.
- Can I Use My Existing VPC With BYOC Runners?Yes. Import mode on AWS builds the BYOC stack against your existing VPC, subnets, and security group once they meet the documented network prerequisites.
- Can I Use Podman Instead of Docker in GitHub Actions?Yes, on Linux runners, for building and running OCI images. The tradeoff is that Buildx cache backends and remote builders stay Docker-side features.
- Can Two Jobs Share One Docker Builder?Yes. Jobs that name the same builder profile land on one builder VM, share its layer cache, and bill as one session. Concurrency, sizing, and cost.
- Do ARM64 Runners Support Docker Buildx?Yes. Buildx runs on ARM64 GitHub Actions runners and builds linux/arm64 natively, and an ARM64 job can attach a remote Docker builder just as an x64 job does.
- Do ARM64 Runners Use a Different Work Directory?Yes. Ubuntu 24.04 ARM64 runners set the work directory to /runner/_work instead of the /home/runner/work path GitHub-hosted runners use. Read GITHUB_WORKSPACE.
- Do BYOC Runners Need a NAT Gateway?Only when the runners sit in private subnets. BYOC runners need an outbound route to the documented destinations, and on AWS NAT gateways provide it.
- Do Caches Carry Across Branches?Caches carry in one direction. A run reads entries from its own branch and from the default branch, so a feature branch starts from whatever main last wrote.
- Do GitHub Actions Caches Work Across Architectures?No. An x64 cache entry restored into an ARM64 job hands that job binaries it cannot run. Put runner.arch in the key and in every restore-keys prefix.
- Do Caches Work on Windows GitHub Actions Runners?No. WarpBuild caching is documented as unsupported on Windows runners. Windows jobs cache through actions/cache@v4 or a build-tool cache in the workspace.
- How Much Disk Space Do GitHub Actions Runners Have?WarpBuild runners carry 150GB SSD on every Linux x64 and ARM64 label, 256GB SSD on Windows labels, and 120GB or 270GB on macOS. Builder profiles reach 2TB.
- Do GitHub Actions Runners Keep State Between Jobs?No. Each job gets a fresh ephemeral VM whose storage is destroyed when the runner terminates, unless a snapshot runner boots the job from saved VM state.
- Do GitHub Actions Runners Store My Source Code?No. A WarpBuild runner holds your checkout on an encrypted volume destroyed after the build. Cache entries, BYOC bucket objects, and snapshots are what persist.
- Do GitHub Actions Runners Support macOS?Yes. GitHub Actions runs macOS jobs on ARM64 runners such as warp-macos-15-arm64-6x, which carries 6 vCPU and 22GB of memory at $0.08 per minute.
- Do I Need Buildx in GitHub Actions?Yes for multi-platform images and cross-run cache backends, no for a single-platform build. What buildx adds, and what a remote builder profile removes.
- Do I Need to Rewrite My Workflow for Faster Runners?No. The runs-on label is the only required change, because WarpBuild runner images carry the same tooling as GitHub-hosted runners and steps run as written.
- Do I Pay a Seat Fee for GitHub Actions Runners?No. WarpBuild GitHub Actions runners bill purely by usage, with no base subscription fee, no platform fee, and no seat fee at any engineering headcount.
- Do I Pay for Both the Runner and the Builder?Yes. The GitHub Actions runner bills per minute and the remote Docker builder bills per session, on two separate lines. Both rate tables and a worked job.
- Do I Pay for Queue Time on GitHub Actions Runners?No. Billing starts when a job begins running on a machine, so GitHub Actions queue time never reaches the invoice and shows up as engineer wait time.
- Is Xcode Preinstalled on macOS Runners?Yes. Xcode ships inside the macOS runner image, so a job compiles with no download step. What else is preinstalled, and what still installs per job.
- Do Public Repositories Pay for Runners?Public repositories pay nothing for standard GitHub-hosted minutes and pay a per-minute rate for managed runners, once an owner allows public repos.
- Do Remote Docker Builders Support Multi Platform Builds?Yes. Each platform gets its own builder instance joined into one Buildx instance, so amd64 and arm64 compile natively and each bills as a separate session.
- Do Runner Groups Limit Concurrency?No. A runner group decides which repositories may claim a set of runners, so a bad group leaves jobs unclaimed with an empty log rather than merely slow.
- Do Snapshot Runners Replace the Cache?No. A cache action moves selected directories over the network and a snapshot boots a prepared machine. When each one fits, what each costs, how to run both.
- Do Snapshot Runners Work on macOS?No. Snapshot runners are documented for Linux x64 and Linux ARM64 only, so a macOS job keeps warm state through cached DerivedData and package directories.
- Do Windows Runners Support Nested Virtualization?No. WarpBuild Windows runners have no /dev/kvm. Nested virtualization is documented for cloud Linux x86-64 runners through a dynamic runs-on label.
- Does BYOC Support Custom VM Images?Yes. WarpBuild BYOC runs your own VM images on AWS, GCP, and Azure once they meet the documented requirements, and a custom runner selects the image.
- Does BYOC on GCP Support Local SSD?Yes. GCP BYOC runners detect and mount bundled Local SSDs at boot on Linux images, so the Compute Engine machine type you pick decides whether a job gets one.
- Does BYOC Support Windows Runners?Yes. WarpBuild BYOC runs Windows Server 2022 x86-64 runners on AWS and Azure, and the AWS docs set higher instance and disk minimums for Windows than Linux.
- Does BYOC Work With IMDSv2 Required?Yes. Require IMDSv2 is a documented per-runner setting on AWS BYOC custom runners, so GitHub Actions jobs read instance credentials only with a session token.
- Does Caching Work Inside a Container Job?Yes, with wget and zstd in the image and the verification token passed into the container. The usual failure is a cache path that resolves to the wrong home.
- Does GitHub Actions Support Apple Silicon Runners?Yes. GitHub Actions macOS runners are ARM64 on Apple Silicon. A label such as warp-macos-15-arm64-6x gives 6 vCPU and 22GB of memory at $0.08 a minute.
- Do Managed Runners Change My GitHub Permissions Model?No. Managed runners install as a GitHub App with a scoped permission set, and job level access stays governed by GITHUB_TOKEN and your permissions block.
- Is Visual Studio Preinstalled on Windows Runners?Yes. Every WarpBuild Windows runner image ships Visual Studio Enterprise. The vs2026 labels carry the 2026 edition, the other Windows labels carry 2022.
- How Are Snapshot Storage Costs Billed?Snapshot storage bills $0.025 per snapshot-hour for every hour a snapshot exists, so the count of live aliases and the 15 day lifetime set the monthly total.
- How Do I Attach Build Provenance to an Image?Set provenance mode=max on the build and push step so the builder attaches the attestation, then sign the pushed digest from the workflow with actions/attest.
- How Do I Audit Runner Configuration Changes?Changes made through the WarpBuild API are attributable to the key that made them, so scoping one key per person and per automation keeps the record useful.
- How Do I Authenticate to a Private Registry?Run one login step in the job before anything pulls or pushes an image, using a registry token from secrets or short lived credentials from an OIDC exchange.
- How Do I Authenticate to AWS With OIDC?Grant id-token write in the job, exchange the signed token with AWS STS for temporary credentials, and pin the role trust policy to one repository and branch.
- How Do I Build a Rust Binary for Multiple Targets?Use one GitHub Actions matrix pairing each Rust target triple with a runner label, building natively where a runner exists and cross compiling where none does.
- How Do I Build and Push in One GitHub Actions Step?Set push to true on the build and push action and feed it tags computed earlier in the same job, so BuildKit exports each layer straight to the registry.
- How Do I Cache Bundler Gems?Point bundler at vendor/bundle, cache that directory keyed on Gemfile.lock plus the Ruby version, and install in deployment mode. Workflow YAML and costs.
- How Do I Cache Cargo Dependencies?Cache the registry and git directories under Cargo home plus the target directory, keyed on Cargo.lock and the toolchain version. Paths, YAML, and costs.
- How Do I Cache CocoaPods in GitHub Actions?Cache the Pods directory and the CocoaPods download caches with a key from Podfile.lock, then run pod install --deployment so a stale lockfile fails the job.
- How Do I Cache Composer Dependencies?Cache the Composer files directory, keyed on composer.lock, so composer install copies archives off local disk instead of downloading them. Paths, YAML, costs.
- How Do I Cache Docker Layers in GitHub Actions?Point the build at a remote Docker builder whose layer cache persists on its own disk, or export layers to a registry cache backend if you stay on the runner.
- How Do I Cache Go Modules in GitHub Actions?Cache ~/go/pkg/mod under a key hashed from go.sum, and cache ~/.cache/go-build under a key that rolls every commit with restore-keys, as two steps.
- How Do I Cache Gradle Builds in GitHub Actions?Run the Gradle setup action so Gradle User Home, wrapper distributions and build caches restore on every job. Configuration, cache keys, limits and costs.
- How Do I Cache Maven Dependencies?Cache ~/.m2/repository with a key from hashFiles over every pom.xml, then pin resolution with -nsu and -C so a partial restore cannot change versions.
- How Do I Cache node_modules in GitHub Actions?Cache the package manager store instead of node_modules: point WarpBuilds/setup-node@v6 at your lockfile with the cache input and let the action key it.
- How Do I Cache pip Dependencies in GitHub Actions?Caching is off by default on the Python setup action. Set cache to pip, pipenv, or poetry and point cache-dependency-path at the file that changes.
- How Do I Cache Playwright Browsers?Cache the Playwright browser download directory with a key built from the installed Playwright version, and install the system libraries in a separate step.
- How Do I Cache Swift Package Manager Dependencies?Cache .build and the shared SwiftPM directory with a key from hashFiles on Package.resolved, on the same macOS job that runs swift build. YAML and costs.
- How Do I Cache uv or Poetry Environments?Cache the uv or Poetry cache directory keyed on the lockfile and let the tool rebuild the virtual environment from it. A cached .venv breaks on upgrades.
- How Do I Cache Yarn Berry Installs?Cache the folder yarn config get cacheFolder prints, key it on yarn.lock, and run yarn install --immutable. Zero-install repos ship the cache in the checkout.
- How Do I Cancel In-Progress Runs on a New Push?Declare a concurrency group keyed on the branch ref and set cancel-in-progress to true, so each new push replaces the run already going instead of adding to it.
- How Do I Change the Runner in a GitHub Actions Workflow?Change the label on the runs-on line. Swapping ubuntu-latest for warp-ubuntu-latest-x64-8x is the only edit a managed runner needs in a workflow file.
- How Do I Choose a GitHub Actions Runner Size?Size a GitHub Actions runner from measured utilization: start most builds on 4 vCPU, move up a label when sustained CPU or memory reaches 80 percent.
- How Do I Clear a GitHub Actions Cache?Change the cache key to walk away from a stale entry, and delete entries only when the stored bytes are wrong. The key bump, the CLI, the API, and the cost.
- How Do I Debug a Failed GitHub Actions Job?Reproduce the failure on the runner itself with an SSH session gated on failure, then read the runner telemetry for that job beside the GitHub Actions logs.
- How Do I Delete a BYOC Stack?Delete the custom runner configurations first, then the stack, then the cloud connection. WarpBuild blocks each delete until its dependents are gone.
- How Do I Detect an Undersized Runner?A GitHub Actions runner is undersized when max sustained CPU or memory utilization holds at 80 percent or higher across a job's runs. Read both signals.
- How Do I Estimate My GitHub Actions Bill?Estimate a GitHub Actions bill by multiplying billed minutes per runner label by its rate, with the minutes pulled from the jobs report rather than guessed.
- How Do I Export GitHub Actions Job Data to CSV?Every WarpBuild report tab exports CSV with all filtered rows, and the same five reports return CSV from the API with format=csv for a scheduled pull.
- How Do I Find Which Workflow Got Slower?Rank every workflow by the change in duration P90 across two date ranges. The WarpBuild Jobs report shows both periods per job and exports each one to CSV.
- How Do I Forecast Runner Spend?Forecast runner spend by pricing last month's billed minutes per label at the published rate, then scaling by planned job growth rather than by headcount.
- How Do I Generate an SBOM During a Build?Set sbom true on the build step so BuildKit attaches an SPDX document to the image it just produced, then read it back by digest or upload it as an artifact.
- How Do I Install Windows SDK Components in a Job?Add the SDK component with the Visual Studio installer in a quiet step, or pick a Windows runner image that already ships the SDK build your project pins.
- How Do I Invalidate a Snapshot?Change the alias in the snapshot.key label so the next GitHub Actions job boots from the base image, or delete the snapshot through the WarpBuild API.
- How Do I Keep a Docker Layer Cache Across Pull Requests?GitHub Actions caches written by one pull request cannot be restored by another. Keep Docker layers on a builder that outlives the job instead.
- How Do I Limit a Workflow to One Run at a Time?Declare a concurrency group with a fixed name and leave cancel-in-progress off, so runs queue instead of overlapping. Each group holds one pending run.
- How Do I Measure Cache Hit Rate in GitHub Actions?Read the cache-hit output of the restore step on every run, write it to the job summary, and price the count against the cache line in the billing report.
- How Do I Publish a Package From a Workflow?Gate the publish job behind a release event, authenticate with a credential scoped to the registry, and publish the artifact the test job already built.
- How Do I Push a Manifest List from GitHub Actions?Build each architecture on its own native runner, push both images by digest, then run docker buildx imagetools create in a final job to publish one tag.
- How Do I Reduce Docker Image Pull Time in GitHub Actions?Shrink the image, keep the registry in the same Region as the runners, and stop re-pulling layers a remote builder or a snapshot runner already holds on disk.
- How Do I Reproduce a CI Failure Locally?Start on the runner: open a debug session on the machine that failed, then move locally once you know whether toolchain, work directory, or memory differs.
- How Do I Reset a Docker Builder Cache?Reset the persistent layer cache on a WarpBuild builder profile with one API call. The request shape, when a cheaper fix works, and what the next build costs.
- How Do I Retry a Failed Step in GitHub Actions?GitHub Actions has no per-step retry. Wrap the command in a shell loop with backoff or use a retry action, and only for transient network and registry errors.
- How Do I Reuse a Workflow Across Repositories?Publish it once as a reusable workflow with workflow_call, then call it from each repository with uses, a pinned tag, and explicit inputs and secrets.
- How Do I Run a Job Only When Files Change?Gate a workflow with a paths filter on the trigger, and use a change detection job feeding job-level if conditions when one workflow serves many projects.
- How Do I Run a Workflow Manually?Add a workflow_dispatch trigger with typed inputs, then start the run from the Actions tab or with one API call. Branch rules and a working example below.
- How Do I Run ARM64 Integration Tests?Run the test job on a native ARM64 runner so the service under test and harness share the target architecture. warp-ubuntu-latest-arm64-8x is $0.012 a minute.
- How Do I Run Browser Tests Headless in GitHub Actions?Run browser tests headless in GitHub Actions by installing the browser system libraries, restoring the browser cache, and sizing worker count to runner memory.
- How Do I Run Database Services in GitHub Actions?Declare the database as a service container, gate the first step on its health check, and size the runner for the database and test workers together.
- How Do I Run Go Race Detector Tests in GitHub Actions?Run go test -race on a job sized for the overhead, since race detection raises memory and run time. Split a fast unit job from a slower race job.
- How Do I Run Jobs on a Schedule?Add a schedule trigger with a cron expression. Scheduled runs fire on the default branch, in UTC, and GitHub gives no guarantee of an exact start minute.
- How Do I Run PowerShell Scripts in GitHub Actions?Set shell: pwsh on the step. GitHub Actions defaults to pwsh on Windows runners and bash on Linux, and pwsh and powershell are two different interpreters.
- How Do I See Cost per Runner Label?The CI tab of the WarpBuild Billing report groups cost by runner label, so an oversized label doing small work shows up as minutes billed at a high rate.
- How Do I See Cost per Workflow?Cost is recorded per job execution, so cost per workflow is a grouping job: price the CI billing rows, attach the workflow from the run id, then sum.
- How Do I See CPU and Memory Usage for a Job?The runner agent emits system metrics in OpenTelemetry format, and the observability Usage view draws them against the same job's GitHub Actions log timeline.
- How Do I Select an Xcode Version in GitHub Actions?Pick the runner image that carries the Xcode version you want, then point the job at that toolchain with DEVELOPER_DIR or xcode-select and log xcodebuild.
- How Do I Set a Timeout on a Job?Set timeout-minutes on the job and a tighter one on any step that can hang, so a stuck GitHub Actions job fails in minutes instead of billing for hours.
- How Do I Set Permissions for GITHUB_TOKEN?Declare a permissions block at workflow level with the minimum scopes every job needs, then widen it inside the one job that needs write access.
- How Do I Skip a Workflow for a Commit?Put [skip ci] in the commit message to skip the push and pull request runs that commit would trigger, or gate one job with an if expression on the message.
- How Do I Stop a Workflow From Blocking Deploys?Give deploys a concurrency group of their own and leave cancel-in-progress off it, so test runs cannot queue ahead of a release or cancel one mid-flight.
- How Do I Tag Runner Resources for Cost Allocation?A BYOC stack tags every resource it creates, and those default keys plus custom stack tags make GitHub Actions runner spend separable in your own cloud bill.
- How Do I Use include and exclude in a Matrix?exclude drops combinations from the matrix product and include merges keys into existing combinations or appends new ones. GitHub applies exclude first.
- How Do I Use Docker Bake in GitHub Actions?Define each image as a target in a bake file, then call the bake action once. One invocation builds every target against one builder and one layer cache.
- How Do I Write a Composite Action?Create an action.yml that sets runs.using to composite, list the steps, then call it with uses. Full example, the shell rule, and when to pick one.
- How Do I Write a Good Cache Key in GitHub Actions?Build the key from the runner platform, the toolchain version, and a hash of the lockfile, then list shorter prefixes of that same string in restore-keys.
- How Do I Write a GitHub Actions Job Summary?Append GitHub flavored markdown to the file named by GITHUB_STEP_SUMMARY and the run page renders it under that job. The table pattern and the limits.
- How Does BYOC Billing Work?BYOC billing runs on two lines. WarpBuild charges $0.002 per runner minute, and the instances, disks, and data transfer land on your own cloud bill.
- How Fast Does a Runner Start After Queueing?Start time is the gap between a job entering the queue and its first step running. Read it per runner label in the Queue Timings report, then cut it.
- How Is a Cancelled GitHub Actions Job Billed?A cancelled GitHub Actions job bills the minutes it ran before termination and nothing after, which is why cancel-in-progress on a busy branch lowers the bill.
- How Is a Remote Docker Builder Billed?A remote Docker builder bills per minute for the session it stays up, from $0.06 per minute, separate from the GitHub Actions runner minutes a job spends.
- How Long Are Artifacts Kept?GitHub keeps workflow artifacts for 90 days by default. Public repositories allow 1 to 90 days, private repositories 1 to 400, and each upload can set less.
- How Long Do GitHub Actions Caches Last?A WarpBuild cache entry expires 7 days after its last use, and every restore restarts that window. Key, cache version, and branch scope decide what survives.
- How Long Do Runner Snapshots Last?Runner snapshots are deleted after 15 days, so an alias no workflow refreshes stops resolving and the next job that asks for it boots from the base image.
- How Many GitHub Actions Jobs Can Run at Once?Three ceilings decide it: the concurrency key you wrote, the concurrent job limit on your GitHub plan of 20 to 500, and the runner capacity behind runs-on.
- How Many Jobs Can a Matrix Fan Out To?A single matrix generates at most 256 jobs per workflow run. Before that cap binds, runner capacity behind runs-on and billed minutes set the usable width.
- How Much Disk Do macOS Runners Have?WarpBuild macOS runners carry a 120GB SSD on the 6 vCPU labels and a 270GB SSD on the 12 vCPU labels, and that volume is deleted when the runner terminates.
- How Much Do GitHub Actions Runners Cost?GitHub Actions runners bill per minute. WarpBuild Linux runners start at $0.003 per minute and macOS at $0.08, with no base fee, platform fee, or seat fee.
- Are ARM64 GitHub Actions Runners Cheaper Than x64?Yes. ARM64 runners bill 25 percent below x64 at every size, from $0.003 against $0.004 per minute at 2 vCPU to $0.048 against $0.064 at 32 vCPU.
- Is It Cheaper to Run Fewer, Larger Runners?Only when the work parallelizes. Each size step doubles the per-minute rate, so a larger runner has to cut GitHub Actions wall clock in half to break even.
- Is There a Minimum Billing Increment?WarpBuild bills GitHub Actions runners in one-minute increments, with no minimum block and no per-job fee, and the reports view shows billed minutes per job.
- Is WarpBuild SOC 2 Compliant?Yes. WarpBuild is SOC 2 Type 2 certified with three Trust Services Criteria, Security, Availability, and Confidentiality, requested at trust.warpbuild.com.
- What Are restore-keys in GitHub Actions?restore-keys are ordered prefix fallbacks for a cache miss: the action restores the newest entry whose key starts with the first prefix that matches.
- What Are Snapshot Runners?A snapshot runner boots a GitHub Actions job from a saved image of an earlier run's VM instead of a clean base image. What persists, what resets, what it costs.
- Which ARM64 Runner Sizes Are Available?Linux ARM64 GitHub Actions runners come in five sizes, 2x through 32x, from 2 vCPU and 8GB at $0.003 per minute to 32 vCPU and 128GB at $0.048 per minute.
- What Carries Over in a Runner Snapshot?A runner snapshot carries the VM filesystem as it stood at capture, including installed packages, warmed caches, and pulled images. Here is what resets.
- What Changes When a Workflow Moves to ARM64?The runs-on label changes. After that, check three things: binaries downloaded with an architecture suffix, native modules, and hardcoded absolute paths.
- What Does GitHub Actions Cache Storage Cost?Cache for GitHub Actions costs $0.20 per GB-month of storage plus $0.0001 per write, restore, or list operation on WarpBuild hosted runners, free on BYOC.
- What Gets Created in My Cloud Account?WarpBuild BYOC creates a CloudFormation stack in your AWS account holding a VPC, a security group, and an S3 bucket, plus per-job EC2 instances and volumes.
- What Happens to Runner Disks After a Job?The disk is destroyed with the job. Each WarpBuild runner gets its own encrypted volume, created on demand and destroyed after the build, with one exception.
- What Happens When My Free Credits Run Out?Signup includes $10 free credits. Once they are spent, usage keeps billing per minute at the rate for each runner label, with no subscription underneath it.
- What Happens When Two Workflows Share a Concurrency Group?Two workflows naming the same concurrency group serialize against each other, because a group is a repository-wide lane rather than a per-workflow setting.
- What Is a Remote Docker Builder?A remote Docker builder is a dedicated build VM outside the GitHub Actions runner that keeps a layer cache on its own disk, so repeat builds reuse layers.
- What Is the Cheapest Runner Size?The 2 vCPU Linux ARM64 label at $0.003 per minute holds the lowest rate in the catalog, and here is the full ladder plus when a larger label bills less.
- What Is the Difference Between a Job and a Step?A job gets its own runner and its own billed minutes, while steps run in order on that one machine, so runner size, parallelism, and cost are set per job.
- What Is the Difference Between cache-from and cache-to?cache-from tells a Docker build where to read cache and cache-to where to write it. Set one without the other and the build reads a cache nothing refreshes.
- GitHub-Hosted vs Self-Hosted RunnersGitHub operates the machine for GitHub-hosted runners and you operate it for self-hosted runners. Managed runners are a third shape. Full comparison here.
- What Is the Smallest Windows Runner Size?The smallest Windows GitHub Actions runner is 4 vCPU with 16GB of memory at $0.016 per minute. The 2 vCPU Windows tier was removed on June 8, 2026.
- Which macOS Versions Do Runners Support?WarpBuild macOS runners cover macOS 14, macOS 15, and macOS 26, all on ARM64 across five labels from $0.08 per minute. macOS 13 was removed June 8, 2026.
- Which Metrics Does the API Expose for GitHub Actions?The reports endpoints cover CI billing, Docker builder billing, cache billing, per-job percentiles, and queue timings, in JSON or CSV, from one API key.
- Which Operating Systems Can GitHub Actions Runners Use?GitHub Actions runners cover four platforms: Linux x64, Linux ARM64, macOS, and Windows. WarpBuild ships Ubuntu, macOS, and Windows Server images for each one.
- What Permissions Does BYOC Need in My AWS Account?A cloud connection creates one IAM role in your AWS account covering EC2, spot, network, storage, and CloudFormation. Runner workloads carry a separate profile.
- Which Simulator Runtimes Ship on macOS Runners?WarpBuild macOS 26 runners carry the iOS, tvOS, watchOS, and visionOS 27.0 simulator runtimes with Xcode 27.0. Which runtimes each image holds and how to check.
- Which Windows Versions Do Runners Support?WarpBuild Windows GitHub Actions runners ship Windows Server 2022 and 2025 images on x86-64, in four sizes from 4 to 32 vCPU, starting at $0.016 per minute.
- What Xcode Versions Are on GitHub Actions Runners?The Xcode version comes from the macOS runner image. WarpBuild macOS 26 labels ship Xcode 27.0 (build 27A5194q) plus the 27.0 simulator runtimes.
- Where Do GitHub Actions Runners Run?WarpBuild GitHub Actions runners run on ephemeral VMs in WarpBuild infrastructure in the US or EU, or inside your own AWS, GCP, or Azure account on BYOC.
- Where Is My Build Data Stored?Build work happens on the runner, on an encrypted volume destroyed with the machine. US and EU are the regions WarpBuild names, and BYOC keeps storage yours.
- Why Are My GitHub Actions Builds Slow?GitHub Actions builds are slow for four reasons: queue wait before the job starts, cold caches, undersized runners, and emulated builds. Measure each one.
- Why Do Windows Runners Take Longer to Start?Windows GitHub Actions runners start slower because the image is larger and the boot path does more work, so every job pays a higher fixed cost.
- Why Does a Base Image Update Invalidate My Cache?Every layer after FROM is chained to the base image, so a new base digest invalidates all of them. Pin the digest and schedule the rebuild on your terms.
- Why Do My GitHub Actions Jobs Queue Behind Each Other?Three things serialize jobs: a concurrency group holding runs in one lane, an account-level parallel job ceiling, and a runner pool with no free capacity.
- Why Do Python Tests Run Slower in CI?Usually three causes stack up: the runner has fewer cores than your laptop, every job starts with a cold cache, and pytest runs the suite in one process.
- Why Does Cargo Rebuild Everything in GitHub Actions?Cargo rebuilds because a fresh runner has no target directory, and a changed toolchain, feature set, or RUSTFLAGS invalidates a restored one. Keys and costs.
- Why Does Docker Build Run Out of Disk?One runner volume holds the checkout, the pulled base images, every intermediate stage, and the exported cache at once. Move the build to a remote builder.
- Why Does My GitHub Actions Cache Miss Every Run?A GitHub Actions cache misses every run for three reasons: the key string changed, the version hash changed, or the entry was written on another branch.
- Why Does My Job Show High IO Wait?A job shows high IO wait when the processor sits idle while storage catches up. Read disk I/O against CPU for the same window, then move the work to local disk.
- Why Does the Gradle Daemon Start on Every Run?A GitHub Actions job gets a new virtual machine, so no Gradle daemon survives to reuse. The startup cost breakdown, the settings that cut it, and the numbers.
- Why Is My Cache Restore Slow?Cache restore time tracks archive size and the link between runner and store. Break-even arithmetic, three trims that shrink the entry, and how to measure it.
- Why Is My Docker Build Slow in GitHub Actions?Usually three causes: no persistent layer cache, QEMU emulation for a second architecture, or an undersized runner. Move the build to a remote builder.
- Why Is My GitHub Actions Bill So High?A high GitHub Actions bill usually comes from four drivers: oversized runners, macOS minutes, re-run storms, and cache misses that force full rebuilds.
- Why Is npm install Slow in GitHub Actions?Most of a cold npm install is registry fetches plus native module compilation. A dependency cache removes the fetches, and only more vCPU touches the builds.
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.