---
name: Run Tests
on:
  push:
    branches:
      - main
      - v1.x
  pull_request:
  workflow_dispatch:
jobs:
  ci:
    strategy:
      matrix:
        node-version: [20.x, 22.x, 24.x]
        redis:
          - name: "Redis 7.2"
            image: "redis:7.2-alpine"
          - name: "Redis 7.4"
            image: "redis:7.4-alpine"
          - name: "Redis 8.2"
            image: "redis:8.2.1-alpine"
          - name: "Valkey 8.0"
            image: "valkey/valkey:8.0-alpine"
          - name: "Valkey 8.1"
            image: "valkey/valkey:8.1-alpine"
    name: "Node.js ${{ matrix.node-version }} / ${{ matrix.redis.name }})"
    runs-on: ubuntu-latest
    timeout-minutes: 20
    services:
      redis:
        image: ${{ matrix.redis.image }}
        ports:
          - 6379:6379
        options: >-
          --health-cmd "redis-cli ping 2>/dev/null || valkey-cli ping 2>/dev/null || exit 1"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Use supported Node.js Version
        uses: actions/setup-node@v6
        with:
          node-version: ${{ matrix.node-version }}
      - name: Restore cached dependencies
        uses: actions/cache@v3
        with:
          path: ~/.pnpm-store
          key: node-modules-${{ hashFiles('package.json') }}
      - name: Setup pnpm
        uses: pnpm/action-setup@v4
        with:
          version: latest
      - name: Install dependencies
        run: pnpm install --frozen-lockfile
      - name: Run Tests
        run: "pnpm run ci"
