name: Code Quality Checks

on: pull_request

jobs:

  lint: #-----------------------------------------------------------------------
    name: Lint PHP files
    runs-on: ubuntu-latest
    steps:
      - name: Check out source code
        uses: actions/checkout@v2

      - name: Check existence of composer.json file
        id: check_composer_file
        uses: andstor/file-existence-action@v1
        with:
          files: "composer.json"

      - name: Set up PHP envirnoment
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
          tools: cs2pr

      - name: Get Composer cache Directory
        if: steps.check_composer_file.outputs.files_exists == 'true'
        id: composer-cache
        run: |
          echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Use Composer cache
        if: steps.check_composer_file.outputs.files_exists == 'true'
        uses: actions/cache@v1
        with:
          path: ${{ steps['composer-cache'].outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-composer-

      - name: Install dependencies
        if: steps.check_composer_file.outputs.files_exists == 'true'
        run: COMPOSER_ROOT_VERSION=dev-master composer install --prefer-dist --no-progress --no-suggest

      - name: Check existence of vendor/bin/parallel-lint file
        id: check_linter_file
        uses: andstor/file-existence-action@v1
        with:
          files: "vendor/bin/parallel-lint"

      - name: Run Linter
        if: steps.check_linter_file.outputs.files_exists == 'true'
        run: vendor/bin/parallel-lint -j 10 . --exclude vendor --checkstyle | cs2pr

  phpcs: #----------------------------------------------------------------------
    name: PHPCS
    runs-on: ubuntu-latest

    steps:
      - name: Check out source code
        uses: actions/checkout@v2

      - name: Check existence of composer.json & phpcs.xml.dist files
        id: check_files
        uses: andstor/file-existence-action@v1
        with:
          files: "composer.json, phpcs.xml.dist"

      - name: Set up PHP envirnoment
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
          tools: cs2pr

      - name: Get Composer cache Directory
        if: steps.check_files.outputs.files_exists == 'true'
        id: composer-cache
        run: |
          echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Use Composer cache
        if: steps.check_files.outputs.files_exists == 'true'
        uses: actions/cache@v1
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-composer-

      - name: Install dependencies
        if: steps.check_files.outputs.files_exists == 'true'
        run: COMPOSER_ROOT_VERSION=dev-master composer install --prefer-dist --no-progress --no-suggest

      - name: Check existence of vendor/bin/phpcs file
        id: check_phpcs_binary_file
        uses: andstor/file-existence-action@v1
        with:
          files: "vendor/bin/phpcs"

      - name: Run PHPCS
        if: steps.check_phpcs_binary_file.outputs.files_exists == 'true'
        run: vendor/bin/phpcs -q --report=checkstyle | cs2pr
