# https://help.github.com/en/categories/automating-your-workflow-with-github-actions

on:
  - pull_request
  - push

name: CI

env:
  COMPOSER_ROOT_VERSION: "10.x-dev"

jobs:
  coding-guidelines:
    name: Coding Guidelines

    runs-on: ubuntu-latest

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

      - name: Install PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.1
          extensions: :apcu, :imagick
          coverage: none
          tools: none

      - name: Run PHP-CS-Fixer
        run: ./tools/php-cs-fixer fix --dry-run --show-progress=dots --using-cache=no --verbose

  type-checker:
    name: Type Checker

    runs-on: ubuntu-latest

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

      - name: Install PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.1
          extensions: :apcu, :imagick
          coverage: none
          tools: none

      - name: Update dependencies with composer
        run: ./tools/composer update --no-interaction --no-ansi --no-progress

      - name: Run vimeo/psalm
        run: ./tools/psalm --config=.psalm/config.xml --no-progress --shepherd --show-info=false --stats

  tests:
    name: Tests

    runs-on: ${{ matrix.os }}

    env:
      PHP_EXTENSIONS: dom, json, libxml, mbstring, pdo_sqlite, soap, xml, xmlwriter, :apcu, :imagick
      PHP_INI_VALUES: memory_limit=-1, assert.exception=1, zend.assertions=1, error_reporting=-1, log_errors_max_len=0, display_errors=On

    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - windows-latest

        php-version:
          - "8.1"
          - "8.2"
          - "8.3"

        coverage-driver:
          - "pcov"
          - "xdebug3"

    steps:
      - name: Configure Git to avoid issues with line endings
        if: matrix.os == 'windows-latest'
        run: git config --global core.autocrlf false

      - name: Checkout
        uses: actions/checkout@v3

      - name: Install PHP with extensions
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-version }}
          coverage: ${{ matrix.coverage-driver }}
          extensions: ${{ env.PHP_EXTENSIONS }}
          ini-values: ${{ env.PHP_INI_VALUES }}
          tools: none

      - name: Install dependencies with Composer
        run: php ./tools/composer update --no-ansi --no-interaction --no-progress

      - name: Run tests with PHPUnit
        run: vendor/bin/phpunit --coverage-clover=coverage.xml

      - name: Send code coverage report to Codecov.io
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
