name: CI

on:
  push:
  pull_request:

permissions:
  contents: read

jobs:
  cs:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]')"

    name: Coding Style

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: "8.3"
          extensions: mbstring
          tools: composer:v2
          coverage: none

      - name: Install dependencies
        run: |
          composer install --prefer-dist --no-interaction --no-progress
          npm install --omit=optional

      - name: Check Coding Style - PHP
        run: vendor/bin/php-cs-fixer fix --dry-run --using-cache=no --diff --verbose

      - name: Check composer.json format
        run: composer validate --strict --no-check-lock && composer normalize --dry-run --no-check-lock

      - name: Check Coding Style - JS
        run: npx eslint --ext .js .

      - name: Plugins - Check composer.json format
        run: |
          for plugin_dir in plugins/*/; do (
            echo "========== $plugin_dir =========="
            cd "$plugin_dir"
            composer validate --strict --no-check-lock && composer normalize --dry-run --no-check-lock "$plugin_dir/composer.json"
            echo " "
          ); done

  phpstan:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]')"

    name: Static Analysis

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: "8.3"
          extensions: mbstring
          tools: composer:v2
          coverage: none

      - name: Setup composer
        run: |
            composer require "kolab/net_ldap3:~1.1.1" --no-update
            composer require "laravel/dusk:^7.9" --no-update

      - name: Install dependencies
        run: composer install --prefer-dist --no-interaction --no-progress

      - name: Run Static Analysis
        run: |
          rm -r public_html # remove once https://github.com/phpstan/phpstan/issues/10321 is fixed
          mkdir node_modules # remove once https://github.com/phpstan/phpstan/issues/11436 is fixed
          vendor/bin/phpstan analyse -v
