language: php
sudo: false
dist: trusty

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

php:
  - 7.2
  - 7.3
  - nightly

env:
  - DB=sqlite
  - DB=mysql
  - DB=mysqli

before_install:
  - |
    if [ "x$COVERAGE" != "xyes" ]; then
      mv ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini{,.disabled} || true
    fi

before_script:
  - if [[ "$DB" == "mysql" || "$DB" == "mysqli" || "$DB" == *"mariadb"* ]]; then mysql < tests/travis/create-mysql-schema.sql; fi;
  - |
    if [ "x$COVERAGE" == "xyes" ] && [[ ! $(php -m | grep -si xdebug) ]]; then
      echo "xdebug is required for coverage"
      exit 1
    fi

install:
  - rm composer.lock
  - travis_retry composer -n update --prefer-dist

script:
  - |
    if [ "x$COVERAGE" == "xyes" ]; then
       ./vendor/bin/phpunit --configuration tests/travis/$DB.travis.xml --coverage-clover clover.xml
    else
       ./vendor/bin/phpunit --configuration tests/travis/$DB.travis.xml
    fi

after_script:
  - |
    if [ "x$COVERAGE" == "xyes" ]; then
      travis_retry wget https://github.com/scrutinizer-ci/ocular/releases/download/1.5.2/ocular.phar
      travis_retry php ocular.phar code-coverage:upload --format=php-clover clover.xml
    fi

jobs:
  allow_failures:
    - php: nightly
    - env: DB=pgsql POSTGRESQL_VERSION=11.0

  exclude:
    - php: 7.2
      env: DB=sqlite
    - php: 7.2
      env: DB=mysql
    - php: 7.2
      env: DB=mysqli
    - php: 7.2
      env: DB=sqlite
    - php: 7.2
      env: DB=mysql
    - php: 7.2
      env: DB=mysqli
    - php: 7.3
      env: DB=mysql
    - php: 7.3
      env: DB=mysqli
    - php: nightly
      env: DB=mysql
    - php: nightly
      env: DB=mysqli

  include:
    - stage: Test
      php: 7.2
      env: DB=sqlite COVERAGE=yes

    - stage: Test
      php: 7.2
      env: DB=mysql COVERAGE=yes

    - stage: Test
      php: 7.2
      env: DB=mysqli COVERAGE=yes

    - stage: Test
      php: 7.2
      env: DB=mysql MYSQL_VERSION=5.7 COVERAGE=yes
      sudo: required
      before_script:
        - bash ./tests/travis/install-mysql-5.7.sh
    - stage: Test
      php: 7.3
      env: DB=mysql MYSQL_VERSION=5.7
      sudo: required
      before_script:
        - bash ./tests/travis/install-mysql-5.7.sh
    - stage: Test
      php: nightly
      env: DB=mysql MYSQL_VERSION=5.7
      sudo: required
      before_script:
        - bash ./tests/travis/install-mysql-5.7.sh

    - stage: Test
      php: 7.2
      env: DB=mysqli MYSQL_VERSION=5.7 COVERAGE=yes
      sudo: required
      before_script:
        - bash ./tests/travis/install-mysql-5.7.sh
    - stage: Test
      php: 7.3
      env: DB=mysqli MYSQL_VERSION=5.7
      sudo: required
      before_script:
        - bash ./tests/travis/install-mysql-5.7.sh
    - stage: Test
      php: nightly
      env: DB=mysqli MYSQL_VERSION=5.7
      sudo: required
      before_script:
        - bash ./tests/travis/install-mysql-5.7.sh

    - stage: Test
      php: 7.2
      env: DB=mariadb MARIADB_VERSION=10.0 COVERAGE=yes
      addons:
        mariadb: 10.0

    - stage: Test
      php: 7.2
      env: DB=mariadb MARIADB_VERSION=10.1 COVERAGE=yes
      addons:
        mariadb: 10.1

    - stage: Test
      php: 7.2
      env: DB=mariadb MARIADB_VERSION=10.2 COVERAGE=yes
      addons:
        mariadb: 10.2

    - stage: Test
      php: 7.2
      env: DB=mariadb.mysqli MARIADB_VERSION=10.0 COVERAGE=yes
      addons:
          mariadb: 10.0

    - stage: Test
      php: 7.2
      env: DB=mariadb.mysqli MARIADB_VERSION=10.1 COVERAGE=yes
      addons:
          mariadb: 10.1

    - stage: Test
      php: 7.2
      env: DB=mariadb.mysqli MARIADB_VERSION=10.2 COVERAGE=yes
      addons:
        mariadb: 10.2

    - stage: Test
      php: 7.2
      env: DB=mariadb MARIADB_VERSION=10.3 COVERAGE=yes
      addons:
          mariadb: 10.3

    - stage: Test
      php: 7.3
      env: DB=mariadb MARIADB_VERSION=10.3
      addons:
          mariadb: 10.3

    - stage: Test
      php: nightly
      env: DB=mariadb MARIADB_VERSION=10.3
      addons:
          mariadb: 10.3

    - stage: Test
      php: 7.2
      env: DB=mariadb.mysqli MARIADB_VERSION=10.3 COVERAGE=yes
      addons:
          mariadb: 10.3

    - stage: Test
      php: 7.3
      env: DB=mariadb.mysqli MARIADB_VERSION=10.3
      addons:
          mariadb: 10.3

    - stage: Test
      php: nightly
      env: DB=mariadb.mysqli MARIADB_VERSION=10.3
      addons:
          mariadb: 10.3

    - stage: Test
      php: 7.2
      env: DB=pgsql POSTGRESQL_VERSION=9.2 COVERAGE=yes
      services:
        - postgresql
      addons:
        postgresql: "9.2"

    - stage: Test
      php: 7.2
      env: DB=pgsql POSTGRESQL_VERSION=9.3 COVERAGE=yes
      services:
        - postgresql
      addons:
        postgresql: "9.3"

    - stage: Test
      php: 7.2
      env: DB=pgsql POSTGRESQL_VERSION=9.4 COVERAGE=yes
      services:
        - postgresql
      addons:
        postgresql: "9.4"

    - stage: Test
      php: 7.2
      env: DB=pgsql POSTGRESQL_VERSION=9.5 COVERAGE=yes
      services:
        - postgresql
      addons:
        postgresql: "9.5"

    - stage: Test
      php: 7.2
      env: DB=pgsql POSTGRESQL_VERSION=9.6 COVERAGE=yes
      services:
        - postgresql
      addons:
        postgresql: "9.6"

    - stage: Test
      php: 7.2
      env: DB=pgsql POSTGRESQL_VERSION=10.0 COVERAGE=yes
      sudo: required
      services:
        - postgresql
      addons:
        postgresql: "9.6"
      before_script:
        - bash ./tests/travis/install-postgres-10.sh

    - stage: Test
      php: 7.2
      env: DB=pgsql POSTGRESQL_VERSION=11.0 COVERAGE=yes
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-postgres-11.sh
    - stage: Test
      php: 7.3
      env: DB=pgsql POSTGRESQL_VERSION=11.0
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-postgres-11.sh
    - stage: Test
      php: nightly
      env: DB=pgsql POSTGRESQL_VERSION=11.0
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-postgres-11.sh

    - stage: Test
      php: 7.2
      env: DB=sqlsrv COVERAGE=yes
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-mssql-$DB.sh
        - bash ./tests/travis/install-mssql.sh
    - stage: Test
      php: 7.3
      env: DB=sqlsrv
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-mssql-$DB.sh
        - bash ./tests/travis/install-mssql.sh
    - stage: Test
      php: nightly
      env: DB=sqlsrv
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-mssql-$DB.sh
        - bash ./tests/travis/install-mssql.sh

    - stage: Test
      php: 7.2
      env: DB=pdo_sqlsrv COVERAGE=yes
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-mssql-$DB.sh
        - bash ./tests/travis/install-mssql.sh
    - stage: Test
      php: 7.3
      env: DB=pdo_sqlsrv
      sudo: required
      services:
      - docker
      before_script:
      - bash ./tests/travis/install-mssql-$DB.sh
      - bash ./tests/travis/install-mssql.sh
    - stage: Test
      php: nightly
      env: DB=pdo_sqlsrv
      sudo: required
      services:
      - docker
      before_script:
      - bash ./tests/travis/install-mssql-$DB.sh
      - bash ./tests/travis/install-mssql.sh

    - stage: Test
      php: 7.2
      env: DB=ibm_db2 COVERAGE=yes
      sudo: required
      services:
        - docker
      before_script:
        - bash ./tests/travis/install-db2.sh
        - bash ./tests/travis/install-db2-$DB.sh

    - stage: Test
      if: type = cron
      php: 7.2
      env: DB=sqlite DEPENDENCIES=dev
      install:
        - composer config minimum-stability dev
        - travis_retry composer update --prefer-dist

    - stage: Code Quality
      php: 7.2
      env: DB=none STATIC_ANALYSIS
      install: travis_retry composer install --prefer-dist
      script: vendor/bin/phpstan analyse

    - stage: Coding standard
      php: 7.2
      install: travis_retry composer install --prefer-dist
      script:
        - ./vendor/bin/phpcs