Build Matrices

Build Matrices Across Node.js Versions

A strategy.matrix turns one job into several: each key is a list, GitHub 29 runs the job once per combination, and the values are available as matrix.<key>. This is the top of ci.yml:

The top of .github/workflows/ci.yml, with the test job's matrixYAML
name: CI
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
permissions:
  contents: read
jobs:
  test:
    name: test (${{ matrix.os }}, node ${{ matrix.node }})
    runs-on: ${{ matrix.os }}
    continue-on-error: ${{ matrix.experimental }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-24.04, ubuntu-24.04-arm]
        node: [24, 26]
        experimental: [false]
        exclude:
          - {os: ubuntu-24.04-arm, node: 26}
        include:
          - {os: ubuntu-24.04, node: 22, experimental: true}

Two systems times two Node.js 2,131 versions make four combinations; 3.10.2 removes one and adds one. The job name uses the matrix values, so checks read test (ubuntu-24.04-arm, node 24) and so on. Node.js 24 is BookNest's version (.nvmrc); 26, the current release, becomes LTS in October 2026, so testing it now reveals breakage early (setup-node downloaded 26.10.0). A matrix may create up to 256 jobs.