name: Dev

on:
  push:
    branches:
      - main
      - next
      - v*
      - patch-release
      - "!renovate/**"
  pull_request:

permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  test:
    timeout-minutes: 15
    strategy:
      fail-fast: false
      matrix:
        os:
          - "ubuntu-latest"
          - "macos-latest"
          - "windows-latest"
        node:
          # Latest version
          - "26"
          # Minimal version for development
          - "22"
        include:
          - os: "ubuntu-latest"
            # Pick a version that is fast (normally highest LTS version)
            # Doesn't work on Node.js v26 https://github.com/bcoe/c8/issues/592
            node: "24"
            ENABLE_CODE_COVERAGE: true
            FULL_TEST: true
          # Versions between "Latest version" and "Minimal version for development"
          # that not tested on linux
          # - os: "ubuntu-latest"
          #   node: "22"
    env:
      ENABLE_CODE_COVERAGE: ${{ matrix.ENABLE_CODE_COVERAGE }}
      FULL_TEST: ${{ matrix.FULL_TEST }}
    name: ${{ matrix.FULL_TEST && '[Full Test] ' || '' }} Node.js ${{ matrix.node }} on ${{ startsWith(matrix.os, 'macos') && 'MacOS' || startsWith(matrix.os, 'windows') && 'Windows' || 'Linux' }}
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

      - name: Setup Node.js
        uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
        with:
          node-version: ${{ matrix.node }}
          cache: "yarn"

      - name: Install Dependencies
        run: yarn install --immutable

      - name: Run Tests
        if: ${{ !matrix.ENABLE_CODE_COVERAGE }}
        run: yarn test

      - name: Run Tests (coverage)
        if: ${{ matrix.ENABLE_CODE_COVERAGE }}
        run: yarn c8 yarn test

      - name: Upload Coverage
        uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
        if: ${{ matrix.ENABLE_CODE_COVERAGE && github.repository == 'prettier/prettier' }}
        with:
          fail_ci_if_error: true
          disable_search: true
          files: coverage/lcov.info
          token: ${{ secrets.CODECOV_TOKEN }}

      - name: "`--debug-benchmark` flag"
        if: ${{ matrix.os != 'windows-latest' }}
        run: node bin/prettier.cjs --debug-benchmark package.json 2>&1 >/dev/null | grep "Latency avg" || exit 1
