
GitHub Actions
A working CI/CD pipeline, the real 2026 minute math behind the free tier, and the mistakes that quietly burn your allowance before you notice.
Tom
·
CodeTalentHub
·
Dev Workflow Enhancers
lint
test
build
deploy
Every “free CI/CD” tutorial says the same thing: connect your repo, drop in a YAML file, ship for nothing. That’s true for the first few weeks. Then a matrix build triples your minute burn, a Windows job eats double what you budgeted, or your team hits the 2,000-minute wall on a Tuesday afternoon and nobody knows why. This is the guide I wish existed before that happened to a project of mine.
We’ll build an actual pipeline, do the minute math with real 2026 numbers instead of rounded marketing figures, and go through the mistakes that turn “free” into a line item. If you already know what a workflow file is, skip to the minute math or the mistakes — everything else is here for people setting this up for the first time.
In this guide
What “free” actually includes in 2026
The anatomy of a workflow file
Building a real pipeline, step by step
The minute math: what your team will actually use
Six mistakes that burn your free minutes
The security corner most tutorials skip
When self-hosted runners make more sense
GitHub Actions vs. GitLab CI vs. CircleCI
Frequently asked questions
What “free” actually includes in 2026
GitHub Actions on standard GitHub-hosted runners is genuinely unlimited and free on public repositories — no minute cap, no catch. That part of the pitch is accurate. Private repositories are where the fine print starts, and it’s worth reading GitHub’s own billing documentation once rather than trusting a blog post (including this one) forever, because these numbers move.
Plan Included minutes / month Artifact + package storage Price
Free 2,000 500 MB $0
Pro 3,000 1 GB $4/mo
Team 3,000 2 GB $4/user/mo
Enterprise Cloud 50,000 50 GB $21/user/mo
Those minutes aren’t wall-clock minutes once you leave Linux. GitHub bills Linux jobs at a 1x multiplier, Windows at 2x, and macOS at 10x against the same pool. A 10-minute macOS build doesn’t cost 10 minutes of your allowance — it costs 100. This single fact explains more mystery overage bills than anything else in this article, and almost no onboarding tutorial mentions it.
Where teams get surprised
A five-person team running a 12-minute macOS build on every pull request burns 120 allowance-minutes per run. At fifteen PRs a week, that’s 1,800 minutes — nearly the entire Free plan — from one job on one workflow.
Overage pricing changed on January 1, 2026: GitHub cut hosted-runner rates by up to 39%, folding a small per-minute platform charge into lower list prices. Once you exceed your included minutes, standard 2-core runners bill at $0.006/minute for Linux, $0.010/minute for Windows, and $0.062/minute for macOS. A separate $0.002/minute charge that GitHub had planned to add specifically for self-hosted runners was announced in December 2025 for a March 2026 rollout, then postponed within 48 hours after community pushback — it never actually took effect, and self-hosted runners remain free of any per-minute charge as of this writing. Several comparison sites published in early 2026 still describe that charge as live. It isn’t.
What actually counts against your minutes
Standard GitHub-hosted runners on private repos. This is the pool the table above describes.
Re-runs. A flaky test suite that needs two attempts bills as two full runs, not one plus a diff.
Every job in a matrix, separately. A 4×4 matrix is 16 billed jobs even if they finish in parallel and feel instantaneous to you.
Rounding. Every job rounds up to the next full minute. A 61-second lint job bills as 2 minutes.
What doesn’t count: standard runners on public repositories (unlimited), GitHub Pages builds, Dependabot version updates, and any job you run on a self-hosted runner — you pay for that machine instead, not per minute.
The anatomy of a workflow file
Every GitHub Actions pipeline is one YAML file living in .github/workflows/. It has four things you need to understand before writing your own: a trigger, jobs, steps, and runners. Read More...
Top comments (0)