name: CI

on:
  push:
  pull_request:

jobs:
  PHPUnit:
    name: PHPUnit (PHP ${{ matrix.php }})
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        php:
          - 8.5
          - 8.4
          - 8.3
          - 8.2
          - 8.1
          - 8.0
          - 7.4
          - 7.3
          - 7.2
          - 7.1
          - 7.0
          - 5.6
          - 5.5
          - 5.4
          - 5.3
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          coverage: xdebug
          ini-file: development
          ini-values: disable_functions='' # do not disable PCNTL functions on PHP < 8.1
          extensions: sockets, pcntl ${{ matrix.php >= 5.6 && ', event' || '' }} ${{ matrix.php >= 5.4 && (matrix.php < 8.0 && ', ev-1.1.5' || ', ev') || '' }}
        env:
          fail-fast: true # fail step if any extension can not be installed
      - run: composer install
      - run: vendor/bin/phpunit --coverage-text
        if: ${{ matrix.php >= 7.3 }}
      - run: vendor/bin/phpunit --coverage-text -c phpunit.xml.legacy
        if: ${{ matrix.php < 7.3 }}

  PHPUnit-Unstable:
    name: PHPUnit (Unstable PHP ${{ matrix.php }})
    runs-on: ubuntu-22.04
    continue-on-error: true
    strategy:
      matrix:
        php:
          - 8.5
          - 8.4
          - 8.3
          - 8.2
          - 8.1
          - 8.0
          - 7.4
          - 7.3
          - 7.2
          - 7.1
          - 7.0
          - 5.6
          - 5.5
          - 5.4
          - 5.3
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          coverage: xdebug
          ini-file: development
          extensions: sockets, pcntl
      - name: Install ext-uv on PHP 7+
        run: |
          sudo apt-get update -q && sudo apt-get install libuv1-dev
          echo "yes" | sudo pecl install ${{ matrix.php >= 8.0 && 'uv-0.3.0' || 'uv-0.2.4' }}
          php -m | grep -q uv || echo "extension=uv.so" >> "$(php -r 'echo php_ini_loaded_file();')"
        if: ${{ matrix.php >= 7.0 }}
      - name: Install legacy ext-libevent on PHP < 7.0
        run: |
          sudo apt-get update && sudo apt --fix-broken install && sudo apt-get install libevent-dev
          curl https://pecl.php.net/get/libevent-0.1.0.tgz | tar -xz
          pushd libevent-0.1.0
          phpize
          ./configure
          make
          sudo make install
          popd
          echo "extension=libevent.so" | sudo tee -a "$(php -r 'echo php_ini_loaded_file();')"
        if: ${{ matrix.php < 7.0 }}
      - name: Install legacy ext-libev on PHP < 7.0
        run: |
          git clone --recursive https://github.com/m4rw3r/php-libev
          pushd php-libev
          phpize
          ./configure --with-libev
          make
          sudo make install
          popd
          echo "extension=libev.so" | sudo tee -a "$(php -r 'echo php_ini_loaded_file();')"
        if: ${{ matrix.php < 7.0 }}
      - run: composer install
      - run: vendor/bin/phpunit --coverage-text
        if: ${{ matrix.php >= 7.3 }}
      - run: vendor/bin/phpunit --coverage-text -c phpunit.xml.legacy
        if: ${{ matrix.php < 7.3 }}

  PHPUnit-Windows:
    name: PHPUnit (PHP ${{ matrix.php }} on Windows)
    runs-on: windows-2022
    continue-on-error: true
    strategy:
      matrix:
        php:
          - 8.5
          - 8.4
          - 8.3
          - 8.2
          - 8.1
          - 8.0
          - 7.4
          - 7.3
          - 7.2
          - 7.1
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          coverage: xdebug
          ini-file: development
          extensions: sockets,event # future: add uv-beta (installs, but can not load)
      - run: composer install
      - run: vendor/bin/phpunit --coverage-text
        if: ${{ matrix.php >= 7.3 }}
      - run: vendor/bin/phpunit --coverage-text -c phpunit.xml.legacy
        if: ${{ matrix.php < 7.3 }}

  PHPUnit-hhvm:
    name: PHPUnit (HHVM)
    runs-on: ubuntu-22.04
    continue-on-error: true
    steps:
      - uses: actions/checkout@v4
      - run: cp "$(which composer)" composer.phar && ./composer.phar self-update --2.2 # downgrade Composer for HHVM
      - name: Run hhvm composer.phar install
        uses: docker://hhvm/hhvm:3.30-lts-latest
        with:
          args: hhvm composer.phar install
      - name: Run hhvm vendor/bin/phpunit
        uses: docker://hhvm/hhvm:3.30-lts-latest
        with:
          args: hhvm vendor/bin/phpunit
