This PR was merged into the 2.8 branch.
Discussion
----------
[travis] cache composer.lock files for deps=low
| Q | A
| ------------- | ---
| Branch? | 2.8
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | -
| License | MIT
| Doc PR | -
I just realized that the resolved package versions for lowest deps depends only on the root composer.json, and not on transitive deps.
This means we can cache the lock files and save ~10 minutes required to resolve the lowest deps of the SecurityBundle.
Commits
-------
caaa74cd9b
[travis] cache composer.lock files for deps=low
238 lines
9.5 KiB
YAML
238 lines
9.5 KiB
YAML
language: php
|
|
|
|
dist: trusty
|
|
sudo: false
|
|
|
|
git:
|
|
depth: 1
|
|
|
|
addons:
|
|
apt_packages:
|
|
- parallel
|
|
- language-pack-fr-base
|
|
|
|
env:
|
|
global:
|
|
- MIN_PHP=5.4.9
|
|
- SYMFONY_PROCESS_PHP_TEST_BINARY=~/.phpenv/versions/5.6/bin/php
|
|
|
|
matrix:
|
|
include:
|
|
- php: hhvm-3.18
|
|
sudo: required
|
|
group: edge
|
|
- php: 5.4
|
|
env: php_extra="5.5 5.6 7.0"
|
|
- php: 7.1
|
|
env: deps=high
|
|
- php: 7.2
|
|
env: deps=low
|
|
fast_finish: true
|
|
|
|
cache:
|
|
directories:
|
|
- .phpunit
|
|
- php-$MIN_PHP
|
|
- ~/php-ext
|
|
|
|
services: mongodb
|
|
|
|
before_install:
|
|
- |
|
|
# General configuration
|
|
set -e
|
|
stty cols 120
|
|
[ -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
|
|
|
|
if [[ $TRAVIS_PHP_VERSION = 5.* || $TRAVIS_PHP_VERSION = hhvm* ]]; then
|
|
composer () {
|
|
$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
|
|
~/.phpenv/versions/7.1/bin/composer self-update
|
|
fi
|
|
|
|
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://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
|
|
if [[ $PHP = hhvm* ]]; then
|
|
INI=/etc/hhvm/php.ini
|
|
else
|
|
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
|
|
fi
|
|
echo date.timezone = Europe/Paris >> $INI
|
|
echo memory_limit = -1 >> $INI
|
|
echo session.gc_probability = 0 >> $INI
|
|
echo opcache.enable_cli = 1 >> $INI
|
|
echo hhvm.jit = 0 >> $INI
|
|
echo apc.enable_cli = 1 >> $INI
|
|
[[ $PHP = 5.* ]] && echo extension = memcache.so >> $INI
|
|
if [[ $PHP = 5.* ]]; then
|
|
echo extension = mongo.so >> $INI
|
|
fi
|
|
done
|
|
|
|
- |
|
|
# Install extra PHP extensions
|
|
for PHP in $TRAVIS_PHP_VERSION $php_extra; do
|
|
if [[ $PHP = hhvm* ]]; then
|
|
continue
|
|
fi
|
|
export PHP=$PHP
|
|
phpenv global $PHP
|
|
INI=~/.phpenv/versions/$PHP/etc/conf.d/travis.ini
|
|
if [[ $PHP = 5.* ]]; then
|
|
tfold ext.memcached tpecl memcached-2.1.0 memcached.so $INI
|
|
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
|
|
tfold ext.apcu tpecl apcu-5.1.6 apcu.so $INI
|
|
tfold ext.mongodb tpecl mongodb-1.5.0 mongodb.so $INI
|
|
fi
|
|
done
|
|
|
|
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
|
|
|
|
- |
|
|
# 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
|
|
|
|
- |
|
|
# phpinfo
|
|
if [[ ! $TRAVIS_PHP_VERSION = hhvm* ]]; then php -i; else hhvm --php -r 'print_r($_SERVER);print_r(ini_get_all());'; fi
|
|
|
|
- |
|
|
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/hhvm*/hhvm}
|
|
if [[ $PHP = 7.* ]]; then
|
|
([[ $deps ]] && cd src/Symfony/Component/HttpFoundation; composer config platform.ext-mongodb 1.5.0; composer require --dev --no-update mongodb/mongodb)
|
|
fi
|
|
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
|
|
elif [[ $PHP = hhvm* ]]; then
|
|
$PHPUNIT --exclude-group no-hhvm,benchmark,intl-data
|
|
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
|
|
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/phpunit --colors=always src/Symfony/Component/Process/"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
script:
|
|
- for PHP in $TRAVIS_PHP_VERSION $php_extra; do (run_tests $PHP); done
|