GitHub ActionsCI/CDCost Optimization

How GitHub Actions Charges You for 2-Second Jobs

WorkerRun Team··4 min read

Your PR labeling workflow takes 2 seconds. GitHub charges you 1 full minute.

The 1-minute rounding problem

GitHub Actions bills compute time in 1-minute increments. A job that finishes in 2 seconds still consumes a full minute from your monthly allocation. There is no partial credit.

For teams running lightweight automation at scale, this adds up fast. Consider a typical private repository with 500 pull requests per month. Each PR triggers a labeling job, a status check, and a merge gate check — three jobs, each completing in a few seconds. That's 1,500 jobs × 1 minute = 1,500 minutes consumed from your GitHub Actions allocation, for work that took less than 10 seconds of actual compute time.

GitHub's free plan includes 2,000 minutes per month for private repos. Three types of lightweight jobs at 500 PRs/month wipes out 75% of your free allocation — before a single build or test runs.

The jobs that hit you hardest

The worst offenders are the automation jobs that exist purely to call the GitHub API or check a condition. They're fast by nature — but you still pay the 1-minute floor.

yaml.github/workflows/pr-label.yml
name: PR Labeler on: [pull_request] jobs: label: runs-on: ubuntu-slim # 1 minute minimum, every time steps: - uses: actions/labeler@v5 with: repo-token: ${{ secrets.GITHUB_TOKEN }}

Common patterns that consume a full minute for 2 seconds of work:

  • PR labeling — add labels based on changed files or branch names
  • Status checks — post a comment or update a commit status via the API
  • Merge gates — check that required labels are present before allowing merge

Start saving CI minutes — free, no credit card required

Install GitHub App →

The fix: run them outside your allocation

WorkerRun runs your GitHub Actions jobs on Cloudflare Workers — outside your GitHub Actions minutes allocation entirely. The change is one line in your workflow YAML.

diff.github/workflows/pr-label.yml
@@ -6 +6 @@
5 label:
6- runs-on: ubuntu-slim
6+ runs-on: worker-run

That's it. Install the GitHub App, update the runs-on value, and push. GitHub sees the job succeed with full output and status. Your CI allocation is untouched.

What WorkerRun actually does

WorkerRun intercepts your GitHub Actions jobs and runs them on Cloudflare Workers — a serverless platform that executes JavaScript and TypeScript in V8 isolates across a global edge network.

When you push code and GitHub triggers your workflow, WorkerRun receives a webhook from GitHub. It picks up the job, spins up a V8 isolate in milliseconds (no VM boot time), executes your steps, and reports the results back to GitHub Actions in real time. From GitHub's perspective, the job ran on a registered self-hosted runner. From your billing perspective, zero minutes were consumed.

Each job runs in its own isolated V8 sandbox. No shared memory between jobs. No persistent state after the run. Secrets and tokens never outlive the execution.

Free tier math

A typical team running 1,500 lightweight jobs per month — PR labeling, status checks, merge gates — burns through 1,500 minutes of their GitHub Actions allocation. At $0.008 per minute for Linux runners, that's $12/month for work that takes ~2 seconds per job.

With WorkerRun, those same 1,500 jobs cost $0. The free tier covers 10,000 V8 jobs per month. No credit card required. Need more? The Pro plan gives you 1,000,000 jobs for just $5/month.

ScenarioMinutes consumedCost
1,500 jobs on GitHub-hosted runners1,500 min / month~$12 / month
1,500 jobs on WorkerRun (free tier)0 min / month$0 / month
Note: Public repos have unlimited GitHub Actions minutes — WorkerRun is most valuable for private repos. If your organization uses private repositories for its main codebase, every lightweight automation job counts against your allocation.

Start saving CI minutes — free, no credit card required

Change one line in your workflow. Keep your GitHub Actions minutes for builds and tests that actually need them.

Install GitHub App →