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

on:
  - pull_request
  - push

name: CI

jobs:
  coding-guidelines:
    name: Coding Guidelines

    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Run friendsofphp/php-cs-fixer
        run: php7.3 ./tools/php-cs-fixer fix --diff-format=udiff --dry-run --show-progress=dots --using-cache=no --verbose

  lint-xml-configuration:
    name: Lint XML Configuration

    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Build Docker image
        uses: ./.docker/lint-xml-configuration

      - name: Lint XML configuration files
        uses: ./.docker/lint-xml-configuration
        with:
          args: bash ./build/lint-xml-configuration

  tests:
    name: Tests

    runs-on: ubuntu-latest

    strategy:
      matrix:
        php-binary:
          - php7.1
          - php7.2
          - php7.3

        dependencies:
          - lowest
          - highest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

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

      - name: Install lowest dependencies with composer
        if: matrix.dependencies == 'lowest'
        run: ${{ matrix.php-binary }} ./tools/composer update --no-ansi --no-interaction --no-progress --no-suggest --prefer-lowest

      - name: Install highest dependencies with composer
        if: matrix.dependencies == 'highest'
        run: ${{ matrix.php-binary }} ./tools/composer update --no-ansi --no-interaction --no-progress --no-suggest

      - name: Run sanity check
        run: PHP_BINARY=${{ matrix.php-binary }} bash ./build/sanity-check

      - name: Run tests with phpunit
        run: ${{ matrix.php-binary }} -d assert.exception=1 -d zend.assertions=1 ./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
