This PR was merged into the 2.8 branch.
Discussion
----------
[travis][appveyor] use symfony/flex to accelerate builds
| 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 | -
Playing with https://github.com/symfony/flex/pull/409
The optimization is required because appveyor is transiently failing with OOM errors, see e.g.
https://ci.appveyor.com/project/fabpot/symfony/build/1.0.39377
Commits
-------
940ec8f2d5
[travis][appveyor] use symfony/flex to accelerate builds
247 lines
9.8 KiB
YAML
247 lines
9.8 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/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
|
||
~/.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="ðŸ<C3B0>˜ $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
|
||
|
||
- |
|
||
# Install symfony/flex
|
||
if [[ $deps = low ]]; then
|
||
export SYMFONY_REQUIRE='>=2.3'
|
||
else
|
||
export SYMFONY_REQUIRE=">=$SYMFONY_VERSION"
|
||
fi
|
||
composer global require 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
|
||
|
||
- |
|
||
# 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
|