From aaf25ef759772f39e89dbc434d913c15389cc259 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 16 Feb 2026 09:39:56 +1300 Subject: [PATCH 1/2] Enable symfony v8 --- .github/workflows/ci.yml | 7 +++++++ composer.json | 9 ++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c685c5..c87cf84 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,13 @@ jobs: symfony-version: # https://symfony.com/releases - "6.4" - "7.4" + - "8.1" + exclude: + # Symfony 8 requires PHP 8.4+ + - php-version: "8.2" + symfony-version: "8.1" + - php-version: "8.3" + symfony-version: "8.1" steps: - name: "Checkout" uses: "actions/checkout@v7" diff --git a/composer.json b/composer.json index 6db0c1f..c24e100 100644 --- a/composer.json +++ b/composer.json @@ -36,10 +36,10 @@ } ], "require": { - "php": "^7.4 || ^8.0", + "php": "^8.2", "broadway/broadway": "^2.2.1", - "symfony/console": "^4.4 || ^5.3 || ^6.0 || ^7.0", - "symfony/http-kernel": "^4.4 || ^5.3 || ^6.0 || ^7.0" + "symfony/console": "^6.4 || ^7.4 || ^8.0", + "symfony/http-kernel": "^6.4 || ^7.4 || ^8.0" }, "require-dev": { "broadway/broadway-saga": "^1.0", @@ -48,8 +48,7 @@ "monolog/monolog": "~2.0", "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^11.5", - "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0 || ^7.0", - "symfony/proxy-manager-bridge": "^4.4 || ^5.3 || ^6.0", + "symfony/framework-bundle": "^6.4 || ^7.4 || ^8.0", "phpstan/phpstan-symfony": "^2.0", "friendsofphp/php-cs-fixer": "^3.0" }, From 096a9ed8e702256b83edb125e50d7234f70b9330 Mon Sep 17 00:00:00 2001 From: othillo Date: Sun, 9 Aug 2026 19:54:50 +0200 Subject: [PATCH 2/2] feat!: support Symfony 8 and drop unmaintained versions Symfony 8 removed XmlFileLoader from the DependencyInjection component, so the bundle's service definitions are converted from XML to PHP. PhpFileLoader is available on every supported version. Constraints now cover only the versions listed as maintained on https://symfony.com/releases: 6.4 (LTS), 7.4 (LTS) and 8.x. Symfony 8 requires PHP 8.4, so those matrix cells are limited accordingly. BREAKING CHANGE: Symfony 4.4, 5.x and 6.0-6.3 are no longer supported, and the minimum supported PHP version is now 8.2. --- .github/workflows/ci.yml | 2 +- src/DependencyInjection/BroadwayExtension.php | 14 ++--- src/Resources/config/auditing.php | 37 ++++++++++++ src/Resources/config/auditing.xml | 21 ------- src/Resources/config/saga.php | 48 ++++++++++++++++ src/Resources/config/saga.xml | 32 ----------- src/Resources/config/serializers.php | 21 +++++++ src/Resources/config/serializers.xml | 11 ---- src/Resources/config/services.php | 56 +++++++++++++++++++ src/Resources/config/services.xml | 35 ------------ 10 files changed, 170 insertions(+), 107 deletions(-) create mode 100644 src/Resources/config/auditing.php delete mode 100644 src/Resources/config/auditing.xml create mode 100644 src/Resources/config/saga.php delete mode 100644 src/Resources/config/saga.xml create mode 100644 src/Resources/config/serializers.php delete mode 100644 src/Resources/config/serializers.xml create mode 100644 src/Resources/config/services.php delete mode 100644 src/Resources/config/services.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c87cf84..9f7b800 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: - "7.4" - "8.1" exclude: - # Symfony 8 requires PHP 8.4+ + # Symfony 8 requires PHP 8.4 or higher - php-version: "8.2" symfony-version: "8.1" - php-version: "8.3" diff --git a/src/DependencyInjection/BroadwayExtension.php b/src/DependencyInjection/BroadwayExtension.php index cf687a1..bb71569 100644 --- a/src/DependencyInjection/BroadwayExtension.php +++ b/src/DependencyInjection/BroadwayExtension.php @@ -17,15 +17,15 @@ use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; +use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension; class BroadwayExtension extends ConfigurableExtension { protected function loadInternal(array $mergedConfig, ContainerBuilder $container): void { - $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('services.xml'); + $loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.php'); if (isset($mergedConfig['event_store'])) { $container->setParameter('broadway.event_store.service_id', $mergedConfig['event_store']); @@ -39,7 +39,7 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container $this->loadSerializers($mergedConfig['serializer'], $container, $loader); if (isset($mergedConfig['saga']) && isset($mergedConfig['saga']['enabled']) && $mergedConfig['saga']['enabled']) { - $loader->load('saga.xml'); + $loader->load('saga.php'); if (isset($mergedConfig['saga']['state_repository'])) { $container->setParameter( @@ -59,7 +59,7 @@ private function loadCommandBus(array $config, ContainerBuilder $container, Load ); if ($logger = $config['logger']) { - $loader->load('auditing.xml'); + $loader->load('auditing.php'); $container->setAlias('broadway.auditing.logger', new Alias($logger, true)); } } else { @@ -70,9 +70,9 @@ private function loadCommandBus(array $config, ContainerBuilder $container, Load } } - private function loadSerializers(array $config, ContainerBuilder $container, XmlFileLoader $loader): void + private function loadSerializers(array $config, ContainerBuilder $container, PhpFileLoader $loader): void { - $loader->load('serializers.xml'); + $loader->load('serializers.php'); foreach ($config as $serializer => $serviceId) { $container->setParameter(sprintf('broadway.serializer.%s.service_id', $serializer), $serviceId); diff --git a/src/Resources/config/auditing.php b/src/Resources/config/auditing.php new file mode 100644 index 0000000..f5b5002 --- /dev/null +++ b/src/Resources/config/auditing.php @@ -0,0 +1,37 @@ +services(); + + $services->set('broadway.auditing.command_logger', CommandLogger::class) + ->args([ + service('broadway.auditing.logger'), + service('broadway.auditing.serializer'), + ]) + ->tag('broadway.event_listener', [ + 'event' => 'broadway.command_handling.command_success', + 'method' => 'onCommandHandlingSuccess', + ]) + ->tag('broadway.event_listener', [ + 'event' => 'broadway.command_handling.command_failure', + 'method' => 'onCommandHandlingFailure', + ]); + + $services->set('broadway.auditing.serializer', NullByteCommandSerializer::class); +}; diff --git a/src/Resources/config/auditing.xml b/src/Resources/config/auditing.xml deleted file mode 100644 index 5334ae5..0000000 --- a/src/Resources/config/auditing.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/src/Resources/config/saga.php b/src/Resources/config/saga.php new file mode 100644 index 0000000..38a69f3 --- /dev/null +++ b/src/Resources/config/saga.php @@ -0,0 +1,48 @@ +services(); + + $services->set('broadway.saga.state.state_manager', StateManager::class) + ->args([ + service('broadway.saga.state.repository'), + service('broadway.uuid.generator'), + ]); + + $services->set('broadway.saga.metadata.factory', StaticallyConfiguredSagaMetadataFactory::class); + + $services->set('broadway.saga.metadata_enricher', SagaMetadataEnricher::class) + ->tag('broadway.event_listener', ['event' => 'broadway.saga.post_handle', 'method' => 'postHandleSaga']) + ->tag('broadway.metadata_enricher'); + + $services->set('broadway.saga.multiple_saga_manager', MultipleSagaManager::class) + ->args([ + service('broadway.saga.state.repository'), + // will be populated by RegisterSagaCompilerPass: + [], + service('broadway.saga.state.state_manager'), + service('broadway.saga.metadata.factory'), + service('broadway.event_dispatcher'), + ]); + + $services->set('broadway.saga.state.in_memory_repository', InMemoryRepository::class); +}; diff --git a/src/Resources/config/saga.xml b/src/Resources/config/saga.xml deleted file mode 100644 index e17f4a3..0000000 --- a/src/Resources/config/saga.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Resources/config/serializers.php b/src/Resources/config/serializers.php new file mode 100644 index 0000000..d96193e --- /dev/null +++ b/src/Resources/config/serializers.php @@ -0,0 +1,21 @@ +services() + ->set('broadway.simple_interface_serializer', SimpleInterfaceSerializer::class); +}; diff --git a/src/Resources/config/serializers.xml b/src/Resources/config/serializers.xml deleted file mode 100644 index ae9f635..0000000 --- a/src/Resources/config/serializers.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php new file mode 100644 index 0000000..8359154 --- /dev/null +++ b/src/Resources/config/services.php @@ -0,0 +1,56 @@ +services(); + + $services->set('broadway.command_handling.simple_command_bus', SimpleCommandBus::class); + + $services->set('broadway.command_handling.event_dispatching_command_bus', EventDispatchingCommandBus::class) + ->args([ + service('broadway.command_handling.simple_command_bus'), + service('broadway.event_dispatcher'), + ]); + + $services->set('broadway.event_handling.event_bus', SimpleEventBus::class); + + $services->set('broadway.uuid.converter', BinaryUuidConverter::class); + + $services->set('broadway.uuid.generator', Version4Generator::class) + ->public(); + + $services->set('broadway.metadata_enriching_event_stream_decorator', MetadataEnrichingEventStreamDecorator::class); + + $services->set('broadway.metadata_enricher.console', CommandMetadataEnricher::class) + ->tag('kernel.event_listener', ['event' => 'console.command', 'method' => 'handleConsoleCommandEvent']) + ->tag('broadway.metadata_enricher'); + + $services->set('broadway.event_dispatcher', CallableEventDispatcher::class); + + $services->set('broadway.event_store.in_memory', InMemoryEventStore::class); + + $services->set('broadway.read_model.in_memory.repository_factory', InMemoryRepositoryFactory::class); +}; diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml deleted file mode 100644 index 1b71850..0000000 --- a/src/Resources/config/services.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -