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

on:
  - "pull_request"
  - "push"

name: "CI"

env:
  COMPOSER_ROOT_VERSION: "6.0-dev"

permissions:
  contents: read

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
          coverage: 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
          coverage: none

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

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

  tests:
    name: Tests

    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        php-version:
          - "8.1"
          - "8.2"
          - "8.3"

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

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

      - name: "Cache dependencies installed with Composer"
        uses: "actions/cache@v2"
        with:
          path: "~/.composer/cache"
          key: "php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('**/composer.json') }}"
          restore-keys: "php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-"

      - name: "Install dependencies with Composer"
        run: "./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"
        env:
          CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"
        run: "bash <(curl -s https://codecov.io/bash) || true"
