DEV Community

Alex Spinov
Alex Spinov

Posted on

GitHub Actions Has a Free Tier — 2,000 CI/CD Minutes, Matrix Builds, and Reusable Workflows

My first CI/CD pipeline cost $50/month on CircleCI. It ran tests, built a Docker image, and deployed to staging. That was 2019.

Today, GitHub Actions does all of that for free. 2,000 minutes per month on public repos (unlimited). I've moved every personal project to it.

What You Get Free

For public repositories — everything is unlimited. For private repos:

  • 2,000 minutes/month on Linux runners (500 on macOS, 4x rate)
  • 500MB storage for artifacts and caches
  • Unlimited workflows per repository
  • Matrix builds — test against multiple OS/language versions in parallel
  • Reusable workflows — DRY principle for CI/CD
  • Secrets management — encrypted environment variables
  • Environments — staging, production with protection rules
  • OIDC — keyless authentication to AWS, GCP, Azure
  • Marketplace — 15,000+ pre-built actions
  • Self-hosted runners — use your own hardware (unlimited minutes)

Public repos get unlimited minutes on all runner types. That's not a typo.

Quick Start

Create .github/workflows/ci.yml:

name: CI
on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm test
Enter fullscreen mode Exit fullscreen mode

Push to GitHub → CI runs automatically. Green check = tests pass. Red X = fix your code.

Real Example: Full CI/CD Pipeline

name: Build, Test & Deploy
on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: \${{ matrix.node-version }}
          cache: npm
      - run: npm ci
      - run: npm test
      - run: npm run lint

  build:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: \${{ github.actor }}
          password: \${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v5
        with:
          push: true
          tags: ghcr.io/\${{ github.repository }}:latest
          cache-from: type=gha
          cache-to: type=gha,mode=max

  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment: production
    steps:
      - run: |
          curl -X POST \${{ secrets.DEPLOY_WEBHOOK }}
Enter fullscreen mode Exit fullscreen mode

Three jobs: test across Node 18/20/22, build Docker image, deploy. All free on a public repo.

What You Can Build

1. Full CI/CD — test, build, deploy on every push. Replace Jenkins, CircleCI, Travis.

2. Scheduled tasksschedule: cron: '0 9 * * *' runs daily. Free cron jobs in the cloud.

3. Auto-release — bump version, create changelog, publish to npm/PyPI on merge to main.

4. Security scanning — run Dependabot, CodeQL, Trivy on every PR. Catch vulnerabilities before merge.

5. Cross-platform testing — matrix of OS (Linux, macOS, Windows) × language versions. Ensure compatibility everywhere.

Free Tier Limits

Private repos: 2,000 min/month. A typical CI run is 2-5 minutes. ~400-1,000 runs/month. Fine for solo devs, tight for active teams.

macOS is 10x rate. 1 minute of macOS = 10 minutes of Linux quota. Use macOS runners sparingly.

No GPU runners on free tier. ML testing needs self-hosted or paid runners.

6-hour job timeout. Individual jobs can't exceed 6 hours. Workflows can't exceed 35 days.

Concurrency limits. Free tier: 20 concurrent jobs. Usually not an issue.

Why GitHub Actions Wins

It's where your code already lives. No separate CI service login, no webhook configuration, no YAML in a different format. .github/workflows/*.yml — that's it.

The marketplace of 15,000+ actions means you rarely write CI logic from scratch. Need to deploy to Vercel? uses: amondnet/vercel-action@v25. AWS? uses: aws-actions/configure-aws-credentials@v4. Most things are one line.


Need CI/CD automation help? Email spinov001@gmail.com

More free tiers: 41+ Free APIs Every Developer Should Bookmark

Top comments (0)