Skip to content

Merge branch '1.x' into 2.x #908

Merge branch '1.x' into 2.x

Merge branch '1.x' into 2.x #908

Workflow file for this run

name: Test
on:
# Run on all pushes and on all pull requests.
push:
pull_request:
# Allow manually triggering the workflow.
workflow_dispatch:
# Cancels all previous workflow runs for the same branch that have not yet completed.
concurrency:
# The concurrency group contains the workflow name and the branch name.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
#### TEST STAGE ####
test:
runs-on: ubuntu-latest
strategy:
matrix:
php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
phpunit: ['auto']
coverage: [true]
experimental: [false]
include:
# Test against a version on the low-end of the PHPUnit versions supported for each PHP version.
# Using the Composer `--prefer-lowest` option is, unfortunately, not viable, as
# it would result PHP 5.6 - 7.4 all using PHPUnit 5.7.21, which is not the intention.
# It also would run into trouble with PHP 8.5.12 being used on PHP 8.0+, while the
# 8.5.12 release still contained a bug which makes it incompatible with PHP 8.1+,
# even though it officially allows for it..
- php: '5.6'
phpunit: '5.7.21'
coverage: true
experimental: false
- php: '7.0'
phpunit: '5.7.27'
coverage: true
experimental: false
- php: '7.1'
phpunit: '5.7.21'
coverage: true
experimental: false
- php: '7.2'
phpunit: '6.3.1'
coverage: true
experimental: false
- php: '7.3'
phpunit: '7.2.7'
coverage: true
experimental: false
- php: '7.4'
phpunit: '8.1.6'
coverage: true
experimental: false
- php: '7.4'
# Specifically set at 9.6.10 to test functioning on 9.x before the 9.6.11 assertObject*() backports came in.
phpunit: '9.6.10'
coverage: true
experimental: false
- php: '8.0'
phpunit: '8.5.16'
# PHPUnit 8.x does not support code coverage on PHP 8.x.
coverage: false
experimental: false
- php: '8.0'
phpunit: '9.3.0'
coverage: true
experimental: false
- php: '8.1'
phpunit: '9.3.0'
coverage: true
experimental: false
- php: '8.1'
# Specifically set at 10.0.12 minimum to prevent needing a toggle in the tests for something
# related to the ArrayIsList polyfill, but not necessarily relevant.
phpunit: '10.0.12'
coverage: true
experimental: false
- php: '8.2'
phpunit: '9.3.0'
coverage: true
experimental: false
- php: '8.3'
phpunit: '10.1.0'
coverage: true
experimental: false
# Experimental builds.
- php: 'nightly'
phpunit: '^9.6'
coverage: false
experimental: true
- php: 'nightly'
phpunit: 'auto' # PHPUnit 10.x.
coverage: false
experimental: true
name: "Tests: PHP ${{ matrix.php }} - PHPUnit: ${{matrix.phpunit}}"
continue-on-error: ${{ matrix.experimental }}
env:
EXTRA_PHPUNIT_CLIARGS: '--fail-on-deprecation --fail-on-notice'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
ini-values: zend.assertions=1, error_reporting=-1, display_errors=On
coverage: ${{ matrix.coverage == true && 'xdebug' || 'none' }}
# YoastCS 3.0 has a PHP 7.2 minimum which conflicts with the requirements of this package.
- name: 'Composer: remove YoastCS'
run: composer remove --dev yoast/yoastcs --no-update --no-interaction
- name: 'Composer: set PHPUnit version for tests'
if: ${{ matrix.phpunit != 'auto' }}
run: composer require --no-update phpunit/phpunit:"${{ matrix.phpunit }}" --no-interaction
# Install dependencies and handle caching in one go.
# @link https://github.com/marketplace/actions/install-php-dependencies-with-composer
- name: Install Composer dependencies - normal
if: matrix.php != 'nightly'
uses: "ramsey/composer-install@v3"
with:
# Bust the cache at least once a month - output format: YYYY-MM.
custom-cache-suffix: $(date -u "+%Y-%m")
- name: Install Composer dependencies - ignore PHP restrictions
if: matrix.php == 'nightly'
uses: "ramsey/composer-install@v3"
with:
composer-options: --ignore-platform-req=php+
# Bust the cache at least once a month - output format: YYYY-MM.
custom-cache-suffix: $(date -u "+%Y-%m")
- name: Grab PHPUnit version
id: phpunit_version
run: echo "VERSION=$(vendor/bin/phpunit --version | grep --only-matching --max-count=1 --extended-regexp '\b[0-9]+\.[0-9]+')" >> $GITHUB_OUTPUT
- name: "DEBUG: Show grabbed version"
run: echo ${{ steps.phpunit_version.outputs.VERSION }}
# NEEDS_MIGRATION toggle has two functions:
# 1. yes/no run PHPUnit "migrate-configuration" for PHPUnit 10.1+.
# 2. yes/no pass the "EXTRA_PHPUNIT_CLIARGS" on PHPUnit 10.1+ (which can't be added to the config as that would
# make the config incompatible with PHPUnit 10.0).
# The variable should only be set for the "yes" cases.
- name: Determine PHPUnit config
id: phpunit_config
run: |
if [ "${{ steps.phpunit_version.outputs.VERSION }}" == "10.0" ]; then
echo 'FILE=phpunit10.xml.dist' >> $GITHUB_OUTPUT
elif [ "${{ startsWith( steps.phpunit_version.outputs.VERSION, '10.' ) }}" == "true" ]; then
echo 'FILE=phpunit10.xml.dist' >> $GITHUB_OUTPUT
echo 'NEEDS_MIGRATION=true' >> $GITHUB_OUTPUT
else
echo 'FILE=phpunit.xml.dist' >> $GITHUB_OUTPUT
fi
# Migrate PHPUnit configuration to deal with changes in the coverage/source setting across PHPUnit 10.x
# versions as otherwise the warnings about these would fail the build (which to me, feels like a bug).
- name: "Migrate configuration (PHPUnit 10.1+)"
if: ${{ steps.phpunit_config.outputs.NEEDS_MIGRATION }}
continue-on-error: true
run: vendor/bin/phpunit -c ${{ steps.phpunit_config.outputs.FILE }} --migrate-configuration
- name: "Run the unit tests"
run: >
vendor/bin/phpunit -c ${{ steps.phpunit_config.outputs.FILE }}
${{ ! matrix.coverage && '--no-coverage' || '' }}
${{ steps.phpunit_config.outputs.NEEDS_MIGRATION && env.EXTRA_PHPUNIT_CLIARGS || '' }}
- name: Upload coverage results to Coveralls
if: ${{ success() && matrix.coverage == true }}
uses: coverallsapp/github-action@v2
with:
file: build/logs/clover.xml
format: clover
flag-name: php-${{ matrix.php }}-phpunit-${{ matrix.phpunit }}
parallel: true
test-phar:
runs-on: ubuntu-latest
strategy:
matrix:
include:
# Test against the high/low supported PHP-PHPUnit combinations.
#
# Code coverage is only run against the high/high PHP-PHPUnit combinations
# and very select other combinations.
# This should be sufficient to record the coverage for the PHAR specific code.
# PHPUnit 5 is only supported for PHPUnit 5.7.21-latest.
- php: '5.6'
phpunit: '5.7.21'
- php: '5.6'
phpunit: '5'
- php: '7.1'
phpunit: '5.7.21'
- php: '7.1'
phpunit: '5'
coverage: true
# PHPUnit 6 is fully supported for the officially supported PHP versions.
- php: '7.0'
phpunit: '6.0'
- php: '7.0'
phpunit: '6'
- php: '7.2'
phpunit: '6.0'
- php: '7.2'
phpunit: '6'
coverage: true
# PHPUnit 7 is fully supported for the officially supported PHP versions.
# Caveats:
# - PHPUnit 7.0 seems to have an issue with something related to TestListeners, so using PHPUnit 7.1 instead for "low".
# - PHPUnit 7 supports PHP 7.3 as of PHPUnit 7.3.0 (for our purposes).
- php: '7.1'
phpunit: '7.1'
- php: '7.1'
phpunit: '7'
- php: '7.3'
phpunit: '7.3'
- php: '7.3'
phpunit: '7'
coverage: true
# PHPUnit 8 is fully supported for the officially supported PHP versions.
# Caveats:
# - PHPUnit 8 supports PHP 8.0 as of PHPUnit 8.5.12 (for our purposes).
# - PHPUnit 8 supports PHP 8.1 as of PHPUnit 8.5.19 (for our purposes).
# - PHPUnit 8 supports PHP 8.2 as of PHPUnit 8.5.19 (for our purposes).
# - PHPUnit 8 supports PHP 8.3 as of PHPUnit 8.5.19 (for our purposes).
# - PHPUnit 8 does not support running code coverage on PHP 8.0 or higher.
- php: '7.2'
phpunit: '8.0'
coverage: true
- php: '7.2'
phpunit: '8'
- php: '7.4'
phpunit: '8'
coverage: true
- php: '8.0'
phpunit: '8.5.12'
- php: '8.3'
phpunit: '8.5.19'
- php: '8.3'
phpunit: '8'
# PHPUnit 9 is fully supported for the officially supported PHP versions.
# Caveats:
# - PHPUnit 9 supports PHP 8.0 as of PHPUnit 9.3.0 (for our purposes).
# - PHPUnit 9 supports PHP 8.1 as of PHPUnit 9.5.8 (for our purposes).
# - PHPUnit 9 supports PHP 8.2 as of PHPUnit 9.5.8 (for our purposes).
# - PHPUnit 9 supports PHP 8.3 as of PHPUnit 9.5.8 (for our purposes).
- php: '7.3'
phpunit: '9.0'
coverage: true
- php: '7.3'
phpunit: '9'
- php: '8.0'
phpunit: '9.3.0'
- php: '8.0'
phpunit: '9'
- php: '8.1'
phpunit: '9.5.8'
- php: '8.1'
phpunit: '9'
- php: '8.2'
phpunit: '9.5.8'
- php: '8.2'
phpunit: '9'
- php: '8.3'
phpunit: '9.5.8'
- php: '8.3'
phpunit: '9'
coverage: true
# PHPUnit 10 is fully supported for the officially supported PHP versions.
- php: '8.1'
phpunit: '10.0'
coverage: true
- php: '8.1'
phpunit: '10'
- php: '8.2'
phpunit: '10.0'
- php: '8.2'
phpunit: '10'
- php: '8.3'
phpunit: '10.0'
- php: '8.3'
phpunit: '10'
coverage: true
# Experimental builds.
- php: 'nightly'
phpunit: '9'
- php: 'nightly'
phpunit: '10'
name: "PHAR test: PHP ${{ matrix.php }} - PHPUnit: ${{matrix.phpunit}}"
continue-on-error: ${{ matrix.php == 'nightly' }}
env:
EXTRA_PHPUNIT_CLIARGS: '--fail-on-deprecation --fail-on-notice'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
ini-values: zend.assertions=1, error_reporting=-1, display_errors=On
tools: phpunit:${{ matrix.phpunit }}
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
env:
fail-fast: true
# YoastCS 3.0 has a PHP 7.2 minimum which conflicts with the requirements of this package.
- name: 'Composer: remove YoastCS'
run: composer remove --dev yoast/yoastcs --no-update --no-interaction
# Remove PHPUnit from the Composer install as we want to be sure the PHAR file is used.
- name: 'Composer: remove PHPUnit'
run: composer remove phpunit/phpunit --no-update --no-interaction
# Install dependencies and handle caching in one go.
# @link https://github.com/marketplace/actions/install-php-dependencies-with-composer
- name: Install Composer dependencies - normal
if: matrix.php != 'nightly'
uses: "ramsey/composer-install@v3"
with:
composer-options: "--no-dev"
# Bust the cache at least once a month - output format: YYYY-MM.
custom-cache-suffix: $(date -u "+%Y-%m")
- name: Install Composer dependencies - ignore PHP restrictions
if: matrix.php == 'nightly'
uses: "ramsey/composer-install@v3"
with:
composer-options: "--no-dev --ignore-platform-req=php+"
# Bust the cache at least once a month - output format: YYYY-MM.
custom-cache-suffix: $(date -u "+%Y-%m")
- name: Grab PHPUnit version
id: phpunit_version
run: echo "VERSION=$(phpunit --version | grep --only-matching --max-count=1 --extended-regexp '\b[0-9]+\.[0-9]+')" >> $GITHUB_OUTPUT
- name: "DEBUG: Show grabbed version"
run: echo ${{ steps.phpunit_version.outputs.VERSION }}
# NEEDS_MIGRATION toggle has two functions:
# 1. yes/no run PHPUnit "migrate-configuration" for PHPUnit 10.1+.
# 2. yes/no pass the "EXTRA_PHPUNIT_CLIARGS" on PHPUnit 10.1+ (which can't be added to the config as that would
# make the config incompatible with PHPUnit 10.0).
# The variable should only be set for the "yes" cases.
- name: Determine PHPUnit config
id: phpunit_config
run: |
if [ "${{ steps.phpunit_version.outputs.VERSION }}" == "10.0" ]; then
echo 'FILE=phpunit10.xml.dist' >> $GITHUB_OUTPUT
elif [ "${{ startsWith( steps.phpunit_version.outputs.VERSION, '10.' ) }}" == "true" ]; then
echo 'FILE=phpunit10.xml.dist' >> $GITHUB_OUTPUT
echo 'NEEDS_MIGRATION=true' >> $GITHUB_OUTPUT
else
echo 'FILE=phpunit.xml.dist' >> $GITHUB_OUTPUT
fi
# Migrate PHPUnit configuration to deal with changes in the coverage/source setting across PHPUnit 10.x
# versions as otherwise the warnings about these would fail the build (which to me, feels like a bug).
- name: "Migrate configuration (PHPUnit 10.1+)"
if: ${{ steps.phpunit_config.outputs.NEEDS_MIGRATION }}
continue-on-error: true
run: phpunit -c ${{ steps.phpunit_config.outputs.FILE }} --migrate-configuration
- name: "Run the unit tests"
run: >
phpunit -c ${{ steps.phpunit_config.outputs.FILE }}
${{ ! matrix.coverage && '--no-coverage' || '' }}
${{ steps.phpunit_config.outputs.NEEDS_MIGRATION && env.EXTRA_PHPUNIT_CLIARGS || '' }}
- name: Upload coverage results to Coveralls
if: ${{ success() && matrix.coverage }}
uses: coverallsapp/github-action@v2
with:
file: build/logs/clover.xml
format: clover
flag-name: php-${{ matrix.php }}-phpunit-phar-${{ matrix.phpunit }}
parallel: true
coveralls-finish:
needs: [test, test-phar]
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@v2
with:
parallel-finished: true