on: # yamllint disable-line rule:truthy
  pull_request: ~
  push:
    branches:
      - "main"
      - "[0-9].*"

name: "Static analysis"

jobs:
  phpstan:
    name: "PHPStan"
    runs-on: "ubuntu-latest"

    strategy:
      matrix:
        php-version: ["7.4"]

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

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

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

      - name: "Cache dependencies installed with composer"
        uses: "actions/cache@v3"
        with:
          path: "${{ steps.composer-cache.outputs.directory }}"
          key: "composer-${{ matrix.php-version }}-${{ hashFiles('composer.*') }}"
          restore-keys: |
            composer-${{ matrix.php-version }}-
            composer-

      - name: "Download dependencies"
        run: |
          composer update --ansi --no-interaction --no-progress --optimize-autoloader
          composer bin phpstan install --ansi --no-interaction --no-progress --optimize-autoloader

      - name: "Run PHPStan"
        run: |
          vendor/bin/phpstan --ansi --no-progress

  psalm:
    name: "Psalm"
    runs-on: "ubuntu-latest"

    strategy:
      matrix:
        php-version: ["7.4"]

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

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

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

      - name: "Cache dependencies installed with composer"
        uses: "actions/cache@v3"
        with:
          path: "${{ steps.composer-cache.outputs.directory }}"
          key: "composer-${{ matrix.php-version }}-${{ hashFiles('composer.*') }}"
          restore-keys: |
            composer-${{ matrix.php-version }}-
            composer-

      - name: "Download dependencies"
        run: |
          composer update --ansi --no-interaction --no-progress --optimize-autoloader
          composer bin psalm install --ansi --no-interaction --no-progress --optimize-autoloader

      - name: "Run Psalm"
        run: |
          vendor/bin/psalm --no-progress --output-format=github --shepherd
