← Back to Blog

GitHub Actions Matrix Builds: Test Across Node, Python, and OS Versions

May 17, 2026 3 min read By CodeTidy Team

The Matrix Has You: Mastering GitHub Actions Matrix Builds

Have you ever pushed code to GitHub, only to have your Continuous Integration (CI) pipeline fail due to a compatibility issue with a specific Node or Python version? We've all been there. The good news is that GitHub Actions Matrix builds can save you from this frustration.

Table of Contents

  • Understanding GitHub Actions Matrix Builds
  • Defining Your Matrix Strategy
  • Including and Excluding Matrix Configurations
  • Dynamic Matrix and Reusable Workflows
  • Putting it all Together: A Real-World Example
  • Key Takeaways
  • FAQ

Understanding GitHub Actions Matrix Builds

GitHub Actions Matrix builds allow you to run your CI pipeline across multiple versions of Node, Python, and operating systems. This ensures that your code is compatible with different environments, reducing the likelihood of errors and failed deployments. With Matrix builds, you can define a set of configurations, and GitHub Actions will automatically create a separate job for each configuration.

Defining Your Matrix Strategy

When defining your Matrix strategy, you need to specify the versions of Node, Python, and operating systems you want to test against. You can do this using the matrix keyword in your GitHub Actions workflow file. For example:

name: Node.js Matrix Build

on:
  push:
    branches:
      - main

jobs:
  build-and-test:
    strategy:
      matrix:
        node: [14, 16]
        os: [ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
      - name: Run tests
        run: npm test

In this example, the workflow will create four separate jobs: two for Node 14 (one on Ubuntu and one on Windows) and two for Node 16 (one on Ubuntu and one on Windows).

Including and Excluding Matrix Configurations

You can include or exclude specific matrix configurations using the include and exclude keywords. For example:

strategy:
  matrix:
    node: [14, 16]
    os: [ubuntu-latest, windows-latest]
    include:
      - node: 14
        os: ubuntu-latest
      - node: 16
        os: windows-latest
    exclude:
      - node: 14
        os: windows-latest

In this example, the workflow will only run on Node 14 and Ubuntu, and Node 16 and Windows.

Dynamic Matrix and Reusable Workflows

You can also use dynamic matrices and reusable workflows to simplify your GitHub Actions configuration. For example:

name: Python Matrix Build

on:
  push:
    branches:
      - main

jobs:
  build-and-test:
    strategy:
      matrix:
        python: [3.8, 3.9]
        os: [ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python }}
      - name: Run tests
        run: pytest

You can then reuse this workflow in other GitHub Actions files using the uses keyword.

Putting it all Together: A Real-World Example

Let's say you're building a Node.js application that needs to run on both Linux and Windows, and you want to test it against Node 14 and Node 16. You can use the following GitHub Actions workflow:

name: Node.js Matrix Build

on:
  push:
    branches:
      - main

jobs:
  build-and-test:
    strategy:
      matrix:
        node: [14, 16]
        os: [ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
      - name: Run tests
        run: npm test
      - name: Run linting
        run: npm run lint

This workflow will create four separate jobs, each running on a different combination of Node and operating system.

Key Takeaways

  • Use GitHub Actions Matrix builds to test your code against multiple versions of Node, Python, and operating systems.
  • Define your Matrix strategy using the matrix keyword in your GitHub Actions workflow file.
  • Use include and exclude keywords to customize your matrix configurations.
  • Use dynamic matrices and reusable workflows to simplify your GitHub Actions configuration.

FAQ

Q: What is the difference between a Matrix build and a regular GitHub Actions workflow?

A: A Matrix build allows you to run your CI pipeline across multiple versions of Node, Python, and operating systems, while a regular GitHub Actions workflow runs on a single configuration.

Q: Can I use Matrix builds with other GitHub Actions features, such as reusable workflows?

A: Yes, you can use Matrix builds with other GitHub Actions features, such as reusable workflows.

Q: How do I troubleshoot failed Matrix builds?

A: You can troubleshoot failed Matrix builds by checking the GitHub Actions logs and identifying the specific job that failed.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp