Drupal 11 compatibility

Created on 15 May 2024, 7 months ago

Problem/Motivation

Drupal 11.0.0 will be released soon. We should make this module Drupal 11 compatible. Note that this issue does not and should not cover PHP/Symfony compatibility for the underlying library that this connects to, simplesamlphp.

Based on my static analysis performed on 2024-05-15, it looks like the majority of code changes are located in testing syntax. It looks like this module still needs to convert from DrupalCI to GitLab CI, so that should be a prerequisite to this issue, so that automated testing can be run against Drupal 11 on a merge request for this issue.

My static code analysis audit follows.

Remaining tasks

  • [ ] Deprecated Drupal code is remediated
  • [ ] Deprecated PHP code is remediated
  • [ ] Custom code is compatible with jQuery 4
  • [ ] Custom code coreversionrequirement indicates Drupal 11 compatibility

References

Composer

  • [ ] This module has a composer.json file. We should manually review it for Drupal 11 compatibility, such as external requirements, core version constraints, and PHP version constraints

PHPStan Audit of Drupal deprecations

 ------ ------------------------------------------------------------------------- 
  Line   src/Form/LocalSettingsForm.php                                           
 ------ ------------------------------------------------------------------------- 
  53     Call to deprecated function user_role_names():                           
         in drupal:10.2.0 and is removed from drupal:11.0.0. Use                  
           \Drupal\user\Entity\Role::loadMultiple() and, if necessary, an inline  
           implementation instead.                                                
 ------ ------------------------------------------------------------------------- 

 ------ ----------------------------------------------------------- 
  Line   src/Service/SimplesamlphpDrupalAuth.php                    
 ------ ----------------------------------------------------------- 
  221    Call to deprecated function watchdog_exception():          
         in drupal:10.1.0 and is removed from drupal:11.0.0. Use    
           Use \Drupal\Core\Utility\Error::logException() instead.  
 ------ ----------------------------------------------------------- 

 [ERROR] Found 2 errors                                                                                                 

Drupal-Rector Audit of Drupal deprecations

4 files with changes
====================

1) web/modules/contrib/simplesamlphp_auth/tests/src/Unit/Service/SimplesamlphpAuthManagerTest.php:28

    ---------- begin diff ----------
@@ @@
   /**
    * A mocked config factory instance.
    *
-   * @var \Drupal\Core\Config\ConfigFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Config\ConfigFactoryInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $configFactory;

@@ @@
   /**
    * A mocked SimpleSAML configuration instance.
    *
-   * @var \SimpleSAML\Configuration|\PHPUnit_Framework_MockObject_MockObject
+   * @var \SimpleSAML\Configuration|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $simplesamlConfig;

@@ @@
   /**
    * A mocked SimpleSAML instance.
    *
-   * @var \SimpleSAML\Auth\Simple|\PHPUnit_Framework_MockObject_MockObject
+   * @var \SimpleSAML\Auth\Simple|\PHPUnit\Framework\MockObject\MockObject
    */
   public $instance;

@@ @@
   /**
    * A mocked current user.
    *
-   * @var \Drupal\Core\Session\AccountInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Session\AccountInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $currentUser;

@@ @@
   /**
    * A mocked AdminContext.
    *
-   * @var \Drupal\Core\Routing\AdminContext|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Routing\AdminContext|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $adminContext;

@@ @@
   /**
    * A mocked ModuleHandlerInterface.
    *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $moduleHandler;

@@ @@
   /**
    * A mocked RequestStack.
    *
-   * @var \Symfony\Component\HttpFoundation\RequestStack|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Symfony\Component\HttpFoundation\RequestStack|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $requestStack;

@@ @@
   /**
    * A mocked messenger.
    *
-   * @var \Drupal\Core\Messenger\MessengerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Messenger\MessengerInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $messenger;

@@ @@
       ->disableOriginalConstructor()
       ->getMock();

-    $this->currentUser = $this->getMockBuilder(AccountInterface::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->currentUser = $this->createMock(AccountInterface::class);

-    $this->adminContext = $this->getMockBuilder(AdminContext::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->adminContext = $this->createMock(AdminContext::class);

-    $this->moduleHandler = $this->getMockBuilder(ModuleHandlerInterface::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->moduleHandler = $this->createMock(ModuleHandlerInterface::class);

     $this->moduleHandler->expects($this->any())
       ->method('invokeAll')
@@ @@
       ->with($this->equalTo('simplesamlphp_auth_allow_login'))
       ->will($this->returnValue([]));

-    $this->requestStack = $this->getMockBuilder(RequestStack::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->requestStack = $this->createMock(RequestStack::class);

-    $this->messenger = $this->getMockBuilder(MessengerInterface::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->messenger = $this->createMock(MessengerInterface::class);

     $this->simplesamlConfig = $this->getMockBuilder(Configuration::class)
       ->setMethods(['getValue'])
@@ @@
       ->getMock();

     $container = new ContainerBuilder();
-    $request = $this->getMockBuilder(Request::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $request = $this->createMock(Request::class);

     $this->requestStack->expects($this->any())
       ->method('getCurrentRequest')
    ----------- end diff -----------

Applied rules:
 * ProtectedStaticModulesPropertyRector (https://www.drupal.org/node/2909426)
 * GetMockBuilderGetMockToCreateMockRector (https://github.com/lmc-eu/steward/pull/187/files#diff-c7e8c65e59b8b4ff8b54325814d4ba55L80)
 * RenameClassRector


2) web/modules/contrib/simplesamlphp_auth/tests/src/Unit/Service/SimplesamlphpDrupalAuthTest.php:20

    ---------- begin diff ----------
@@ @@
   /**
    * The mocked SimpleSAMLphp Authentication helper.
    *
-   * @var \Drupal\simplesamlphp_auth\Service\SimplesamlphpAuthManager|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\simplesamlphp_auth\Service\SimplesamlphpAuthManager|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $simplesaml;

@@ @@
   /**
    * The mocked entity type manager.
    *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $entityTypeManager;

@@ @@
   /**
    * The mocked logger instance.
    *
-   * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Psr\Log\LoggerInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $logger;

@@ @@
   /**
    * The mocked config factory instance.
    *
-   * @var \Drupal\Core\Config\ConfigFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Config\ConfigFactoryInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $configFactory;

@@ @@
   /**
    * A mocked messenger.
    *
-   * @var \Drupal\Core\Messenger\MessengerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Messenger\MessengerInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $messenger;

@@ @@
   /**
    * A mocked ModuleHandlerInterface.
    *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit\Framework\MockObject\MockObject
    */
   protected $moduleHandler;

@@ @@

     $this->entityTypeManager = $this->createMock('\Drupal\Core\Entity\EntityTypeManagerInterface');

-    $this->logger = $this->getMockBuilder('\Psr\Log\LoggerInterface')
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->logger = $this->createMock('\Psr\Log\LoggerInterface');

-    $this->messenger = $this->getMockBuilder(MessengerInterface::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->messenger = $this->createMock(MessengerInterface::class);

-    $this->moduleHandler = $this->getMockBuilder(ModuleHandlerInterface::class)
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->moduleHandler = $this->createMock(ModuleHandlerInterface::class);

     $this->moduleHandler->expects($this->any())
       ->method('alter');

-    $this->simplesaml = $this->getMockBuilder('\Drupal\simplesamlphp_auth\Service\SimplesamlphpAuthManager')
-      ->disableOriginalConstructor()
-      ->getMock();
+    $this->simplesaml = $this->createMock('\Drupal\simplesamlphp_auth\Service\SimplesamlphpAuthManager');

     $this->configFactory = $this->getConfigFactoryStub([
       'simplesamlphp_auth.settings' => [
    ----------- end diff -----------

Applied rules:
 * ProtectedStaticModulesPropertyRector (https://www.drupal.org/node/2909426)
 * GetMockBuilderGetMockToCreateMockRector (https://github.com/lmc-eu/steward/pull/187/files#diff-c7e8c65e59b8b4ff8b54325814d4ba55L80)
 * RenameClassRector


3) web/modules/contrib/simplesamlphp_auth/simplesamlphp_auth.api.php:0

    ---------- begin diff ----------
@@ @@
 <?php

+use Drupal\user\UserInterface;
 /**
  * @file
  * Hooks for simpleSAMLphp Authentication module.
@@ @@
  * @param \Drupal\user\UserInterface $account
  *   The pre-existing Drupal user to be SAML-enabled.
  */
-function hook_simplesamlphp_auth_account_authname_alter(&$authname, \Drupal\user\UserInterface $account) {
+function hook_simplesamlphp_auth_account_authname_alter(&$authname, UserInterface $account) {
   $authname = $account->mail;
 }

@@ @@
  * @return \Drupal\user\UserInterface|bool
  *   The altered Drupal account or FALSE if nothing was changed.
  */
-function hook_simplesamlphp_auth_user_attributes(\Drupal\user\UserInterface $account, $attributes) {
+function hook_simplesamlphp_auth_user_attributes(UserInterface $account, $attributes) {
   $saml_first_name = $attributes['first_name'];
   if ($saml_first_name) {
     $account->set('field_first_name', $saml_first_name);
    ----------- end diff -----------

4) web/modules/contrib/simplesamlphp_auth/src/Service/SimplesamlphpDrupalAuth.php:1

    ---------- begin diff ----------
@@ @@

 namespace Drupal\simplesamlphp_auth\Service;

+use Drupal\Component\Utility\DeprecationHelper;
+use Drupal\Core\Utility\Error;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Session\AccountInterface;
@@ @@
         $account = $this->externalauth->register($authname, 'simplesamlphp_auth');
       }
       catch (\Exception $ex) {
-        watchdog_exception('simplesamlphp_auth', $ex);
+        DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '10.1.0', fn() => Error::logException(\Drupal::logger('simplesamlphp_auth'), $ex), fn() => watchdog_exception('simplesamlphp_auth', $ex));
         $this->messenger
           ->addMessage($this->t('Error registering user: An account with this username already exists.'), 'error');
       }
    ----------- end diff -----------

Applied rules:
 * WatchdogExceptionRector
 * ProtectedStaticModulesPropertyRector (https://www.drupal.org/node/2909426)


 [OK] 4 files would have changed (dry-run) by Rector                                                                    

Audit of deprecated PHP <8.3 calls

If no errors are listed below, php-compatibility did not find any.

................ 16 / 16 (100%)


Time: 173ms; Memory: 10MB

Diff for updating coreversionrequirement

diff --git a/simplesamlphp_auth.info.yml b/simplesamlphp_auth.info.yml
index 893e0ae..0890456 100644
--- a/simplesamlphp_auth.info.yml
+++ b/simplesamlphp_auth.info.yml
@@ -1,7 +1,7 @@
 name: SimpleSAMLphp Authentication
 type: module
 description: Allows users to authenticate to a remote SAML identity provider (IdP) via a locally configured SimpleSAMLphp service point (SP).
-core_version_requirement: ^9.4
+core_version_requirement: ^10 || ^11
 configure: simplesamlphp_auth.admin_settings
 dependencies:
  - drupal:user
šŸ“Œ Task
Status

Active

Version

4.0

Component

Code

Created by

šŸ‡ŗšŸ‡øUnited States mark_fullmer Tucson

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Merge Requests

Comments & Activities

  • Issue created by @mark_fullmer
  • Status changed to Needs review 7 months ago
  • šŸ‡®šŸ‡³India sarwan_verma

    Hi @mark_fullmer,
    I have fixed this issue "Drupal 11 compatibility" and also attached patch
    kindly review and verify .

  • Assigned to ankitv18
  • Status changed to Needs work 6 months ago
  • Merge request !35Issue#3447463: Initial changes for D11. ā†’ (Open) created by ankitv18
  • Pipeline finished with Failed
    6 months ago
    Total: 204s
    #215431
  • Pipeline finished with Failed
    6 months ago
    Total: 208s
    #215930
  • Pipeline finished with Failed
    6 months ago
    Total: 171s
    #215964
  • Pipeline finished with Failed
    6 months ago
    Total: 594s
    #215975
  • Pipeline finished with Failed
    6 months ago
    Total: 148s
    #215997
  • Pipeline finished with Failed
    6 months ago
    Total: 144s
    #216008
  • Pipeline finished with Failed
    6 months ago
    #216016
  • Pipeline finished with Failed
    6 months ago
    Total: 173s
    #216021
  • Pipeline finished with Success
    6 months ago
    #216031
  • Issue was unassigned.
  • Status changed to Needs review 6 months ago
  • šŸ‡®šŸ‡³India ankitv18

    Hi,
    MR!35 is ready for a review
    To support symfony 7 version for the package simplesamlphp I've raised a issue and got response from the maintainer that he will wait till Nov 2025 @see: https://github.com/simplesamlphp/simplesamlphp/issues/2164

  • Pipeline finished with Success
    6 months ago
    Total: 951s
    #216609
  • šŸ‡ØšŸ‡­Switzerland berdir Switzerland

    There isn't really a point in doing this until upstream is compatible, we can't claim to be D11 compatible without that. Working with upstream has already been very painful for D10/Symfony 6, and it's clearly repeating again.

    You could look into how much work it is to add Symfony 7 compatibility, you might be able to convince them otherwise with an MR that does the hopefully minimal changes and remains backwards compatible, but there's a fairly high chance that they are not interested in that.

  • šŸ‡®šŸ‡³India ankitv18

    @berdir So I forked the repo and bumped the symfony packages to version 7 and ran the composer update to update the changes in composer.lock and I have encountered with php fatal error.

    Fatal error: Uncaught Symfony\Component\Console\Exception\LogicException: The command defined in "SimpleSAML\Command\UpdateBinaryTranslationsCommand" cannot have an empty name. in /Users/ankit.pathak/Documents/Projects/drupalissues/simplesamlphp/vendor/symfony/console/Application.php:533
    Stack trace:
    #0 /Users/ankit.pathak/Documents/Projects/drupalissues/simplesamlphp/bin/translations(16): Symfony\Component\Console\Application->add(Object(SimpleSAML\Command\UpdateBinaryTranslationsCommand))
    #1 {main}
      thrown in /Users/ankit.pathak/Documents/Projects/drupalissues/simplesamlphp/vendor/symfony/console/Application.php on line 533
    

    Will try to find same way out when I get some time.

    Meanwhile if anyone else can give a shot then below is the require section of simplesamlphp package of which I had tried to update the composer.lock

     "require": {
            "php": "^8.1",
            "ext-date": "*",
            "ext-dom": "*",
            "ext-fileinfo": "*",
            "ext-filter": "*",
            "ext-hash": "*",
            "ext-json": "*",
            "ext-libxml": "*",
            "ext-mbstring": "*",
            "ext-openssl": "*",
            "ext-posix": "*",
            "ext-pcre": "*",
            "ext-session": "*",
            "ext-simplexml": "*",
            "ext-SPL": "*",
            "ext-xml": "*",
            "ext-zlib": "*",
    
            "beste/clock": "^3.0",
            "gettext/gettext": "^5.7",
            "gettext/translator": "^1.1",
            "phpmailer/phpmailer": "^6.9",
            "psr/log": "^3.0",
            "robrichards/xmlseclibs": "^3.1.1",
            "simplesamlphp/assert": "^1.1",
            "simplesamlphp/composer-module-installer": "^1.3",
            "simplesamlphp/saml2": "^5.0.0-alpha.14",
            "simplesamlphp/saml2-legacy": "^4.6",
            "simplesamlphp/simplesamlphp-assets-base": "^2.2",
            "simplesamlphp/simplesamlphp-module-adfs": "^2.1",
            "simplesamlphp/xml-common": "^1.16",
            "symfony/cache": "^6.4.0 || ^7.0",
            "symfony/config": "^6.4.0 || ^7.0 ",
            "symfony/console": "^6.4.0 || ^7.0",
            "symfony/dependency-injection": "^6.4.0 || ^7.0",
            "symfony/filesystem": "^6.4.0 || ^7.0",
            "symfony/finder": "^6.4.0 || ^7.0",
            "symfony/framework-bundle": "^6.4.0 || ^7.0",
            "symfony/http-foundation": "^6.4.0 || ^7.0",
            "symfony/http-kernel": "^6.4.0 || ^7.0",
            "symfony/intl": "^6.4.0 || ^7.0",
            "symfony/password-hasher": "^6.4.0 || ^7.0",
            "symfony/polyfill-intl-icu": "^1.30",
            "symfony/psr-http-message-bridge": "^6.4.0 || ^7.0",
            "symfony/routing": "^6.4.0 || ^7.0",
            "symfony/translation-contracts": "^3.0",
            "symfony/twig-bridge": "^6.4.0 || ^7.0",
            "symfony/var-exporter": "^6.4.0 || ^7.0",
            "twig/intl-extra": "^3.10",
            "twig/twig": "^3.10",
            "symfony/yaml": "^6.4 || ^7.0"
        },
  • šŸ‡¦šŸ‡ŗAustralia mingsong šŸ‡¦šŸ‡ŗ

    According to the following conversions with simplesamlphp repository in Github:

    https://github.com/simplesamlphp/simplesamlphp/issues/2008#issuecomment-...

    https://github.com/simplesamlphp/simplesamlphp/issues/2164#issuecomment-...

    Pretty much, the answer from them on Symfony 7 is no.

    By the way, will the Drupal 10.4 stick with Symfony 6 to the end?

  • Status changed to Postponed 5 months ago
  • šŸ‡ØšŸ‡­Switzerland berdir Switzerland

    Yes, exactly what I expected, they are quite set on how they handle things and it likely won't budge.

    Yes, Drupal 10 will stick with Symfony 6 LTS, so from a security perspective, it should be ok. Maybe someone will fork a version that provides Symfony 7 compatibility, plenty of people are interested in it after all.

  • šŸ‡§šŸ‡·Brazil guilmour-asc

    Hi, everyone!
    I'm currently in the middle of a job that needs the availability of this package to Drupal 11, and would like to participate and help in the best way I can.

    Since yesterday, I was checking on the simplesamlphp package, and making some very raw tests with Composer updates (I think I'm a newbie on this matter) in a local clone of the repo (branch 'simplesamlphp-2.4').

    On doing some experimentation. I found the following:
    ā†’ By updating almost all Symfony requirements at composer.json and running composer update "symfony/*", I got a somewhat clean update (just 2 vulnerabilities about Twig, but I didn't explore).
    ā†’ The only Symfony package that I couldn't change was symfony/finder.
    ā†’ā†’ This package is tied to simplesamlphp/xml-security ^1.7 which, in turn, is tied to simplesamlphp/xml-common ^1.18.
    ā†’ā†’ Now, simplesamlphp/xml-common ^1.18 is, then, tied to symfony/finder ^6.4.
    ā†’ Maybe, if we had a new fork of simplesamlphp/xml-common that supports symfony/finder ^7.0, and also a fork of simplesamlphp/simplesamlphp that would use this first fork, we could then get a version of SimpleSAML PHP package that works with Symfony 7.

    Investigation about this matter is still in progress.

  • šŸ‡ŗšŸ‡øUnited States safetypin Memphis, Tennessee

    So, I read the comments from the maintainer of SSP, and while it is disappointing, I just search for D10 EOL, and this article ā†’ from 2023 says it will be supported until 11/26, which means we should all have plenty of security support for d10 well past the Symphony 7 LTS date in 11/25.

    Have I misunderstood something? If d10 will get security support past 11/25, then I don't think nearly as many people will have a problem waiting until then to upgrade to d11. I know I'd really prefer to get on d11 ASAP, but waiting for LTS with security patches is much preferred to trying to migrate away from SSP.

  • šŸ‡ŗšŸ‡øUnited States mark_fullmer Tucson

    Have I misunderstood something? If d10 will get security support past 11/25, then I don't think nearly as many people will have a problem waiting until then to upgrade to d11.

    That's my understanding, too. Our team is looking at likely delaying our update to Drupal 11 for the single reason of the simplesamlphp incompatibility with Symfony 7.

  • One of the comments on their issue says:

    Also, you don't have to include SimpleSAMLphp in your Laravel-project. It's perfectly possible to install it as a separate project next to your Laravel-project so the different Symfony-versions can work independently.

    Is that at all possible in a Drupal setup?

  • šŸ‡ØšŸ‡­Switzerland berdir Switzerland

    Yes, Drupal 10 is LTS and supported until 26 for the same reason that SimpleSAMLphp doesn't want to switch earlier to Symfony 7, the Symfony LTS support cycle.

    And no, you can't install it separately, not how this module is currently implemented. You can kind of install it without composer, but you're guaranteed to get into version conflicts like this recent issue: šŸ› twig conflict Active . You'll end up loading a mix of different conflicting versions of Twig/Symfony, exactly what composer is designed to prevent. Maybe it could be implemented differently, I don't know.

  • šŸ‡¦šŸ‡ŗAustralia mingsong šŸ‡¦šŸ‡ŗ

    Regarding bypassing the version constraints by Composer, you can use the Composer's aliasing feature to allow you to complete the installation by using Composer. For example, in your local composer.json file you can add the following lines into the require section.

    "symfony/cache": "7.2 as 6.4.0",
            "symfony/config": "7.2 as 6.4.0",
            "symfony/console": "7.2 as 6.4.0",
            "symfony/dependency-injection": "7.2 as 6.4.0",
            "symfony/filesystem": "7.2 as 6.4.0",
            "symfony/finder": "7.2 as 6.4.0",
            "symfony/framework-bundle": "7.2 as 6.4.0",
            "symfony/http-foundation": "7.2 as 6.4.0",
            "symfony/http-kernel": "7.2 as 6.4.0",
            "symfony/intl": "7.2 as 6.4.0",
            "symfony/password-hasher": "7.2 as 6.4.0",
            "symfony/polyfill-intl-icu": "^1.28",
            "symfony/psr-http-message-bridge": "7.2 as 6.4.0",
            "symfony/routing": "7.2 as 6.4.0",
            "symfony/twig-bridge": "7.2 as 6.4.0",
            "symfony/var-exporter": "7.2 as 6.4.0",
            "symfony/yaml": "7.2 as 6.4.0",
    

    Please be advised that this is for testing purpose and not recommended for production. It aliases Symfony 7.2 components as if they were 6.4.0 to allow you bypassing version checks during the composer's install process. After that, you can test out if there is any compatibility issues with Drupal 11.

Production build 0.71.5 2024