name: CI

on:
  pull_request: ~
  push:
    branches:
      - main
    tags:
      - '*'

jobs:
  coding-style:
    name: Coding Style
    runs-on: ubuntu-latest
    steps:
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.0
          extensions: dom, fileinfo, filter, gd, hash, intl, json, mbstring, pcre, pdo, zlib
          coverage: none

      - name: Checkout
        uses: actions/checkout@v3

      - name: Install the dependencies
        run: composer install --no-interaction

      - name: Check the coding style
        run: vendor/bin/php-cs-fixer fix --diff --dry-run

      - name: Analyze the code
        run: vendor/bin/phpstan analyze

  tests:
    name: PHP ${{ matrix.php }} / SF ^${{ matrix.symfony }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        php: [8.0, 8.1, 8.2, 8.3, 8.4, 8.5]
        symfony: [5.4, 6.0, 6.1, 6.2, 6.3, 6.4, 7.0]
        exclude:
          - php: 8.0
            symfony: 6.0
          - php: 8.0
            symfony: 6.1
          - php: 8.0
            symfony: 6.2
          - php: 8.0
            symfony: 6.3
          - php: 8.0
            symfony: 6.4
          - php: 8.0
            symfony: 7.0
          - php: 8.1
            symfony: 7.0
          - php: 8.4
            symfony: 5.4
          - php: 8.4
            symfony: 6.0
          - php: 8.4
            symfony: 6.1
          - php: 8.4
            symfony: 6.2
          - php: 8.4
            symfony: 6.3
          - php: 8.4
            symfony: 6.4
          - php: 8.5
            symfony: 5.4
          - php: 8.5
            symfony: 6.0
          - php: 8.5
            symfony: 6.1
          - php: 8.5
            symfony: 6.2
          - php: 8.5
            symfony: 6.3
          - php: 8.5
            symfony: 6.4
    steps:
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          extensions: dom, fileinfo, filter, gd, hash, intl, json, mbstring, pcre, pdo_mysql, zlib
          coverage: none

      - name: Checkout
        uses: actions/checkout@v3

      - name: Install the dependencies
        run: |
          composer require symfony/framework-bundle:^${{ matrix.symfony }} symfony/http-foundation:^${{ matrix.symfony }} symfony/yaml:^${{ matrix.symfony }}
          composer install --no-interaction --no-suggest

      - name: Run the unit tests
        run: vendor/bin/phpunit --colors=always

  prefer-lowest:
    name: Prefer Lowest
    runs-on: ubuntu-latest
    steps:
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.0
          extensions: dom, fileinfo, filter, gd, hash, intl, json, mbstring, pcre, pdo_mysql, zlib
          coverage: none

      - name: Checkout
        uses: actions/checkout@v3

      - name: Install the dependencies
        run: composer update --prefer-lowest --prefer-stable --no-interaction

      - name: Run the unit tests
        run: vendor/bin/phpunit --colors=always
