name: Unit Tests
on: [ push, pull_request_target ]

jobs:
  php8-1:
    name: Unit Tests php8.1 (php ${{ matrix.php-version }})
    runs-on: ubuntu-latest
    # always run on push events
    # only run on pull_request_target event when pull request pulls from fork repository
    if: >
      github.event_name == 'push' ||
      github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository
    strategy:
      fail-fast: false
      matrix:
        php-version: [ 8.1 ]

    steps:
      - uses: actions/checkout@v2

      - uses: shivammathur/setup-php@2.9.0
        with:
          php-version: ${{ matrix.php-version }}

      # Remove php-cs-fixer until compatible with PHP 8
      - run: composer remove --dev --no-update --no-interaction friendsofphp/php-cs-fixer

      - run: composer self-update

      - run: composer install --no-interaction --prefer-source --dev

      - run: composer test

  php8-2:
    name: Unit Tests php8.2 (php ${{ matrix.php-version }})
    runs-on: ubuntu-latest
    if: >
      github.event_name == 'push' ||
      github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository
    strategy:
      fail-fast: false
      matrix:
        php-version: [ 8.2 ]

    steps:
      - uses: actions/checkout@v2

      - uses: shivammathur/setup-php@2.9.0
        with:
          php-version: ${{ matrix.php-version }}

      - run: composer remove --dev --no-update --no-interaction friendsofphp/php-cs-fixer

      - run: composer self-update

      - run: composer install --no-interaction --prefer-source --dev

      - run: composer test

  php8-3:
    name: Unit Tests php8.3 (php ${{ matrix.php-version }})
    runs-on: ubuntu-latest
    if: >
      github.event_name == 'push' ||
      github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository
    strategy:
      fail-fast: false
      matrix:
        php-version: [ 8.3 ]

    steps:
      - uses: actions/checkout@v2

      - uses: shivammathur/setup-php@2.9.0
        with:
          php-version: ${{ matrix.php-version }}

      - run: composer remove --dev --no-update --no-interaction friendsofphp/php-cs-fixer

      - run: composer self-update

      - run: composer install --no-interaction --prefer-source --dev

      - run: composer test

  php8-4:
    name: Unit Tests php8.4 (php ${{ matrix.php-version }})
    runs-on: ubuntu-latest
    if: >
      github.event_name == 'push' ||
      github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository
    strategy:
      fail-fast: false
      matrix:
        php-version: [ 8.4 ]

    steps:
      - uses: actions/checkout@v2

      - uses: shivammathur/setup-php@2.9.0
        with:
          php-version: ${{ matrix.php-version }}

      - run: composer remove --dev --no-update --no-interaction friendsofphp/php-cs-fixer

      - run: composer self-update

      - run: composer install --no-interaction --prefer-source --dev

      - run: composer test

  protobuf:
    name: Unit Tests With Protobuf C Extension (php ${{ matrix.php-version }})
    runs-on: ubuntu-latest
    # always run on push events
    # only run on pull_request_target event when pull request pulls from fork repository
    if: >
      github.event_name == 'push' ||
      github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository
    strategy:
      fail-fast: false
      matrix:
        php-version: [ 8.1 ]

    steps:
      - uses: actions/checkout@v2

      - uses: shivammathur/setup-php@2.9.0
        with:
          php-version: ${{ matrix.php-version }}
          extensions: protobuf

      - run: composer self-update

      - run: composer install --no-interaction --prefer-source --dev

      - run: composer test
