name: "Lint"

on:
    pull_request:
    push:
        branches:
            - main

env:
    fail-fast: true

permissions:
    contents: read

jobs:
    php-cs-fixer:
        name: PHP-CS-Fixer
        runs-on: ubuntu-latest
        steps:
            - name: "Checkout code"
              uses: actions/checkout@v3

            - name: PHP-CS-Fixer
              uses: docker://oskarstark/php-cs-fixer-ga
              with:
                  args: --diff --dry-run

    linters:
        name: Linters
        runs-on: ubuntu-latest
        strategy:
            matrix:
                php-version: ['8.1']

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

            - name: "Install PHP with extensions"
              uses: shivammathur/setup-php@v2
              with:
                  coverage: "none"
                  extensions: intl
                  php-version: ${{ matrix.php-version }}
                  tools: composer:v2

            - name: "Set composer cache directory"
              id: composer-cache
              run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

            - name: "Cache composer"
              uses: actions/cache@v3
              with:
                  path: ${{ steps.composer-cache.outputs.dir }}
                  key: ${{ runner.os }}-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}
                  restore-keys: ${{ runner.os }}-${{ matrix.php-version }}-composer-

            - name: "Composer install"
              run: composer install --no-interaction --no-progress

            - name: Install PHPUnit
              id: install
              run: vendor/bin/simple-phpunit install

            - name: Lint YAML files
              if: always() && steps.install.outcome == 'success'
              run: ./bin/console lint:yaml config --parse-tags

            - name: Lint Twig templates
              if: always() && steps.install.outcome == 'success'
              run: ./bin/console lint:twig templates --env=prod

            - name: Lint XLIFF translations
              if: always() && steps.install.outcome == 'success'
              run: ./bin/console lint:xliff translations

            - name: Lint Parameters and Services
              if: always() && steps.install.outcome == 'success'
              run: ./bin/console lint:container --no-debug

            - name: Lint Doctrine entities
              if: always() && steps.install.outcome == 'success'
              run: ./bin/console doctrine:schema:validate --skip-sync -vvv --no-interaction

            - name: Lint Composer config
              if: always() && steps.install.outcome == 'success'
              run: composer validate --strict

            - name: Check if any dependencies are compromised
              if: always() && steps.install.outcome == 'success'
              run: composer audit

            - name: Run PHPStan
              if: always() && steps.install.outcome == 'success'
              run: ./vendor/bin/phpstan analyze
