parameters: configurationName: '' configurationParameters: '' timeoutInMinutes: 60 # The purpose of the job is to test open-source community projects against an aggressive # debug build, that enables assertions, as well as the address and UB sanitizers. However, # we are only interested in finding assertion failures, segfaults and sanitizer violations, # and don't care about the actual test results, as there will commonly be failures for # pre-release versions of PHP. # # Because exit() in PHP results in an unclean shutdown, test runs are patching phpunit to # avoid the exit, which allows us to also check for memory leaks. Otherwise we use # USE_TRACKED_ALLOC=1 to avoid reporting of leaks that will be handled by ZMM. jobs: - job: ${{ parameters.configurationName }} timeoutInMinutes: ${{ parameters.timeoutInMinutes }} pool: vmImage: 'ubuntu-18.04' variables: ubsan_options: 'print_stacktrace=1' steps: - template: apt.yml - script: | # Compile a newer version of curl, otherwise there will be an asan warning # when running symfony tests. wget https://curl.haxx.se/download/curl-7.65.3.tar.gz tar xzf curl-7.65.3.tar.gz cd curl-7.65.3/ ./configure make -j2 sudo make install displayName: 'Build Curl' - template: configure.yml parameters: configurationParameters: ${{ parameters.configurationParameters }} - script: make -j$(/usr/bin/nproc) >/dev/null displayName: 'Make Build' - script: | sudo make install sudo mkdir /etc/php.d sudo chmod 777 /etc/php.d echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini echo pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/pdo_mysql.ini # Run with opcache to also catch optimizer bugs. echo zend_extension=opcache.so > /etc/php.d/opcache.ini echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini echo opcache.protect_memory=1 >> /etc/php.d/opcache.ini echo opcache.jit_buffer_size=1G >> /etc/php.d/opcache.ini displayName: 'Install Build' #- script: | # git clone https://github.com/laravel/framework.git --branch=master --depth=1 # cd framework # php7.3 /usr/bin/composer install --no-progress # export USE_ZEND_ALLOC=0 # sed -i 's/$exit = true/$exit = false/g' vendor/phpunit/phpunit/src/TextUI/Command.php # # Avoid test using exit(), which thus leaks. # # We can use USE_TRACKED_ALLOC=1 if more of these show up. # sed -i "s/function_exists('pcntl_fork')/false/" tests/Filesystem/FilesystemTest.php # # Work around PHP 8 incompatibility in Doctrine # sed -i 's/function query()/function query(...$args)/' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php # sed -i 's/function setFetchMode($fetchMode, $arg2 = null, $arg3 = null)/function setFetchMode($fetchMode, $arg2 = null, $arg3 = null, ...$args)/' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php # sed -i 's/public function getMessage();//' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php # php vendor/bin/phpunit # displayName: 'Test Laravel' - script: | git clone https://github.com/symfony/symfony.git --depth=1 cd symfony php7.3 /usr/bin/composer install --no-progress php7.3 ./phpunit install # Work around PHP 8 incompatibility in Doctrine sed -i 's/function query()/function query(...$args)/' vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php export USE_ZEND_ALLOC=0 export USE_TRACKED_ALLOC=1 export ASAN_OPTIONS=exitcode=139 export SYMFONY_DEPRECATIONS_HELPER=max[total]=999 X=0 for component in $(find src/Symfony -mindepth 2 -type f -name phpunit.xml.dist -printf '%h\n'); do php ./phpunit $component --exclude-group tty,benchmark,intl-data,transient; if [ $? -gt 128 ]; then X=1; fi done exit $X displayName: 'Test Symfony' condition: or(succeeded(), failed()) - script: | git clone https://github.com/amphp/amp.git --branch=master --depth=1 cd amp php /usr/bin/composer install --no-progress --ignore-platform-reqs export USE_ZEND_ALLOC=0 sed -i 's/$exit = true/$exit = false/g' vendor/phpunit/phpunit/src/TextUI/Command.php php vendor/bin/phpunit displayName: 'Test Amphp' condition: or(succeeded(), failed()) - script: | git clone https://github.com/sebastianbergmann/phpunit.git --branch=master --depth=1 cd phpunit export USE_ZEND_ALLOC=0 export USE_TRACKED_ALLOC=1 export ASAN_OPTIONS=exitcode=139 php7.3 /usr/bin/composer install --no-progress php ./phpunit if [ $? -gt 128 ]; then exit 1 fi displayName: 'Test PHPUnit' condition: or(succeeded(), failed())