Why Adopt
GitHub Actions is CI/CD done right. It lives in your repository, uses YAML config, and has a massive marketplace of reusable actions.
For any project hosted on GitHub (which is all of mine), Actions is the obvious choice.
What Makes It Great
- Native integration - Pull requests, issues, releases all trigger workflows
- Matrix builds - Test across OS/version combinations easily
- Reusable workflows - DRY up common patterns
- Generous free tier - 2,000 minutes/month for free accounts
- Self-hosted runners - Run on your own infrastructure if needed
My Standard Workflow
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: bundle exec rails test
- run: bundle exec rubocop
Simple, readable, maintainable.
This Site’s Pipeline
This Jekyll site deploys automatically:
- Push to
main - Actions builds Jekyll
- Deploys to GitHub Pages
- Site live in ~60 seconds
Zero configuration beyond the workflow file.
Tips from Experience
- Cache aggressively -
bundler-cache: truesaves minutes per build - Use matrix sparingly - Test what matters, not every permutation
- Pin action versions -
@v4not@mainfor reproducibility - Keep secrets secret - Use repository secrets, never hardcode
When to Consider Alternatives
- Complex pipelines - GitLab CI has better DAG support
- Self-hosted preference - Jenkins, Drone are options
- Not on GitHub - GitLab CI, CircleCI, etc.
For GitHub users, Actions is the path of least resistance.