* 4.1: [VarDumper] fix dump of closures created from callables [DI] fix dumping inlined services Add framework asset changes to upgrade 3.0 guide [Travis] Bump ext-mongodb to 1.5.2 on Travis [DI] dont track classes/interfaces used to compute autowiring error messages [DI] fix GraphvizDumper ignoring inline definitions bumped Symfony version to 4.1.8 updated VERSION for 4.1.7 updated CHANGELOG for 4.1.7 bumped Symfony version to 3.4.19 updated VERSION for 3.4.18 updated CHANGELOG for 3.4.18 bumped Symfony version to 2.8.48 updated VERSION for 2.8.47 update CONTRIBUTORS for 2.8.47 updated CHANGELOG for 2.8.47 Fix ini_get() for boolean values
253 lines
9.9 KiB
YAML
253 lines
9.9 KiB
YAML
language: php
|
|
|
|
dist: trusty
|
|
sudo: false
|
|
|
|
git:
|
|
depth: 2
|
|
|
|
addons:
|
|
apt_packages:
|
|
- parallel
|
|
- language-pack-fr-base
|
|
- ldap-utils
|
|
- slapd
|
|
- librabbitmq-dev
|
|
- zookeeperd
|
|
- libzookeeper-mt-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 2 -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
|
|
|
|
if ! php --ri sodium > /dev/null; then
|
|
# install libsodium
|
|
sudo add-apt-repository ppa:ondrej/php -y
|
|
sudo apt-get update -q
|
|
sudo apt-get install libsodium-dev -y
|
|
tfold ext.libsodium tpecl libsodium sodium.so $INI
|
|
fi
|
|
|
|
tfold ext.apcu tpecl apcu-5.1.6 apcu.so $INI
|
|
tfold ext.mongodb tpecl mongodb-1.5.2 mongodb.so $INI
|
|
tfold ext.amqp tpecl amqp-1.9.3 amqp.so $INI
|
|
tfold ext.igbinary tpecl igbinary-2.0.6 igbinary.so $INI
|
|
tfold ext.zookeeper tpecl zookeeper-0.5.0 zookeeper.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 src/Symfony/Contracts
|
|
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 2 -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 config platform.ext-mongodb 1.5.2; 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
|