GitHub Actions
The dominant CI/CD platform, natively integrated with GitHub. Define workflows in YAML to build, test, and deploy on every push or PR. Free for public repos, generous free minutes for private ones.
Why GitHub Actions?
Your code is already on GitHub
You want CI/CD with zero infrastructure to manage
You need a massive marketplace of pre-built actions
Signal Breakdown
What drives the Trust Score
Download Trend
Last 12 months
Tradeoffs & Caveats
Know before you commitYour code is on GitLab or Bitbucket (use native CI instead)
You need complex self-hosted runners at scale
You need fine-grained access control beyond GitHub's model
Pricing
Free tier & paid plans
2,000 min/mo (public: unlimited)
$0.008/min beyond free tier
Storage: 500MB free, $0.25/GB/mo
Often Used Together
Complementary tools that pair well with GitHub Actions
Learning Resources
Docs, videos, tutorials, and courses
Get Started
Repository and installation options
View on GitHub
github.com/features/actions
# Add .github/workflows/ci.yml to your repoQuick Start
Copy and adapt to get going fast
# .github/workflows/ci.yml
name: CI
on: [push, 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
deploy:
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- run: vercel --prod --token ${{ secrets.VERCEL_TOKEN }}Code Examples
Common usage patterns
Docker build and push
Build a Docker image and push to GitHub Container Registry
name: Build & Push Docker Image
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- 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 }}:latestMatrix testing
Run tests across multiple Node.js versions in parallel
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 }}
- run: npm ci && npm testReusable workflow
Call a shared workflow from another repository
# .github/workflows/deploy.yml
jobs:
deploy:
uses: your-org/.github/.github/workflows/deploy.yml@main
with:
environment: production
secrets:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}Community Notes
Real experiences from developers who've used this tool