Claude Skills Guide

Claude Code GitHub Actions Workflow Matrix Strategy Guide

GitHub Actions matrix strategies let you run the same job across multiple combinations of variables in parallel When combined with Claude Code, you can build intelligent CI/CD pipelines that adapt to different environments, run tests across platform combinations, and generate contextual reports. This guide shows you practical patterns for using matrix workflows effectively.

Understanding Matrix Strategy Fundamentals

The matrix strategy in GitHub Actions uses the matrix keyword to define dimensions you want to test against Each combination creates a separate job that runs in parallel, dramatically reducing total pipeline execution time.

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

This configuration creates three parallel jobs—one for each Node.js version. The ${{ matrix.node-version }} syntax injects the current dimension value into each job context.

Building Multi-Dimensional Matrix Workflows

Real-world projects often need to test across multiple independent dimensions simultaneously. You can combine several matrix properties to create comprehensive test coverage.

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node-version: [18, 20]
        package-manager: [npm, yarn]
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - name: Install dependencies
        run: |
          if [ "${{ matrix.package-manager }}" = "npm" ]; then
            npm ci
          else
            yarn install
          fi

The fail-fast: false setting ensures all matrix jobs complete regardless of individual failures—critical for getting complete test results across all combinations.

Integrating Claude Code into Matrix Jobs

Adding Claude to your matrix workflow enables intelligent behavior that adapts based on the current job context. You can use the claude CLI to analyze results, generate reports, or provide contextual feedback.

jobs:
  test-and-analyze:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        suite: [unit, integration, e2e]
    steps:
      - uses: actions/checkout@v4
      
      - name: Run test suite
        run: npm run test:${{ matrix.suite }}
        continue-on-error: true
      
      - name: Analyze with Claude
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          cat << 'EOF' > analysis.md
          ## Test Analysis for ${{ matrix.suite }} suite
          
          Run this analysis on the test output and provide:
          - Failure patterns detected
          - Suggested fixes for flaky tests
          - Areas requiring attention
          EOF
          claude --print -p < analysis.md

Using Conditional Matrix Inclusion

Sometimes you need to exclude specific combinations or only run matrix jobs under certain conditions. GitHub Actions supports include and exclude directives for this purpose.

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16, 18, 20, 22]
        exclude:
          # Skip Node 16 for integration tests
          - node-version: 16
            test-type: integration
        include:
          # Add nightly build with experimental Node
          - node-version: 23
            test-type: nightly
            runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm test

Dynamic Matrix Generation with Claude

Claude can help generate matrix configurations for complex scenarios. For instance, you might want to test against all combinations of dependencies in your lock file.

# Use Claude to analyze your package.json and suggest matrix combinations
claude --print -p "Analyze this package.json and suggest test matrix combinations for Node versions and major dependency versions. Output as YAML."

The tdd skill proves particularly useful here—it can analyze test failures across matrix runs and suggest which combinations need attention. Similarly, the pdf skill can generate consolidated test reports from individual job results.

Matrix Strategies for Multi-Platform Projects

Projects targeting multiple platforms need careful matrix design. Here is a practical pattern for cross-platform JavaScript or TypeScript projects:

jobs:
  test:
    name: Test (${{ matrix.os }}, Node ${{ matrix.node }})
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node: [18, 20]
        exclude:
          - os: windows-latest
            node: 18  # Windows + Node 18 has known issues in our codebase
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - run: npm ci
      - run: npm test
      - name: Upload coverage
        uses: codecov/codecov-action@v4

Python Multi-Version Testing

Python projects benefit from matrix strategies just as JavaScript projects do. Here is a workflow testing across Python versions with dependency caching:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.10', '3.11', '3.12']
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          cache: 'pip'
      - run: pip install -r requirements.txt
      - run: pytest

The cache: 'pip' parameter automatically caches pip dependencies, speeding up subsequent runs significantly.

Integration Testing with Multiple Services

Matrix builds excel when testing against multiple service versions or configurations. You can parameterize the service container images themselves:

jobs:
  integration:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        database: [postgres:14, postgres:15, postgres:16]
        redis: [redis:6, redis:7]
    services:
      postgres:
        image: ${{ matrix.database }}
        env:
          POSTGRES_PASSWORD: test
        ports:
          - 5432:5432
      redis:
        image: ${{ matrix.redis }}
        ports:
          - 6379:6379
    steps:
      - uses: actions/checkout@v4
      - name: Run integration tests
        run: |
          export DATABASE_URL="postgres://test:test@localhost:5432/test"
          export REDIS_URL="redis://localhost:6379"
          npm run integration-tests

This creates six job combinations, testing every database and Redis version pairing.

Building Deployment Matrices

Matrix strategies also work for deployment scenarios, parallelizing rollouts across environments and regions:

jobs:
  deploy:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        environment: [staging, production]
        region: [us-east, us-west, eu-west]
    environment:
      name: ${{ matrix.environment }}
    steps:
      - uses: actions/checkout@v4
      - name: Deploy to ${{ matrix.region }}
        run: |
          echo "Deploying ${{ matrix.environment }} to ${{ matrix.region }}"
          ./deploy.sh --env ${{ matrix.environment }} --region ${{ matrix.region }}

This creates six deployment jobs, covering staging and production across three regions.

Optimizing Matrix Workflow Performance

Matrix jobs can consume significant GitHub Actions minutes. Consider these optimization strategies:

Reduce matrix dimensions where possible. If you test on Node 18 and 20, you likely do not need to test on 16, 14, and 12 unless you have explicit compatibility requirements.

Use caching effectively. Cache node_modules, pip packages, and other dependencies to speed up individual job initialization.

- name: Cache npm packages
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-npm-

Use the supermemory skill to track historical matrix runtimes and suggest optimizations based on past performance data.

Generating Matrix Reports with Claude

After matrix jobs complete, you often need consolidated reports. Here is a workflow that collects results and uses Claude to summarize:

jobs:
  summarize:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - name: Download all test artifacts
        uses: actions/download-artifact@v4
      
      - name: Generate summary with Claude
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          echo "## Matrix Test Results" > summary.md
          for artifact in test-results-*/; do
            echo "### $(basename $artifact)" >> summary.md
            cat "$artifact" >> summary.md
          done
          
          claude --print -p "Summarize these test results and highlight any patterns or action items." < summary.md

The frontend-design skill complements this by analyzing visual regression test results across different browsers in your matrix.

Common Pitfalls to Avoid

Forgetting fail-fast defaults. By default, GitHub Actions stops all matrix jobs when one fails. Set fail-fast: false when you need complete results.

Excessive matrix combinations. A matrix with 4 operating systems, 4 Node versions, and 3 package managers creates 48 jobs. That consumes quotas quickly.

Not accounting for platform-specific differences. File paths, line endings, and shell behaviors differ across operating systems. Use the matrix context to conditionalize platform-specific steps.

Conclusion

GitHub Actions matrix strategies provide powerful parallelism for CI/CD pipelines. Combined with Claude Code, you gain intelligent analysis, adaptive behavior, and automated reporting across all matrix combinations. Start with simple two-dimensional matrices and expand as your testing requirements grow.

For more advanced patterns, explore the supermemory skill for tracking matrix performance over time, or the tdd skill for deeper test analysis integration.

Built by theluckystrike — More at zovo.one