.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
name: CI
on: [pull_request]
jobs:
  tests:
    name: YaEtl CI (PHP ${{ matrix.php-versions }} / console ${{ matrix.console-versions }})
    runs-on: ubuntu-latest
    strategy:
      matrix:
        php-versions: [ '8.2', '8.1', '8.0', '7.4', '7.3', '7.2' ]
        console-versions: ['6.2', '6.0', '5.4', '5.3', '5.2', '5.1', '5.0', '4.4', '4.3', '4.2', '4.1', '4.0', '3.4']
        exclude:
          - php-versions: 8.1
            console-versions: 4.3
          - php-versions: 8.1
            console-versions: 4.2
          - php-versions: 8.1
            console-versions: 4.1
          - php-versions: 8.1
            console-versions: 4.0
          - php-versions: 8.1
            console-versions: 3.4
          - php-versions: 8.0
            console-versions: 6.2
          - php-versions: 8.0
            console-versions: 6.1
          - php-versions: 8.0
            console-versions: 4.3
          - php-versions: 8.0
            console-versions: 4.2
          - php-versions: 8.0
            console-versions: 4.1
          - php-versions: 8.0
            console-versions: 4.0
          - php-versions: 8.0
            console-versions: 3.4
          - php-versions: 7.4
            console-versions: 6.2
          - php-versions: 7.4
            console-versions: 6.1
          - php-versions: 7.4
            console-versions: 6.0
          - php-versions: 7.3
            console-versions: 6.2
          - php-versions: 7.3
            console-versions: 6.1
          - php-versions: 7.3
            console-versions: 6.0
          - php-versions: 7.2
            console-versions: 6.2
          - php-versions: 7.2
            console-versions: 6.1
          - php-versions: 7.2
            console-versions: 6.0

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          extensions: mbstring, dom, fileinfo, gmp, bcmath

      - name: Get composer cache directory
        id: composer-cache
        run: echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Cache composer dependencies
        uses: actions/cache@v3
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: Remove composer.lock
        run: rm -f composer.lock

      - name: Detect Orchestra compatibility with console ${{ matrix.console-versions }}
        id: orchestra-compat
        run: |
          if [[ " 3.4 4.0 4.1 4.2 " =~ " ${{ matrix.console-versions }} " ]]; then
            echo '::set-output name=compat::0'
            exit 0
          fi
          if [[ " 8.0 8.1 8.2 " =~ " ${{ matrix.php-versions }} " ]]; then
            if [[ " 4.4 4.3 " =~ " ${{ matrix.console-versions }} " ]]; then
              echo '::set-output name=compat::0'
              exit 0
            fi
          fi
          echo '::set-output name=compat::1'
        shell: bash

      - name: Remove Orchestra if incompatible with console ${{ matrix.console-versions }}
        run: composer remove "orchestra/testbench" --dev --no-update
        if: ${{ steps.orchestra-compat.outputs.compat == 0 }}

      - name: Remove php-cs-fixer dependency
        run: composer remove "friendsofphp/php-cs-fixer" --dev --no-update

      - name: Install Symfony console ${{ matrix.console-versions }}
        run: composer require "symfony/console:^${{ matrix.console-versions }}" --dev --no-update

      - name: Install Composer dependencies
        run: composer install --no-progress --prefer-dist --optimize-autoloader

      - name: Lib test with phpunit
        run: vendor/bin/phpunit --testsuite Lib

      - name: Laravel test with phpunit
        run: vendor/bin/phpunit --testsuite Laravel
        if: ${{ steps.orchestra-compat.outputs.compat == 1 }}