name: Code Quality Diagnostics

on:
  pull_request:
  push:
    branches:
      - master
      - develop

jobs:
  build:
    runs-on: ubuntu-latest

    name: PHP ${{ matrix.php }}

    strategy:
      fail-fast: false
      matrix:
        include:
          - php: 8.1
            output: '-o github-action -o default'
            phpcq_install: 'update'
          - php: 8.2
            output: '-o github-action -o default'
            phpcq_install: 'update'

    steps:
      - name: Pull source
        uses: actions/checkout@v2

      - name: Setup PHP with PECL extension
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}

      - name: Cache composer cache directory
        uses: actions/cache@v1
        env:
          cache-name: composer-cache-dir-${{ matrix.php }}
        with:
          path: ~/.cache/composer
          key: ${{ runner.os }}-build-${{ env.cache-name }}

      - name: Cache phpcq directory
        uses: actions/cache@v1
        env:
          cache-name: phpcq-${{ matrix.php }}
        with:
          path: .phpcq
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/.phpcq.lock') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-

      - name: Cache vendor directory
        uses: actions/cache@v1
        env:
          cache-name: vendor-${{ matrix.php }}
        with:
          path: vendor
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-

      - name: Install composer dependencies
        run: composer install

      - name: Update phpcq
        run: ./vendor/bin/phpcq self-update

      - name: Install phpcq toolchain
        run: ./vendor/bin/phpcq ${{ matrix.phpcq_install }} -v

      - name: Run tests
        run: ./vendor/bin/phpcq run -v ${{ matrix.output }}

      - name: Upload build directory to artifact
        uses: actions/upload-artifact@v2
        if: ${{ success() }} || ${{ failure() }}
        with:
          name: phpcq-builds-php-${{ matrix.php }}
          path: .phpcq/build/
