name: Code Quality Checks

on:
  pull_request:
  push:
    branches:
      - main
      - master

# Cancels all previous workflow runs for the same branch that have not yet completed.
concurrency:
  # The concurrency group contains the workflow name and the branch name.
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

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 environment
        if: steps.check_composer_file.outputs.files_exists == 'true'
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
          tools: cs2pr
        env:
          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Install Composer dependencies & cache dependencies
        if: steps.check_composer_file.outputs.files_exists == 'true'
        uses: "ramsey/composer-install@v2"
        env:
          COMPOSER_ROOT_VERSION: dev-${{ github.event.repository.default_branch }}

      - 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 environment
        if: steps.check_files.outputs.files_exists == 'true'
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
          tools: cs2pr
        env:
          COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Install Composer dependencies & cache dependencies
        if: steps.check_files.outputs.files_exists == 'true'
        uses: "ramsey/composer-install@v2"
        env:
          COMPOSER_ROOT_VERSION: dev-${{ github.event.repository.default_branch }}

      - 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