* 3.4: [DoctrineBridge] support __toString as documented for UniqueEntityValidator [travis] enable Redis cluster [Cache] enable Memcached::OPT_TCP_NODELAY to fix perf of misses fix data mapper return type in docblock fix type error handling when writing values
247 lines
9.5 KiB
YAML
247 lines
9.5 KiB
YAML
language: php
|
|
|
|
dist: trusty
|
|
sudo: false
|
|
|
|
git:
|
|
depth: 1
|
|
|
|
addons:
|
|
apt_packages:
|
|
- parallel
|
|
- language-pack-fr-base
|
|
- ldap-utils
|
|
- slapd
|
|
- librabbitmq-dev
|
|
|
|
env:
|
|
global:
|
|
- MIN_PHP=7.1.3
|
|
- SYMFONY_PROCESS_PHP_TEST_BINARY=~/.phpenv/shims/php
|
|
- MESSENGER_AMQP_DSN=amqp://localhost/%2f/messages
|
|
|
|
matrix:
|
|
include:
|
|
- php: 7.1
|
|
- php: 7.1
|
|
env: deps=high
|
|
- php: 7.2
|
|
env: deps=low
|
|
|
|
fast_finish: true
|
|
|
|
cache:
|
|
directories:
|
|
- .phpunit
|
|
- php-$MIN_PHP
|
|
- ~/php-ext
|
|
|
|
services:
|
|
- memcached
|
|
- mongodb
|
|
- redis-server
|
|
- rabbitmq
|
|
- docker
|
|
|
|
before_install:
|
|
- |
|
|
# Start Redis cluster
|
|
docker pull grokzen/redis-cluster:4.0.8
|
|
docker run -d -p 7000:7000 -p 7001:7001 -p 7002:7002 -p 7003:7003 -p 7004:7004 -p 7005:7005 --name redis-cluster grokzen/redis-cluster:4.0.8
|
|
export REDIS_CLUSTER_HOSTS='localhost:7000 localhost:7001 localhost:7002 localhost:7003 localhost:7004 localhost:7005'
|
|
|
|
- |
|
|
# General configuration
|
|
set -e
|
|
stty cols 120
|
|
mkdir /tmp/slapd
|
|
slapd -f src/Symfony/Component/Ldap/Tests/Fixtures/conf/slapd.conf -h ldap://localhost:3389 &
|
|
[ -d ~/.composer ] || mkdir ~/.composer
|
|
cp .composer/* ~/.composer/
|
|
export PHPUNIT=$(readlink -f ./phpunit)
|
|
export PHPUNIT_X="$PHPUNIT --exclude-group tty,benchmark,intl-data"
|
|
export COMPOSER_UP='composer update --no-progress --no-suggest --ansi'
|
|
export COMPONENTS=$(find src/Symfony -mindepth 3 -type f -name phpunit.xml.dist -printf '%h\n')
|
|
find ~/.phpenv -name xdebug.ini -delete
|
|
|
|
nanoseconds () {
|
|
local cmd="date"
|
|
local format="+%s%N"
|
|
local os=$(uname)
|
|
if hash gdate > /dev/null 2>&1; then
|
|
cmd="gdate"
|
|
elif [[ "$os" = Darwin ]]; then
|
|
format="+%s000000000"
|
|
fi
|
|
$cmd -u $format
|
|
}
|
|
export -f nanoseconds
|
|
|
|
# tfold is a helper to create folded reports
|
|
tfold () {
|
|
local title="🐘 $PHP $1"
|
|
local fold=$(echo $title | sed -r 's/[^-_A-Za-z0-9]+/./g')
|
|
shift
|
|
local id=$(printf %08x $(( RANDOM * RANDOM )))
|
|
local start=$(nanoseconds)
|
|
echo -e "travis_fold:start:$fold"
|
|
echo -e "travis_time:start:$id"
|
|
echo -e "\\e[1;34m$title\\e[0m"
|
|
|
|
bash -xc "$*" 2>&1
|
|
local ok=$?
|
|
local end=$(nanoseconds)
|
|
echo -e "\\ntravis_time:end:$id:start=$start,finish=$end,duration=$(($end-$start))"
|
|
(exit $ok) &&
|
|
echo -e "\\e[32mOK\\e[0m $title\\n\\ntravis_fold:end:$fold" ||
|
|
echo -e "\\e[41mKO\\e[0m $title\\n"
|
|
(exit $ok)
|
|
}
|
|
export -f tfold
|
|
|
|
# tpecl is a helper to compile and cache php extensions
|
|
tpecl () {
|
|
local ext_name=$1
|
|
local ext_so=$2
|
|
local INI=$3
|
|
local ext_dir=$(php -r "echo ini_get('extension_dir');")
|
|
local ext_cache=~/php-ext/$(basename $ext_dir)/$ext_name
|
|
|
|
if [[ -e $ext_cache/$ext_so ]]; then
|
|
echo extension = $ext_cache/$ext_so >> $INI
|
|
else
|
|
rm ~/.pearrc /tmp/pear 2>/dev/null || true
|
|
mkdir -p $ext_cache
|
|
echo yes | pecl install -f $ext_name &&
|
|
cp $ext_dir/$ext_so $ext_cache
|
|
fi
|
|
}
|
|
export -f tpecl
|
|
|
|
- |
|
|
# Install sigchild-enabled PHP to test the Process component on the lowest PHP matrix line
|
|
if [[ ! $deps && $TRAVIS_PHP_VERSION = ${MIN_PHP%.*} && ! -d php-$MIN_PHP/sapi ]]; then
|
|
wget http://php.net/get/php-$MIN_PHP.tar.bz2/from/this/mirror -O - | tar -xj &&
|
|
(cd php-$MIN_PHP && ./configure --enable-sigchild --enable-pcntl && make -j2)
|
|
fi
|
|
|
|
- |
|
|
# php.ini configuration
|
|
for PHP in $TRAVIS_PHP_VERSION $php_extra; do
|
|
phpenv global $PHP 2>/dev/null || (cd / && wget https://s3.amazonaws.com/travis-php-archives/binaries/ubuntu/14.04/x86_64/php-$PHP.tar.bz2 -O - | tar -xj)
|
|
INI=~/.phpenv/versions/$PHP/etc/conf.d/travis.ini
|
|
echo date.timezone = Europe/Paris >> $INI
|
|
echo memory_limit = -1 >> $INI
|
|
echo session.gc_probability = 0 >> $INI
|
|
echo opcache.enable_cli = 1 >> $INI
|
|
echo apc.enable_cli = 1 >> $INI
|
|
echo extension = redis.so >> $INI
|
|
echo extension = memcached.so >> $INI
|
|
done
|
|
|
|
- |
|
|
# Install extra PHP extensions
|
|
for PHP in $TRAVIS_PHP_VERSION $php_extra; do
|
|
export PHP=$PHP
|
|
phpenv global $PHP
|
|
INI=~/.phpenv/versions/$PHP/etc/conf.d/travis.ini
|
|
|
|
# Install librabbitmq
|
|
wget http://ftp.debian.org/debian/pool/main/libr/librabbitmq/librabbitmq-dev_0.5.2-2_amd64.deb
|
|
wget http://ftp.debian.org/debian/pool/main/libr/librabbitmq/librabbitmq1_0.5.2-2_amd64.deb
|
|
sudo dpkg -i librabbitmq1_0.5.2-2_amd64.deb librabbitmq-dev_0.5.2-2_amd64.deb
|
|
|
|
# install libsodium
|
|
sudo add-apt-repository ppa:ondrej/php -y
|
|
sudo apt-get update -q
|
|
sudo apt-get install libsodium-dev -y
|
|
|
|
tfold ext.apcu tpecl apcu-5.1.6 apcu.so $INI
|
|
tfold ext.libsodium tpecl libsodium sodium.so $INI
|
|
tfold ext.mongodb tpecl mongodb-1.5.0 mongodb.so $INI
|
|
tfold ext.amqp tpecl amqp-1.9.3 amqp.so $INI
|
|
done
|
|
|
|
- |
|
|
# Load fixtures
|
|
if [[ ! $skip ]]; then
|
|
ldapadd -h localhost:3389 -D cn=admin,dc=symfony,dc=com -w symfony -f src/Symfony/Component/Ldap/Tests/Fixtures/data/base.ldif &&
|
|
ldapadd -h localhost:3389 -D cn=admin,dc=symfony,dc=com -w symfony -f src/Symfony/Component/Ldap/Tests/Fixtures/data/fixtures.ldif
|
|
fi
|
|
|
|
install:
|
|
- |
|
|
# Create local composer packages for each patched components and reference them in composer.json files when cross-testing components
|
|
if [[ ! $deps ]]; then
|
|
php .github/build-packages.php HEAD^ src/Symfony/Bridge/PhpUnit
|
|
else
|
|
export SYMFONY_DEPRECATIONS_HELPER=weak &&
|
|
cp composer.json composer.json.orig &&
|
|
echo -e '{\n"require":{'"$(grep phpunit-bridge composer.json)"'"php":"*"},"minimum-stability":"dev"}' > composer.json &&
|
|
php .github/build-packages.php HEAD^ $COMPONENTS &&
|
|
mv composer.json composer.json.phpunit &&
|
|
mv composer.json.orig composer.json
|
|
fi
|
|
|
|
- |
|
|
# For the master branch, when deps=high, the version before master is checked out and tested with the locally patched components
|
|
if [[ $deps = high && $TRAVIS_BRANCH = master ]]; then
|
|
SYMFONY_VERSION=$(git ls-remote --heads | grep -o '/[1-9].*' | tail -n 1 | sed s/.//) &&
|
|
git fetch origin $SYMFONY_VERSION &&
|
|
git checkout -m FETCH_HEAD &&
|
|
COMPONENTS=$(find src/Symfony -mindepth 3 -type f -name phpunit.xml.dist -printf '%h\n')
|
|
else
|
|
SYMFONY_VERSION=$(cat composer.json | grep '^ *"dev-master". *"[1-9]' | grep -o '[0-9.]*')
|
|
fi
|
|
|
|
- |
|
|
# Install symfony/flex
|
|
if [[ $deps = low ]]; then
|
|
export SYMFONY_REQUIRE='>=2.3'
|
|
else
|
|
export SYMFONY_REQUIRE=">=$SYMFONY_VERSION"
|
|
fi
|
|
composer global require --no-progress --no-scripts --no-plugins symfony/flex dev-master
|
|
|
|
- |
|
|
# Legacy tests are skipped when deps=high and when the current branch version has not the same major version number than the next one
|
|
[[ $deps = high && ${SYMFONY_VERSION%.*} != $(git show $(git ls-remote --heads | grep -FA1 /$SYMFONY_VERSION | tail -n 1):composer.json | grep '^ *"dev-master". *"[1-9]' | grep -o '[0-9]*' | head -n 1) ]] && LEGACY=,legacy
|
|
|
|
export COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev
|
|
if [[ $deps ]]; then mv composer.json.phpunit composer.json; fi
|
|
|
|
- php -i
|
|
|
|
- |
|
|
run_tests () {
|
|
set -e
|
|
export PHP=$1
|
|
if [[ $PHP != $TRAVIS_PHP_VERSION && $TRAVIS_PULL_REQUEST != false ]]; then
|
|
echo -e "\\n\\e[1;34mIntermediate PHP version $PHP is skipped for pull requests.\\e[0m"
|
|
break
|
|
fi
|
|
phpenv global $PHP
|
|
([[ $deps ]] && cd src/Symfony/Component/HttpFoundation; composer require --dev --no-update mongodb/mongodb)
|
|
tfold 'composer update' $COMPOSER_UP
|
|
tfold 'phpunit install' ./phpunit install
|
|
if [[ $deps = high ]]; then
|
|
echo "$COMPONENTS" | parallel --gnu -j10% "tfold {} 'cd {} && $COMPOSER_UP && $PHPUNIT_X$LEGACY'"
|
|
elif [[ $deps = low ]]; then
|
|
[[ -e ~/php-ext/composer-lowest.lock.tar ]] && tar -xf ~/php-ext/composer-lowest.lock.tar
|
|
tar -cf ~/php-ext/composer-lowest.lock.tar --files-from /dev/null
|
|
php .github/rm-invalid-lowest-lock-files.php $COMPONENTS
|
|
echo "$COMPONENTS" | parallel --gnu -j10% "tfold {} 'cd {} && ([ -e composer.lock ] && ${COMPOSER_UP/update/install} || $COMPOSER_UP --prefer-lowest --prefer-stable) && $PHPUNIT_X'"
|
|
echo "$COMPONENTS" | xargs -n1 -I{} tar --append -f ~/php-ext/composer-lowest.lock.tar {}/composer.lock
|
|
else
|
|
echo "$COMPONENTS" | parallel --gnu "tfold {} $PHPUNIT_X {}"
|
|
tfold src/Symfony/Component/Console.tty $PHPUNIT src/Symfony/Component/Console --group tty
|
|
if [[ $PHP = ${MIN_PHP%.*} ]]; then
|
|
export PHP=$MIN_PHP
|
|
tfold src/Symfony/Component/Process.sigchild SYMFONY_DEPRECATIONS_HELPER=weak php-$MIN_PHP/sapi/cli/php ./phpunit --colors=always src/Symfony/Component/Process/
|
|
fi
|
|
fi
|
|
}
|
|
|
|
script:
|
|
- for PHP in $TRAVIS_PHP_VERSION $php_extra; do (run_tests $PHP); done
|