name: 'CI'

on:
  pull_request:
  push:

env:
  PHP_VERSION: 8.1
  PHPUNIT_FLAGS: "-v"

jobs:
  code-quality:
    name: "Code Quality"
    runs-on: ubuntu-latest
    steps:
      - name: "Checkout code"
        uses: actions/checkout@v4

      - name: "Install PHP"
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ env.PHP_VERSION }}
          coverage: none

      - name: "Get Composer Info"
        id: composer
        run: |
          echo "composer-lock-hash=${{ hashFiles('**/composer.lock') }}" >> $GITHUB_OUTPUT

      - name: "Restore cache results"
        uses: actions/cache/restore@v4
        with:
          path: .cache
          key: ci-${{ github.ref_name }}

      - name: "Restore Composer Cache"
        uses: actions/cache/restore@v4
        id: restore-composer
        with:
          path: vendor
          key: ${{ runner.os }}-composer-${{ steps.composer.outputs.composer-lock-hash }}

      - name: "Install Composer dependencies"
        if: steps.restore-composer.outputs.cache-hit != 'true'
        run: composer install --no-progress

      - name: "Run PHPStan"
        run: vendor/bin/phpstan analyse --error-format=github -vvv

      - name: "Run PHP-CS-Fixer"
        run: >-
          vendor/bin/php-cs-fixer fix --diff --dry-run
          --config=.php-cs-fixer.dist.php

      - name: "Run PHPUnit"
        run: vendor/bin/phpunit ${{ env.PHPUNIT_FLAGS }}

      - name: "Save cache results"
        uses: actions/cache/save@v4
        if: always()
        with:
          path: .cache
          key: ci-${{ github.ref_name }}

      - name: "Save vendor directory"
        if: steps.restore-composer.outputs.cache-hit != 'true'
        uses: actions/cache/save@v4
        with:
          path: vendor
          key: ${{ runner.os }}-composer-${{ steps.composer.outputs.composer-lock-hash }}