Skip to content

Bump Symfony 8 to PHP >= 8.4 #60639

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/build-packages.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
$mergeBase = trim(shell_exec(sprintf('git merge-base "%s" HEAD', array_shift($dirs))));
$version = array_shift($dirs);

if ('8.0' === $version) {
$version = '7.4'; // to be removed once deps allow ^8.0
}

$packages = [];
$flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
$preferredInstall = json_decode(file_get_contents(__DIR__.'/composer-config.json'), true)['config']['preferred-install'];
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:

strategy:
matrix:
php: ['8.2']
php: ['8.4']
fail-fast: false

services:
Expand Down Expand Up @@ -228,6 +228,7 @@ jobs:
COMPOSER_HOME="$(composer config home)"
([ -d "$COMPOSER_HOME" ] || mkdir "$COMPOSER_HOME") && cp .github/composer-config.json "$COMPOSER_HOME/config.json"
export COMPOSER_ROOT_VERSION=$(grep ' VERSION = ' src/Symfony/Component/HttpKernel/Kernel.php | grep -P -o '[0-9]+\.[0-9]+').x-dev
export COMPOSER_ROOT_VERSION=7.4.x-dev # to be removed once deps allow ^8.0
echo COMPOSER_ROOT_VERSION=$COMPOSER_ROOT_VERSION >> $GITHUB_ENV

echo "::group::composer update"
Expand Down Expand Up @@ -269,7 +270,7 @@ jobs:
PGBOUNCER_HOST: localhost:6432

#- name: Run HTTP push tests
# if: matrix.php == '8.2'
# if: matrix.php == '8.4'
# run: |
# [ -d .phpunit ] && mv .phpunit .phpunit.bak
# wget -q https://github.com/symfony/binary-utils/releases/download/v0.1/vulcain_0.1.3_Linux_x86_64.tar.gz -O - | tar xz && mv vulcain /usr/local/bin
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/intl-data-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,14 @@ jobs:
coverage: "none"
extensions: "zip,intl-${{env.SYMFONY_ICU_VERSION}}"
ini-values: "memory_limit=-1"
php-version: "8.2"
php-version: "8.4"

- name: Install dependencies
run: |
COMPOSER_HOME="$(composer config home)"
([ -d "$COMPOSER_HOME" ] || mkdir "$COMPOSER_HOME") && cp .github/composer-config.json "$COMPOSER_HOME/config.json"
export COMPOSER_ROOT_VERSION=$(grep ' VERSION = ' src/Symfony/Component/HttpKernel/Kernel.php | grep -P -o '[0-9]+\.[0-9]+').x-dev
export COMPOSER_ROOT_VERSION=7.4.x-dev # to be removed once deps allow ^8.0
echo COMPOSER_ROOT_VERSION=$COMPOSER_ROOT_VERSION >> $GITHUB_ENV

echo "::group::composer update"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/phpunit-bridge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: shivammathur/setup-php@v2
with:
coverage: "none"
php-version: "7.2"
php-version: "8.1"

- name: Lint
run: find ./src/Symfony/Bridge/PhpUnit -name '*.php' | grep -v -e /Tests/ -e /Attribute/ -e /Extension/ -e /Metadata/ -e ForV7 -e ForV8 -e ForV9 -e ConstraintLogicTrait -e SymfonyExtension | parallel -j 4 php -l {}
3 changes: 2 additions & 1 deletion .github/workflows/psalm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-24.04

env:
php-version: '8.2'
php-version: '8.4'
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
Expand All @@ -42,6 +42,7 @@ jobs:
COMPOSER_HOME="$(composer config home)"
([ -d "$COMPOSER_HOME" ] || mkdir "$COMPOSER_HOME") && cp .github/composer-config.json "$COMPOSER_HOME/config.json"
export COMPOSER_ROOT_VERSION=$(grep ' VERSION = ' src/Symfony/Component/HttpKernel/Kernel.php | grep -P -o '[0-9]+\.[0-9]+').x-dev
export COMPOSER_ROOT_VERSION=7.4.x-dev # to be removed once deps allow ^8.0
composer remove --dev --no-update --no-interaction symfony/phpunit-bridge
composer require --no-progress --ansi --no-plugins psalm/phar:@stable phpunit/phpunit:^9.6 php-http/discovery psr/event-dispatcher mongodb/mongodb jetbrains/phpstorm-stubs

Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,10 @@ jobs:
strategy:
matrix:
include:
- php: '8.2'
- php: '8.2'
- php: '8.4'
mode: high-deps
- php: '8.2'
- php: '8.4'
mode: low-deps
- php: '8.3'
- php: '8.4'
# brotli and zstd extensions are optional, when not present the commands will be used instead,
# we must test both scenarios
Expand Down Expand Up @@ -142,6 +140,7 @@ jobs:

echo SYMFONY_VERSION=$SYMFONY_VERSION >> $GITHUB_ENV
echo COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev >> $GITHUB_ENV
echo COMPOSER_ROOT_VERSION=7.4.x-dev >> $GITHUB_ENV # to be removed once all deps allow ^8.0
echo SYMFONY_REQUIRE=">=$([ '${{ matrix.mode }}' = low-deps ] && echo 6.4 || echo $SYMFONY_VERSION)" >> $GITHUB_ENV
[[ "${{ matrix.mode }}" = *-deps ]] && mv composer.json.phpunit composer.json || true

Expand All @@ -156,19 +155,19 @@ jobs:
echo "::endgroup::"

- name: Patch return types
if: "matrix.php == '8.2' && ! matrix.mode"
if: "matrix.php == '8.4' && ! matrix.mode"
run: |
patch -sp1 < .github/expected-missing-return-types.diff
git add .
composer install -q --optimize-autoloader || composer install --optimize-autoloader
SYMFONY_PATCH_TYPE_DECLARATIONS='force=2&php=8.2' php .github/patch-types.php
SYMFONY_PATCH_TYPE_DECLARATIONS='force=2&php=8.4' php .github/patch-types.php
git checkout src/Symfony/Contracts/Service/ResetInterface.php
SYMFONY_PATCH_TYPE_DECLARATIONS='force=2&php=8.2' php .github/patch-types.php # ensure the script is idempotent
SYMFONY_PATCH_TYPE_DECLARATIONS='force=2&php=8.4' php .github/patch-types.php # ensure the script is idempotent
git checkout src/Symfony/Contracts/Service/ResetInterface.php
git diff --exit-code

- name: Check return types
if: "matrix.php == '8.2' && ! matrix.mode"
if: "matrix.php == '8.4' && ! matrix.mode"
run: |
php .github/patch-types.php lint

Expand Down Expand Up @@ -220,6 +219,7 @@ jobs:
SYMFONY_VERSION=$(echo $SYMFONY_VERSION | awk '{print $1 - 1}')
echo -e "\\n\\e[33;1mChecking out Symfony $SYMFONY_VERSION and running tests with patched components as deps\\e[0m"
export COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev
export COMPOSER_ROOT_VERSION=7.4.x-dev # to be removed once deps allow ^8.0
export SYMFONY_REQUIRE=">=$SYMFONY_VERSION"
git fetch --depth=2 origin $SYMFONY_VERSION
git checkout -m FETCH_HEAD
Expand All @@ -240,12 +240,12 @@ jobs:
script -e -c './phpunit --group tty' /dev/null

- name: Run tests with SIGCHLD enabled PHP
if: "matrix.php == '8.2' && ! matrix.mode"
if: "matrix.php == '8.4' && ! matrix.mode"
run: |
mkdir build
cd build
wget -q https://github.com/symfony/binary-utils/releases/download/v0.1/php-8.2.0-pcntl-sigchild.tar.bz2
tar -xjf php-8.2.0-pcntl-sigchild.tar.bz2
wget -q https://github.com/symfony/binary-utils/releases/download/v0.1/php-8.4.0-pcntl-sigchild.tar.bz2
tar -xjf php-8.4.0-pcntl-sigchild.tar.bz2
cd ..

mkdir -p /opt/php/lib
Expand Down
15 changes: 8 additions & 7 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,13 @@ jobs:
run: |
$env:Path = 'c:\php;' + $env:Path
mkdir c:\php && cd c:\php
iwr -outf php-8.2.0-Win32-vs16-x86.zip https://github.com/symfony/binary-utils/releases/download/v0.1/php-8.2.0-Win32-vs16-x86.zip
7z x php-8.2.0-Win32-vs16-x86.zip -y >nul
iwr -outf php.zip https://github.com/symfony/binary-utils/releases/download/v0.1/php-8.4.0-Win32-vs17-x86.zip
7z x php.zip -y >nul
cd ext
iwr -outf php_apcu-5.1.22-8.2-ts-vs16-x86.zip https://github.com/symfony/binary-utils/releases/download/v0.1/php_apcu-5.1.22-8.2-ts-vs16-x86.zip
7z x php_apcu-5.1.22-8.2-ts-vs16-x86.zip -y >nul
iwr -outf php_redis-6.0.0-dev-8.2-ts-vs16-x86.zip https://github.com/symfony/binary-utils/releases/download/v0.1/php_redis-6.0.0-dev-8.2-ts-vs16-x86.zip
7z x php_redis-6.0.0-dev-8.2-ts-vs16-x86.zip -y >nul
iwr -outf php_apcu.zip https://github.com/symfony/binary-utils/releases/download/v0.1/php_apcu-5.1.24-8.4-ts-vs17-x86.zip
7z x php_apcu.zip -y >nul
iwr -outf php_redis.zip https://github.com/symfony/binary-utils/releases/download/v0.1/php_redis-6.2.0-8.4-ts-vs17-x86.zip
7z x php_redis.zip -y >nul
cd ..
Copy php.ini-development php.ini-min
"memory_limit=-1" >> php.ini-min
Expand All @@ -66,7 +66,7 @@ jobs:
"opcache.enable_cli=1" >> php.ini-max
"extension=php_openssl.dll" >> php.ini-max
"extension=php_apcu.dll" >> php.ini-max
"extension=php_igbinary.dll" >> php.ini-max
#"extension=php_igbinary.dll" >> php.ini-max
"extension=php_redis.dll" >> php.ini-max
"apc.enable_cli=1" >> php.ini-max
"extension=php_intl.dll" >> php.ini-max
Expand All @@ -86,6 +86,7 @@ jobs:

$env:SYMFONY_VERSION=(Select-String -CaseSensitive -Pattern " VERSION =" -SimpleMatch -Path src/Symfony/Component/HttpKernel/Kernel.php | Select Line | Select-String -Pattern "([0-9][0-9]*\.[0-9])").Matches.Value
$env:COMPOSER_ROOT_VERSION=$env:SYMFONY_VERSION + ".x-dev"
$env:COMPOSER_ROOT_VERSION="7.4.x-dev" # to be removed once all deps allow ^8.0

php .github/build-packages.php HEAD^ $env:SYMFONY_VERSION src\Symfony\Bridge\PhpUnit
php composer.phar update --no-progress --ansi
Expand Down
17 changes: 8 additions & 9 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"symfony/translation-implementation": "2.3|3.0"
},
"require": {
"php": ">=8.2",
"php": ">=8.4",
"composer-runtime-api": ">=2.1",
"composer/semver": "^3.0",
"ext-xml": "*",
Expand All @@ -48,13 +48,12 @@
"psr/link": "^1.1|^2.0",
"psr/log": "^1|^2|^3",
"symfony/contracts": "^3.6",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-intl-grapheme": "^1.0",
"symfony/polyfill-intl-icu": "^1.0",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php83": "^1.28",
"symfony/polyfill-intl-normalizer": "^1.0",
"symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-uuid": "^1.15"
},
"replace": {
Expand Down Expand Up @@ -156,9 +155,9 @@
"seld/jsonlint": "^1.10",
"symfony/amphp-http-client-meta": "^1.0|^2.0",
"symfony/mercure-bundle": "^0.3",
"symfony/phpunit-bridge": "^6.4|^7.0|^8.0",
"symfony/phpunit-bridge": "^7.4|^8.0",
"symfony/runtime": "self.version",
"symfony/security-acl": "~2.8|~3.0",
"symfony/security-acl": "^2.8|^3.0",
"symfony/webpack-encore-bundle": "^1.0|^2.0",
"twig/cssinliner-extra": "^3",
"twig/inky-extra": "^3",
Expand Down
57 changes: 23 additions & 34 deletions src/Symfony/Bridge/Doctrine/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,55 +16,44 @@
}
],
"require": {
"php": ">=8.2",
"php": ">=8.4",
"doctrine/event-manager": "^2",
"doctrine/persistence": "^3.1|^4",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.0",
"symfony/service-contracts": "^2.5|^3"
},
"require-dev": {
"symfony/cache": "^6.4|^7.0|^8.0",
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/doctrine-messenger": "^6.4|^7.0|^8.0",
"symfony/expression-language": "^6.4|^7.0|^8.0",
"symfony/form": "^6.4.6|^7.0.6|^8.0",
"symfony/http-kernel": "^6.4|^7.0|^8.0",
"symfony/lock": "^6.4|^7.0|^8.0",
"symfony/messenger": "^6.4|^7.0|^8.0",
"symfony/property-access": "^6.4|^7.0|^8.0",
"symfony/property-info": "^6.4|^7.0|^8.0",
"symfony/security-core": "^6.4|^7.0|^8.0",
"symfony/stopwatch": "^6.4|^7.0|^8.0",
"symfony/translation": "^6.4|^7.0|^8.0",
"symfony/type-info": "^7.1|^8.0",
"symfony/uid": "^6.4|^7.0|^8.0",
"symfony/validator": "^6.4|^7.0|^8.0",
"symfony/var-dumper": "^6.4|^7.0|^8.0",
"doctrine/collections": "^1.8|^2.0",
"doctrine/data-fixtures": "^1.1|^2",
"doctrine/dbal": "^3.6|^4",
"doctrine/orm": "^2.15|^3",
"psr/log": "^1|^2|^3"
"psr/log": "^1|^2|^3",
"symfony/cache": "^7.4|^8.0",
"symfony/config": "^7.4|^8.0",
"symfony/dependency-injection": "^7.4|^8.0",
"symfony/doctrine-messenger": "^7.4|^8.0",
"symfony/expression-language": "^7.4|^8.0",
"symfony/form": "^7.4|^8.0",
"symfony/http-kernel": "^7.4|^8.0",
"symfony/lock": "^7.4|^8.0",
"symfony/messenger": "^7.4|^8.0",
"symfony/property-access": "^7.4|^8.0",
"symfony/property-info": "^7.4|^8.0",
"symfony/security-core": "^7.4|^8.0",
"symfony/stopwatch": "^7.4|^8.0",
"symfony/translation": "^7.4|^8.0",
"symfony/type-info": "^7.4|^8.0",
"symfony/uid": "^7.4|^8.0",
"symfony/validator": "^7.4|^8.0",
"symfony/var-dumper": "^7.4|^8.0"
},
"conflict": {
"doctrine/collections": "<1.8",
"doctrine/dbal": "<3.6",
"doctrine/lexer": "<1.1",
"doctrine/orm": "<2.15",
"symfony/cache": "<6.4",
"symfony/dependency-injection": "<6.4",
"symfony/form": "<6.4.6|>=7,<7.0.6",
"symfony/http-foundation": "<6.4",
"symfony/http-kernel": "<6.4",
"symfony/lock": "<6.4",
"symfony/messenger": "<6.4",
"symfony/property-info": "<6.4",
"symfony/security-bundle": "<6.4",
"symfony/security-core": "<6.4",
"symfony/validator": "<6.4"
"doctrine/orm": "<2.15"
},
"autoload": {
"psr-4": { "Symfony\\Bridge\\Doctrine\\": "" },
Expand Down
23 changes: 9 additions & 14 deletions src/Symfony/Bridge/Monolog/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,19 @@
}
],
"require": {
"php": ">=8.2",
"php": ">=8.4",
"monolog/monolog": "^3",
"symfony/service-contracts": "^2.5|^3",
"symfony/http-kernel": "^6.4|^7.0|^8.0"
"symfony/http-kernel": "^7.4|^8.0"
},
"require-dev": {
"symfony/console": "^6.4|^7.0|^8.0",
"symfony/http-client": "^6.4|^7.0|^8.0",
"symfony/security-core": "^6.4|^7.0|^8.0",
"symfony/var-dumper": "^6.4|^7.0|^8.0",
"symfony/mailer": "^6.4|^7.0|^8.0",
"symfony/mime": "^6.4|^7.0|^8.0",
"symfony/messenger": "^6.4|^7.0|^8.0"
},
"conflict": {
"symfony/console": "<6.4",
"symfony/http-foundation": "<6.4",
"symfony/security-core": "<6.4"
"symfony/console": "^7.4|^8.0",
"symfony/http-client": "^7.4|^8.0",
"symfony/security-core": "^7.4|^8.0",
"symfony/mailer": "^7.4|^8.0",
"symfony/messenger": "^7.4|^8.0",
"symfony/mime": "^7.4|^8.0",
"symfony/var-dumper": "^7.4|^8.0"
},
"autoload": {
"psr-4": { "Symfony\\Bridge\\Monolog\\": "" },
Expand Down
7 changes: 3 additions & 4 deletions src/Symfony/Bridge/PhpUnit/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,13 @@
}
],
"require": {
"php": ">=7.2.5 EVEN ON LATEST SYMFONY VERSIONS TO ALLOW USING",
"php": ">=8.1.0 EVEN ON LATEST SYMFONY VERSIONS TO ALLOW USING",
"php": "THIS BRIDGE WHEN TESTING LOWEST SYMFONY VERSIONS.",
"php": ">=7.2.5"
"php": ">=8.1.0"
},
"require-dev": {
"symfony/deprecation-contracts": "^2.5|^3.0",
"symfony/error-handler": "^6.4|^7.0|^8.0",
"symfony/polyfill-php81": "^1.27"
"symfony/error-handler": "^6.4.3|^7.0.3|^8.0"
},
"conflict": {
"phpunit/phpunit": "<7.5|9.1.2"
Expand Down
19 changes: 9 additions & 10 deletions src/Symfony/Bridge/PsrHttpMessage/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,22 @@
}
],
"require": {
"php": ">=8.2",
"php": ">=8.4",
"psr/http-message": "^1.0|^2.0",
"symfony/http-foundation": "^6.4|^7.0|^8.0"
"symfony/http-foundation": "^7.4|^8.0"
},
"require-dev": {
"symfony/browser-kit": "^6.4|^7.0|^8.0",
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/event-dispatcher": "^6.4|^7.0|^8.0",
"symfony/framework-bundle": "^6.4|^7.0|^8.0",
"symfony/http-kernel": "^6.4|^7.0|^8.0",
"nyholm/psr7": "^1.1",
"php-http/discovery": "^1.15",
"psr/log": "^1.1.4|^2|^3"
"psr/log": "^1.1.4|^2|^3",
"symfony/browser-kit": "^7.4|^8.0",
"symfony/config": "^7.4|^8.0",
"symfony/event-dispatcher": "^7.4|^8.0",
"symfony/framework-bundle": "^7.4|^8.0",
"symfony/http-kernel": "^7.4|^8.0"
},
"conflict": {
"php-http/discovery": "<1.15",
"symfony/http-kernel": "<6.4"
"php-http/discovery": "<1.15"
},
"config": {
"allow-plugins": {
Expand Down
Loading
Loading