This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/.travis.yml

323 lines
13 KiB
YAML
Raw Normal View History

2011-11-10 03:27:56 +00:00
language: php
dist: xenial
git:
2018-09-03 13:29:28 +01:00
depth: 2
addons:
2015-08-18 15:04:52 +01:00
apt_packages:
- parallel
- language-pack-fr-base
- ldap-utils
- slapd
2018-12-20 21:16:23 +00:00
- libsasl2-dev
env:
global:
- MIN_PHP=5.5.9
- SYMFONY_PROCESS_PHP_TEST_BINARY=~/.phpenv/versions/5.6/bin/php
2019-08-02 18:02:27 +01:00
- SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1
2019-08-10 19:54:30 +01:00
- SYMFONY_PHPUNIT_DISABLE_RESULT_CACHE=1
2015-10-13 09:49:36 +01:00
2013-12-14 12:00:39 +00:00
matrix:
include:
- php: 5.5
2019-08-21 19:56:01 +01:00
env: php_extra="5.6 7.0 7.1 7.2"
dist: trusty
2018-12-20 21:16:23 +00:00
- php: 7.3
2019-08-21 19:56:01 +01:00
env: deps=high
- php: 7.4
env: deps=low
2020-05-22 21:42:37 +01:00
- php: nightly
services: [memcached]
fast_finish: true
allow_failures:
- php: nightly
services: [memcached]
cache:
directories:
- .phpunit
- php-$MIN_PHP
2018-02-22 12:59:51 +00:00
- ~/php-ext
2016-01-19 13:27:46 +00:00
services:
- memcached
2016-01-19 13:27:46 +00:00
- mongodb
- redis-server
2018-08-23 22:19:02 +01:00
- docker
before_install:
2018-12-20 21:16:23 +00:00
- |
# Enable Sury ppa
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6B05F25D762E3157
sudo add-apt-repository -y ppa:ondrej/php
2019-04-12 13:53:42 +01:00
sudo rm /etc/apt/sources.list.d/google-chrome.list
sudo rm /etc/apt/sources.list.d/mongodb-3.4.list
2018-12-20 21:16:23 +00:00
sudo apt update
2018-08-23 22:19:02 +01:00
- |
# Start Redis cluster
2020-05-22 21:42:37 +01:00
if [[ $TRAVIS_PHP_VERSION != nightly ]]; then
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'
fi
2018-08-23 22:19:02 +01:00
2017-04-18 16:01:04 +01:00
- |
# General configuration
set -e
2017-04-18 16:01:04 +01:00
stty cols 120
mkdir /tmp/slapd
slapd -f src/Symfony/Component/Ldap/Tests/Fixtures/conf/slapd.conf -h ldap://localhost:3389 &
2017-04-18 16:01:04 +01:00
[ -d ~/.composer ] || mkdir ~/.composer
cp .github/composer-config.json ~/.composer/config.json
2017-04-18 16:01:04 +01:00
export PHPUNIT=$(readlink -f ./phpunit)
export PHPUNIT_X="$PHPUNIT --exclude-group tty,benchmark,intl-data"
export COMPOSER_UP='composer update --no-progress --ansi'
export COMPONENTS=$(find src/Symfony -mindepth 2 -type f -name phpunit.xml.dist -printf '%h\n' | sort)
find ~/.phpenv -name xdebug.ini -delete
2020-07-08 15:52:52 +01:00
if [[ $TRAVIS_PHP_VERSION = 5.* ]]; then
composer () {
$HOME/.phpenv/versions/7.1/bin/php $HOME/.phpenv/versions/7.1/bin/composer config platform.php $(echo ' <?php echo preg_replace("/-.*/", "", PHP_VERSION);' | php /dev/stdin)
$HOME/.phpenv/versions/7.1/bin/php $HOME/.phpenv/versions/7.1/bin/composer $*
}
export -f composer
fi
2017-04-18 16:01:04 +01:00
nanoseconds () {
2017-08-24 09:32:12 +01:00
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
2017-04-18 16:01:04 +01:00
# tfold is a helper to create folded reports
tfold () {
local title="🐘 $PHP $1 $FLIP"
2017-08-24 09:32:12 +01:00
local fold=$(echo $title | sed -r 's/[^-_A-Za-z0-9]+/./g')
2017-04-18 16:01:04 +01:00
shift
2017-08-24 09:32:12 +01:00
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) &&
2017-04-18 16:01:04 +01:00
echo -e "\\e[32mOK\\e[0m $title\\n\\ntravis_fold:end:$fold" ||
2017-08-24 09:32:12 +01:00
echo -e "\\e[41mKO\\e[0m $title\\n"
(exit $ok)
2017-04-18 16:01:04 +01:00
}
export -f tfold
2018-02-04 09:26:21 +00:00
# tpecl is a helper to compile and cache php extensions
tpecl () {
local ext_name=$1
local ext_so=$2
2018-02-22 12:51:03 +00:00
local INI=$3
2018-02-04 09:26:21 +00:00
local ext_dir=$(php -r "echo ini_get('extension_dir');")
2018-02-22 12:59:51 +00:00
local ext_cache=~/php-ext/$(basename $ext_dir)/$ext_name
2018-02-04 09:26:21 +00:00
if [[ -e $ext_cache/$ext_so ]]; then
echo extension = $ext_cache/$ext_so >> $INI
else
rm ~/.pearrc /tmp/pear 2>/dev/null || true
2018-02-04 09:26:21 +00:00
mkdir -p $ext_cache
echo yes | pecl install -f $ext_name &&
cp $ext_dir/$ext_so $ext_cache
fi
}
export -f tpecl
2017-04-18 16:01:04 +01:00
- |
# 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
2017-04-18 16:01:04 +01:00
wget http://museum.php.net/php5/php-$MIN_PHP.tar.bz2 -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
2020-07-08 15:52:52 +01:00
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
if [[ $PHP = 5.* ]]; then
2020-05-22 21:42:37 +01:00
echo extension = redis.so >> $INI
echo extension = memcached.so >> $INI
echo extension = memcache.so >> $INI
echo extension = mongo.so >> $INI
2020-05-22 21:42:37 +01:00
elif [[ $PHP = 7.* ]]; then
echo extension = redis.so >> $INI
echo extension = memcached.so >> $INI
fi
done
2017-04-18 16:01:04 +01:00
- |
# Install extra PHP extensions
for PHP in $TRAVIS_PHP_VERSION $php_extra; do
2019-09-23 14:08:55 +01:00
export PHP=$PHP
phpenv global $PHP
INI=~/.phpenv/versions/$PHP/etc/conf.d/travis.ini
if [[ $PHP = 5.* ]]; then
tfold ext.apcu tpecl apcu-4.0.11 apcu.so $INI
[[ $deps ]] && continue
ext_cache=~/php-ext/$(php -r "echo basename(ini_get('extension_dir'));")/symfony_debug.so
[[ -e $ext_cache ]] || (tfold ext.symfony_debug "cd src/Symfony/Component/Debug/Resources/ext && phpize && ./configure && make && mv modules/symfony_debug.so $ext_cache && phpize --clean")
echo extension = $ext_cache >> $INI
elif [[ $PHP = 7.* ]]; then
2020-10-17 11:36:42 +01:00
tfold ext.apcu tpecl apcu-5.1.19 apcu.so $INI
2020-01-23 10:22:20 +00:00
tfold ext.mongodb tpecl mongodb-1.6.0 mongodb.so $INI
2020-05-22 21:42:37 +01:00
elif [[ $PHP = nightly ]]; then
tfold ext.memcached tpecl memcached-3.1.5 memcached.so $INI
2020-10-17 11:36:42 +01:00
tfold ext.apcu tpecl apcu-5.1.19 apcu.so $INI
fi
done
2013-09-12 22:41:34 +01:00
- |
# 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
2013-09-12 22:41:34 +01:00
install:
2019-08-02 15:07:32 +01:00
- |
# Install the phpunit-bridge from a PR if required
#
2019-09-20 22:40:23 +01:00
# To run a PR with a patched phpunit-bridge, first submit the patch for the
2019-08-02 15:07:32 +01:00
# phpunit-bridge as a separate PR against the next feature-branch then
# uncomment and update the following line with that PR number
#SYMFONY_PHPUNIT_BRIDGE_PR=32886
if [[ $SYMFONY_PHPUNIT_BRIDGE_PR ]]; then
git fetch --depth=2 origin refs/pull/$SYMFONY_PHPUNIT_BRIDGE_PR/head
2019-08-02 15:07:32 +01:00
git rm -rq src/Symfony/Bridge/PhpUnit
git checkout -q FETCH_HEAD -- src/Symfony/Bridge/PhpUnit
export SYMFONY_VERSION=$(curl -s https://api.github.com/repos/symfony/symfony/pulls/$SYMFONY_PHPUNIT_BRIDGE_PR | jq -r .base.ref)
2019-08-02 15:07:32 +01:00
sed -i 's/"symfony\/phpunit-bridge": ".*"/"symfony\/phpunit-bridge": "'$SYMFONY_VERSION'.x@dev"/' composer.json
2019-08-05 09:06:54 +01:00
rm -rf .phpunit
2019-08-02 15:07:32 +01:00
fi
2017-04-18 16:01:04 +01:00
- |
# Create local composer packages for each patched components and reference them in composer.json files when cross-testing components
2019-10-15 08:35:54 +01:00
git config --global user.email ""
git config --global user.name "Symfony"
export SYMFONY_VERSION=$(grep branch-version composer.json | grep -o '[0-9.]*')
2017-04-18 16:01:04 +01:00
if [[ ! $deps ]]; then
php .github/build-packages.php HEAD^ $SYMFONY_VERSION src/Symfony/Bridge/PhpUnit
else
2017-04-18 16:01:04 +01:00
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^ $SYMFONY_VERSION $(find src/Symfony -mindepth 2 -type f -name composer.json -printf '%h\n' | sort) &&
2017-04-18 16:01:04 +01:00
mv composer.json composer.json.phpunit &&
mv composer.json.orig composer.json
fi
2019-08-02 15:07:32 +01:00
if [[ $SYMFONY_PHPUNIT_BRIDGE_PR ]]; then
git rm -fq -- src/Symfony/Bridge/PhpUnit/composer.json
git diff --staged -- src/Symfony/Bridge/PhpUnit/ | git apply -R --index
fi
2017-04-18 16:01:04 +01:00
- |
# For the feature-branch, when deps=high, the version before it is checked out and tested with the locally patched components
if [[ $deps = high && $TRAVIS_BRANCH = *.x ]]; then
export FLIP='🙃'
export SYMFONY_VERSION=$(git ls-remote -q --heads | grep -o '/[1-9]\.[0-9].*' | tail -n 1 | sed s/.//) &&
git fetch --depth=2 origin $SYMFONY_VERSION &&
2017-04-18 16:01:04 +01:00
git checkout -m FETCH_HEAD &&
export COMPONENTS=$(find src/Symfony -mindepth 2 -type f -name phpunit.xml.dist -printf '%h\n' | sort)
2017-04-18 16:01:04 +01:00
fi
- |
# Skip the phpunit-bridge on bugfix-branches when $deps is empty
if [[ ! $deps && ! $TRAVIS_BRANCH = *.x ]]; then
export COMPONENTS=$(find src/Symfony -mindepth 2 -type f -name phpunit.xml.dist -not -wholename '*/Bridge/PhpUnit/*' -printf '%h\n' | sort)
fi
2020-05-22 21:42:37 +01:00
- |
# Set composer's platform to php 7.4 if we're on php 8.
if [[ $PHP = nightly ]]; then
2020-05-23 13:14:15 +01:00
composer config platform.php 7.4.99
export SYMFONY_DEPRECATIONS_HELPER=max[total]=999
2020-05-22 21:42:37 +01:00
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
2017-04-18 16:01:04 +01:00
- |
2019-07-24 19:15:30 +01:00
# Legacy tests are skipped when deps=high and when the current branch version has not the same major version number as the next one
[[ $deps = high && ${SYMFONY_VERSION%.*} != $(git ls-remote -q --heads | cut -f2 | grep -FA1 /$SYMFONY_VERSION | tail -n 1 | grep -o '[0-9]*') ]] && export LEGACY=,legacy
2017-04-18 16:01:04 +01:00
export COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev
if [[ $deps ]]; then mv composer.json.phpunit composer.json; fi
2017-05-18 13:41:01 +01:00
2017-04-18 16:01:04 +01:00
- |
# phpinfo
2020-07-08 15:52:52 +01:00
php -i
2017-04-18 16:01:04 +01:00
- |
run_tests () {
set -e
2019-09-23 14:08:55 +01:00
export PHP=$1
if [[ $PHP != $TRAVIS_PHP_VERSION && $TRAVIS_PULL_REQUEST != false ]]; then
echo -e "\\n\\e[33;1mIntermediate PHP version $PHP is skipped for pull requests.\\e[0m"
2019-09-23 08:36:04 +01:00
return
fi
phpenv global ${PHP/hhvm*/hhvm}
rm vendor/composer/package-versions-deprecated -Rf
if [[ $PHP = 7.* ]]; then
2020-01-23 10:22:20 +00:00
([[ $deps ]] && cd src/Symfony/Component/HttpFoundation; composer config platform.ext-mongodb 1.6.0; composer require --dev --no-update mongodb/mongodb ~1.5.0)
fi
tfold 'composer update' $COMPOSER_UP
2020-07-08 15:52:52 +01:00
if [[ $TRAVIS_PHP_VERSION = 5.* ]]; then
tfold 'phpunit install' 'composer global remove symfony/flex && ./phpunit install && composer global require --no-progress --no-scripts --no-plugins symfony/flex'
else
tfold 'phpunit install' ./phpunit install
fi
if [[ $deps = high ]]; then
echo "$COMPONENTS" | parallel --gnu "tfold {} 'cd {} && $COMPOSER_UP && $PHPUNIT_X$LEGACY'"
2017-04-18 16:01:04 +01:00
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 "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
2017-04-18 16:01:04 +01:00
else
echo "$COMPONENTS" | parallel --gnu "tfold {} $PHPUNIT_X {}"
tfold src/Symfony/Component/Console.tty $PHPUNIT src/Symfony/Component/Console --group tty
2017-04-18 16:01:04 +01:00
if [[ $PHP = ${MIN_PHP%.*} ]]; then
2019-09-23 14:08:55 +01:00
export PHP=$MIN_PHP
echo -e "1\\n0" | xargs -I{} bash -c "tfold src/Symfony/Component/Process.sigchild{} SYMFONY_DEPRECATIONS_HELPER=weak ENHANCE_SIGCHLD={} php-$MIN_PHP/sapi/cli/php .phpunit/phpunit-4.8-1/phpunit --colors=always src/Symfony/Component/Process/"
2017-04-18 16:01:04 +01:00
fi
fi
}
2019-09-23 08:36:04 +01:00
export -f run_tests
2013-09-12 22:41:34 +01:00
script:
2019-09-23 08:36:04 +01:00
echo $TRAVIS_PHP_VERSION $php_extra | xargs -n1 bash -c '(</dev/tty run_tests $0)' || false