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

on:
  pull_request:
  push:
    branches:
      - "master"
    tags:
      - "**"

name: "Continuous Integration"

jobs:
  coding-standards:
    name: "Coding Standards"

    runs-on: "ubuntu-latest"

    strategy:
      matrix:
        php-version:
          - "5.3"

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

      - 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: "determine-composer-cache-directory"
        run: "echo \"::set-output name=directory::$(composer config cache-dir)\""

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

      - name: "Install dependencies with composer"
        run: "composer install --no-interaction --no-progress --no-suggest"

      - name: "Run squizlabs/php_codesniffer"
        run: "vendor/bin/phpcs --standard=PSR2 src -n"

  tests:
    name: "Tests"

    runs-on: "ubuntu-latest"

    strategy:
      matrix:
        php-version:
          - "5.3"
          - "5.4"
          - "5.5"
          - "5.6"
          - "7.0"
          - "7.1"
          - "7.2"
          - "7.3"
          - "7.4"

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

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

      - name: "Determine composer cache directory"
        id: "determine-composer-cache-directory"
        run: "echo \"::set-output name=directory::$(composer config cache-dir)\""

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

      - name: "Install dependencies with composer"
        run: "composer install --no-interaction --no-progress --no-suggest"

      - name: "Run tests with phpunit/phpunit"
        run: "vendor/bin/phpunit"

  code-coverage:
    name: "Code Coverage"

    runs-on: "ubuntu-latest"

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

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

      - name: "Install PHP with extensions"
        uses: "shivammathur/setup-php@v2"
        with:
          coverage: "xdebug"
          extensions: "intl"
          ini-values: "memory_limit=-1"
          php-version: "${{ matrix.php-version }}"

      - name: "Determine composer cache directory"
        id: "determine-composer-cache-directory"
        run: "echo \"::set-output name=directory::$(composer config cache-dir)\""

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

      - name: "Install dependencies with composer"
        run: "composer install --no-interaction --no-progress --no-suggest"

      - name: "Create build directory"
        run: "mkdir -p .build/logs"

      - name: "Collect code coverage with Xdebug and phpunit/phpunit"
        run: "vendor/bin/phpunit --coverage-clover=.build/logs/clover.xml"

      - name: "Send code coverage report to Codecov.io"
        env:
          CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"
        run: "bash <(curl -s https://codecov.io/bash)"
