language: php

sudo: false

php:
  - nightly

os:
  - linux

env:
  global:
    - PHP_COMPOSER_SETUP=basic
    - PHP_EXTENSION=true
    - PHP_MBSTRING_FUNC_OVERLOAD=false

git:
  depth: 2

cache:
  directories:
    - $HOME/.composer/cache

matrix:
  fast_finish: true
  allow_failures:
    - php: nightly
  include:
    - php: nightly
    - php: 7.0
    - php: 7.0
      env:
        - PHP_EXTENSION=false
    - php: 7.0
      env:
        - PHP_COMPOSER_SETUP=lowest
        - PHP_EXTENSION=false
    - php: 7.1
    - php: 7.1
      env:
        - PHP_EXTENSION=false
    - php: 7.1
      env:
        - PHP_COMPOSER_SETUP=lowest
        - PHP_EXTENSION=false
    - php: 7.2
    - php: 7.2
      env:
        - PHP_EXTENSION=false
    - php: 7.2
      env:
        - PHP_COMPOSER_SETUP=lowest
        - PHP_EXTENSION=false
    - php: 7.3
    - php: 7.3
      env:
        - PHP_EXTENSION=false
    - php: 7.3
      env:
        - PHP_COMPOSER_SETUP=lowest
        - PHP_EXTENSION=false
    - php: 7.4
    - php: 7.4
      env:
        - PHP_EXTENSION=false
    - php: 7.4
      env:
        - PHP_COMPOSER_SETUP=lowest
        - PHP_EXTENSION=false

before_script:
  - stty cols 120
  - php --version
  - if [[ $TRAVIS_PHP_VERSION = hhvm* ]]; then TRAVIS_PHP_INI_FILE=/etc/hhvm/php.ini; MAIN_PHP_INI_FILE=/etc/hhvm/php.ini; else TRAVIS_PHP_INI_FILE=~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; MAIN_PHP_INI_FILE=~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi
  - echo "php-config -> orig"
  - cat $TRAVIS_PHP_INI_FILE
  - cat $MAIN_PHP_INI_FILE
  - if [[ $PHP_EXTENSION = false ]]; then phpenv config-rm mbstring.ini || echo "mbstring not available"; fi
  - if [[ $PHP_EXTENSION = false ]]; then phpenv config-rm intl.ini || echo "intl not available"; fi
  - if [[ $PHP_EXTENSION = false ]]; then phpenv config-rm iconv.ini || echo "iconv not available"; fi
  - if [[ $PHP_EXTENSION = true ]]; then phpenv config-add mbstring.ini || echo "mbstring not available"; fi
  - if [[ $PHP_EXTENSION = true ]]; then phpenv config-add intl.ini || echo "intl not available"; fi
  - if [[ $PHP_EXTENSION = true ]]; then phpenv config-add iconv.ini || echo "iconv not available"; fi
  - if [[ $PHP_MBSTRING_FUNC_OVERLOAD = true ]]; then echo "mbstring.func_overload = 7" >> $TRAVIS_PHP_INI_FILE; fi
  - echo "php-config -> new"
  - cat $TRAVIS_PHP_INI_FILE
  - cat $MAIN_PHP_INI_FILE
  - wget https://scrutinizer-ci.com/ocular.phar
  - travis_retry composer self-update
  - travis_retry composer require satooshi/php-coveralls
  - if [ "$(phpenv version-name)" == 7.4 ]; then travis_retry composer require phpstan/phpstan; fi
  - if [ "$(phpenv version-name)" == 7.4 ]; then travis_retry composer require vimeo/psalm; fi
  - if [[ $PHP_COMPOSER_SETUP = 'basic' ]]; then travis_retry composer install --prefer-dist --no-interaction; fi
  - if [[ $PHP_COMPOSER_SETUP = 'lowest' ]]; then travis_retry composer update --prefer-dist --no-interaction --prefer-lowest --prefer-stable; fi
  - composer dump-autoload -o

script:
  - mkdir -p build/logs
  - php vendor/bin/phpunit -c phpunit.xml
  - if [ "$(phpenv version-name)" == 7.4 ]; then php vendor/bin/phpstan analyse; fi
  - if [ "$(phpenv version-name)" == 7.4 ]; then php vendor/bin/psalm; fi

after_script:
  - php vendor/bin/php-coveralls -v
  - php ocular.phar code-coverage:upload --format=php-clover build/logs/clover.xml
  - bash <(curl -s https://codecov.io/bash)
