Back to blog
May 01, 2025
4 min read

Setting Up CI/CD Pipelines with GitHub Actions

Streamline your development workflow by setting up automated CI/CD pipelines using GitHub Actions for testing, building, and deploying your code.

Setting Up CI/CD Pipelines with GitHub Actions

Continuous Integration and Continuous Deployment (CI/CD) are essential for modern software development. They ensure that changes to your code are automatically tested, built, and deployed , reducing manual errors and speeding up the release cycle. GitHub Actions is a powerful, flexible way to implement CI/CD directly within your GitHub repository, without needing external tools or complicated infrastructure.

This article walks through setting up a basic CI/CD pipeline using GitHub Actions, covering how to automate testing, linting, builds, and deployments for your project.


What Is GitHub Actions?

GitHub Actions is a built-in automation feature in GitHub that allows you to create custom workflows triggered by repository events. These workflows are defined as YAML files stored in a .github/workflows/ directory and can be used to automate tasks such as:

  • Running tests on each push or pull request
  • Deploying code to production or staging environments
  • Formatting code or checking for syntax errors
  • Building and publishing packages

It integrates seamlessly with your repository, supports all major languages and runtimes, and allows you to create multi-step workflows with ease.


Creating Your First Workflow

To begin, create a new file at .github/workflows/ci.yml in your repository. Here’s an example of a simple CI workflow for a Node.js application:

name: CI

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

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

This workflow runs every time you push to the main branch or open a pull request. It checks out your code, installs dependencies, and runs your test suite using the npm test command.


Adding Linting and Formatting

You can easily extend your workflow to include linting or formatting steps:

      - name: Run ESLint
        run: npm run lint

This ensures that all code follows your formatting and quality standards before it gets merged or deployed.


Deploying with GitHub Actions

For deployment, you can add an additional job or extend the existing one depending on your stack. Here’s an example of deploying to Vercel using a personal token:

      - name: Deploy to Vercel
        run: npx vercel --prod --token=$VERCEL_TOKEN
        env:
          VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

Make sure to add your VERCEL_TOKEN in your repository’s Secrets settings under Settings → Secrets and variables → Actions.

For other platforms like Netlify, Firebase, or DigitalOcean, GitHub Actions has dedicated integrations or can run custom CLI commands in a similar fashion.


Using Matrix Builds

You can also use matrix strategies to test across multiple environments, such as different versions of Node.js:

strategy:
  matrix:
    node-version: [16, 18, 20]

steps:
  - name: Set up Node.js
    uses: actions/setup-node@v3
    with:
      node-version: ${{ matrix.node-version }}

This ensures that your app behaves consistently across various environments , a crucial step if you’re developing libraries or frameworks.


Best Practices

  • Keep workflows fast and focused to reduce CI wait times.
  • Use caching for dependencies with actions/cache to speed up installs.
  • Store all secrets (API keys, tokens) in GitHub’s encrypted secrets store.
  • Name each job and step clearly for easier debugging.
  • Test locally before pushing workflow changes.

Conclusion

GitHub Actions brings CI/CD directly into your repository, allowing you to build, test, and deploy automatically with every code change. It’s highly customizable, integrates easily with popular services, and scales from simple scripts to complex multi-environment workflows. Whether you’re working on a personal project or managing a production app, setting up CI/CD with GitHub Actions can save you time, improve code quality, and streamline your development process.


Disclaimer

Article written with the help of AI.

Read the full Disclaimer HERE