From a8e3a3a0edffedf86f7e4c57ae47e02fa551b353 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Fri, 31 Oct 2025 15:28:15 +0100 Subject: [PATCH 1/8] feat: add support for symfony 8 --- .github/workflows/tests.yaml | 1 + composer.json | 38 +++--- src/Resources/config/schema/sentry-1.0.xsd | 144 --------------------- src/Resources/config/services.php | 125 ++++++++++++++++++ src/Resources/config/services.xml | 144 --------------------- 5 files changed, 145 insertions(+), 307 deletions(-) delete mode 100644 src/Resources/config/schema/sentry-1.0.xsd create mode 100644 src/Resources/config/services.php delete mode 100644 src/Resources/config/services.xml diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index ca10df03..37fe3ddf 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -33,6 +33,7 @@ jobs: - 5.* - 6.* - 7.* + - 8.* dependencies: - highest exclude: diff --git a/composer.json b/composer.json index 1413636e..ad69d107 100644 --- a/composer.json +++ b/composer.json @@ -15,15 +15,15 @@ "php": "^7.2||^8.0", "guzzlehttp/psr7": "^2.1.1", "jean85/pretty-package-versions": "^1.5||^2.0", - "sentry/sentry": "^4.16.0", + "sentry/sentry": "dev-master", "symfony/cache-contracts": "^1.1||^2.4||^3.0", - "symfony/config": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/console": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/http-kernel": "^4.4.20||^5.0.11||^6.0||^7.0", + "symfony/config": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/console": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/http-kernel": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", "symfony/polyfill-php80": "^1.22", - "symfony/psr-http-message-bridge": "^1.2||^2.0||^6.4||^7.0" + "symfony/psr-http-message-bridge": "^1.2||^2.0||^6.4||^7.0||^8.0" }, "require-dev": { "doctrine/dbal": "^2.13||^3.3||^4.0", @@ -35,19 +35,19 @@ "phpstan/phpstan-phpunit": "1.4.0", "phpstan/phpstan-symfony": "1.4.10", "phpunit/phpunit": "^8.5.40||^9.6.21", - "symfony/browser-kit": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/cache": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/http-client": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/messenger": "^4.4.20||^5.0.11||^6.0||^7.0", + "symfony/browser-kit": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/cache": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/http-client": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/messenger": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", "symfony/monolog-bundle": "^3.4", - "symfony/phpunit-bridge": "^5.2.6||^6.0||^7.0", - "symfony/process": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/security-core": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/security-http": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0||^7.0", - "symfony/yaml": "^4.4.20||^5.0.11||^6.0||^7.0", + "symfony/phpunit-bridge": "^5.2.6||^6.0||^7.0||^8.0", + "symfony/process": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/security-core": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/security-http": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", + "symfony/yaml": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", "vimeo/psalm": "^4.3||^5.16.0" }, "suggest": { diff --git a/src/Resources/config/schema/sentry-1.0.xsd b/src/Resources/config/schema/sentry-1.0.xsd deleted file mode 100644 index 5d03008b..00000000 --- a/src/Resources/config/schema/sentry-1.0.xsd +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php new file mode 100644 index 00000000..b80d8f6d --- /dev/null +++ b/src/Resources/config/services.php @@ -0,0 +1,125 @@ +services(); + + $services->defaults() + ->private(); + + $services->alias('Sentry\ClientInterface', 'sentry.client'); + + $services->set('Sentry\State\HubInterface') + ->factory(['Sentry\State\HubAdapter', 'getInstance']) + ->call('bindClient', [service('Sentry\ClientInterface')]); + + $services->alias('Sentry\SentryBundle\EventListener\ConsoleCommandListener', 'Sentry\SentryBundle\EventListener\ConsoleListener'); + + $services->set('Sentry\SentryBundle\EventListener\ConsoleListener', 'Sentry\SentryBundle\EventListener\ConsoleListener') + ->args([service('Sentry\State\HubInterface')]) + ->tag('kernel.event_listener', ['event' => 'console.command', 'method' => 'handleConsoleCommandEvent', 'priority' => 128]) + ->tag('kernel.event_listener', ['event' => 'console.terminate', 'method' => 'handleConsoleTerminateEvent', 'priority' => -64]) + ->tag('kernel.event_listener', ['event' => 'console.error', 'method' => 'handleConsoleErrorEvent', 'priority' => -64]); + + $services->set('Sentry\SentryBundle\EventListener\ErrorListener', 'Sentry\SentryBundle\EventListener\ErrorListener') + ->args([service('Sentry\State\HubInterface')]) + ->tag('kernel.event_listener', ['event' => 'kernel.exception', 'method' => 'handleExceptionEvent', 'priority' => 128]); + + $services->set('Sentry\SentryBundle\EventListener\RequestListener', 'Sentry\SentryBundle\EventListener\RequestListener') + ->args([service('Sentry\State\HubInterface')]) + ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 5]) + ->tag('kernel.event_listener', ['event' => 'kernel.controller', 'method' => 'handleKernelControllerEvent', 'priority' => 10]); + + $services->set('Sentry\SentryBundle\EventListener\SubRequestListener', 'Sentry\SentryBundle\EventListener\SubRequestListener') + ->args([service('Sentry\State\HubInterface')]) + ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 3]) + ->tag('kernel.event_listener', ['event' => 'kernel.finish_request', 'method' => 'handleKernelFinishRequestEvent', 'priority' => 5]); + + $services->set('Sentry\SentryBundle\EventListener\TracingRequestListener', 'Sentry\SentryBundle\EventListener\TracingRequestListener') + ->args([ + service('Sentry\State\HubInterface'), + service('Sentry\Integration\RequestFetcherInterface'), + ]) + ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 4]) + ->tag('kernel.event_listener', ['event' => 'kernel.response', 'method' => 'handleKernelResponseEvent', 'priority' => 15]) + ->tag('kernel.event_listener', ['event' => 'kernel.terminate', 'method' => 'handleKernelTerminateEvent', 'priority' => 5]); + + $services->set('Sentry\SentryBundle\EventListener\TracingSubRequestListener', 'Sentry\SentryBundle\EventListener\TracingSubRequestListener') + ->args([service('Sentry\State\HubInterface')]) + ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 2]) + ->tag('kernel.event_listener', ['event' => 'kernel.finish_request', 'method' => 'handleKernelFinishRequestEvent', 'priority' => 10]) + ->tag('kernel.event_listener', ['event' => 'kernel.response', 'method' => 'handleKernelResponseEvent', 'priority' => 15]); + + $services->set('Sentry\SentryBundle\EventListener\TracingConsoleListener', 'Sentry\SentryBundle\EventListener\TracingConsoleListener') + ->args([ + service('Sentry\State\HubInterface'), + '', + ]) + ->tag('kernel.event_listener', ['event' => 'console.command', 'method' => 'handleConsoleCommandEvent', 'priority' => 118]) + ->tag('kernel.event_listener', ['event' => 'console.terminate', 'method' => 'handleConsoleTerminateEvent', 'priority' => -54]); + + $services->set('Sentry\SentryBundle\EventListener\MessengerListener', 'Sentry\SentryBundle\EventListener\MessengerListener') + ->args([service('Sentry\State\HubInterface')]) + ->tag('kernel.event_listener', ['event' => 'Symfony\Component\Messenger\Event\WorkerMessageFailedEvent', 'method' => 'handleWorkerMessageFailedEvent', 'priority' => 50]) + ->tag('kernel.event_listener', ['event' => 'Symfony\Component\Messenger\Event\WorkerMessageHandledEvent', 'method' => 'handleWorkerMessageHandledEvent', 'priority' => 50]) + ->tag('kernel.event_listener', ['event' => 'Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent', 'method' => 'handleWorkerMessageReceivedEvent', 'priority' => 50]); + + $services->set('Sentry\SentryBundle\EventListener\LoginListener', 'Sentry\SentryBundle\EventListener\LoginListener') + ->args([ + service('Sentry\State\HubInterface'), + service('security.token_storage')->ignoreOnInvalid(), + ]) + ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent']); + + $services->set('Sentry\SentryBundle\EventListener\LogRequestListener', 'Sentry\SentryBundle\EventListener\LogRequestListener') + ->tag('kernel.event_listener', ['event' => 'kernel.terminate', 'method' => 'handleKernelTerminateEvent', 'priority' => 10]); + + $services->set('Sentry\SentryBundle\Command\SentryTestCommand', 'Sentry\SentryBundle\Command\SentryTestCommand') + ->args([service('Sentry\State\HubInterface')]) + ->tag('console.command', ['command' => 'sentry:test']); + + $services->alias('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactoryInterface', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory'); + + $services->set('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory') + ->args([service('Sentry\State\HubInterface')]); + + $services->set('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware') + ->args([service('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactoryInterface')]); + + $services->set('Sentry\SentryBundle\Tracing\Doctrine\DBAL\ConnectionConfigurator', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\ConnectionConfigurator') + ->args([service('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware')]); + + $services->set('Sentry\SentryBundle\Tracing\Twig\TwigTracingExtension', 'Sentry\SentryBundle\Tracing\Twig\TwigTracingExtension') + ->args([service('Sentry\State\HubInterface')]) + ->tag('twig.extension'); + + $services->set('sentry.tracing.traceable_cache_adapter', 'Sentry\SentryBundle\Tracing\Cache\TraceableCacheAdapter') + ->abstract() + ->args([ + service('Sentry\State\HubInterface'), + '', + ]); + + $services->set('sentry.tracing.traceable_tag_aware_cache_adapter', 'Sentry\SentryBundle\Tracing\Cache\TraceableTagAwareCacheAdapter') + ->abstract() + ->args([ + service('Sentry\State\HubInterface'), + '', + ]); + + $services->set('Sentry\SentryBundle\Integration\IntegrationConfigurator', 'Sentry\SentryBundle\Integration\IntegrationConfigurator') + ->args([ + [], + '', + ]); + + $services->set('Sentry\Integration\RequestFetcherInterface', 'Sentry\SentryBundle\Integration\RequestFetcher') + ->args([ + service('Symfony\Component\HttpFoundation\RequestStack'), + service('Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface')->nullOnInvalid(), + ]); + + $services->set('Sentry\SentryBundle\Twig\SentryExtension', 'Sentry\SentryBundle\Twig\SentryExtension') + ->tag('twig.extension'); +}; diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml deleted file mode 100644 index dae3e7df..00000000 --- a/src/Resources/config/services.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 42d52f4b73e4b9a2da1d847a14c15539c5865a80 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Fri, 31 Oct 2025 15:32:57 +0100 Subject: [PATCH 2/8] replace xml config with php --- src/DependencyInjection/SentryExtension.php | 10 +++++----- .../XmlSentryExtensionTest.php | 18 ------------------ 2 files changed, 5 insertions(+), 23 deletions(-) delete mode 100644 tests/DependencyInjection/XmlSentryExtensionTest.php diff --git a/src/DependencyInjection/SentryExtension.php b/src/DependencyInjection/SentryExtension.php index 510638be..8a2f0b2c 100644 --- a/src/DependencyInjection/SentryExtension.php +++ b/src/DependencyInjection/SentryExtension.php @@ -62,8 +62,8 @@ public function getNamespace(): string */ protected function loadInternal(array $mergedConfig, ContainerBuilder $container): void { - $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); - $loader->load('services.xml'); + $loader = new Loader\PhpFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); + $loader->load('services.php'); if (!$container->hasParameter('env(SENTRY_RELEASE)')) { $container->setParameter('env(SENTRY_RELEASE)', PrettyVersions::getRootPackageVersion()->getPrettyVersion()); @@ -298,7 +298,7 @@ private function registerHttpClientTracingConfiguration(ContainerBuilder $contai } /** - * @param string[] $integrations + * @param string[] $integrations * @param array $config * * @return array @@ -330,12 +330,12 @@ private function configureRequestIntegration(array $integrations, bool $useDefau /** * @param class-string $integrationClass - * @param array $integrations + * @param array $integrations */ private function isIntegrationEnabled(string $integrationClass, array $integrations): bool { foreach ($integrations as $integration) { - if ($integration instanceof Reference && $integrationClass === (string) $integration) { + if ($integration instanceof Reference && $integrationClass === (string)$integration) { return true; } diff --git a/tests/DependencyInjection/XmlSentryExtensionTest.php b/tests/DependencyInjection/XmlSentryExtensionTest.php deleted file mode 100644 index e54808e2..00000000 --- a/tests/DependencyInjection/XmlSentryExtensionTest.php +++ /dev/null @@ -1,18 +0,0 @@ -load($fixtureFile . '.xml'); - } -} From c34bd8151567e5e056fe379d951d2e4df8417b22 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Fri, 31 Oct 2025 15:52:46 +0100 Subject: [PATCH 3/8] restore XML tests, add yml instead of php config --- src/DependencyInjection/SentryExtension.php | 4 +- src/Resources/config/schema/sentry-1.0.xsd | 144 ++++++++++++++++++ src/Resources/config/services.php | 125 --------------- src/Resources/config/services.yaml | 123 +++++++++++++++ .../XmlSentryExtensionTest.php | 21 +++ 5 files changed, 290 insertions(+), 127 deletions(-) create mode 100644 src/Resources/config/schema/sentry-1.0.xsd delete mode 100644 src/Resources/config/services.php create mode 100644 src/Resources/config/services.yaml create mode 100644 tests/DependencyInjection/XmlSentryExtensionTest.php diff --git a/src/DependencyInjection/SentryExtension.php b/src/DependencyInjection/SentryExtension.php index 8a2f0b2c..61e58676 100644 --- a/src/DependencyInjection/SentryExtension.php +++ b/src/DependencyInjection/SentryExtension.php @@ -62,8 +62,8 @@ public function getNamespace(): string */ protected function loadInternal(array $mergedConfig, ContainerBuilder $container): void { - $loader = new Loader\PhpFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); - $loader->load('services.php'); + $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); + $loader->load('services.yaml'); if (!$container->hasParameter('env(SENTRY_RELEASE)')) { $container->setParameter('env(SENTRY_RELEASE)', PrettyVersions::getRootPackageVersion()->getPrettyVersion()); diff --git a/src/Resources/config/schema/sentry-1.0.xsd b/src/Resources/config/schema/sentry-1.0.xsd new file mode 100644 index 00000000..5d03008b --- /dev/null +++ b/src/Resources/config/schema/sentry-1.0.xsd @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php deleted file mode 100644 index b80d8f6d..00000000 --- a/src/Resources/config/services.php +++ /dev/null @@ -1,125 +0,0 @@ -services(); - - $services->defaults() - ->private(); - - $services->alias('Sentry\ClientInterface', 'sentry.client'); - - $services->set('Sentry\State\HubInterface') - ->factory(['Sentry\State\HubAdapter', 'getInstance']) - ->call('bindClient', [service('Sentry\ClientInterface')]); - - $services->alias('Sentry\SentryBundle\EventListener\ConsoleCommandListener', 'Sentry\SentryBundle\EventListener\ConsoleListener'); - - $services->set('Sentry\SentryBundle\EventListener\ConsoleListener', 'Sentry\SentryBundle\EventListener\ConsoleListener') - ->args([service('Sentry\State\HubInterface')]) - ->tag('kernel.event_listener', ['event' => 'console.command', 'method' => 'handleConsoleCommandEvent', 'priority' => 128]) - ->tag('kernel.event_listener', ['event' => 'console.terminate', 'method' => 'handleConsoleTerminateEvent', 'priority' => -64]) - ->tag('kernel.event_listener', ['event' => 'console.error', 'method' => 'handleConsoleErrorEvent', 'priority' => -64]); - - $services->set('Sentry\SentryBundle\EventListener\ErrorListener', 'Sentry\SentryBundle\EventListener\ErrorListener') - ->args([service('Sentry\State\HubInterface')]) - ->tag('kernel.event_listener', ['event' => 'kernel.exception', 'method' => 'handleExceptionEvent', 'priority' => 128]); - - $services->set('Sentry\SentryBundle\EventListener\RequestListener', 'Sentry\SentryBundle\EventListener\RequestListener') - ->args([service('Sentry\State\HubInterface')]) - ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 5]) - ->tag('kernel.event_listener', ['event' => 'kernel.controller', 'method' => 'handleKernelControllerEvent', 'priority' => 10]); - - $services->set('Sentry\SentryBundle\EventListener\SubRequestListener', 'Sentry\SentryBundle\EventListener\SubRequestListener') - ->args([service('Sentry\State\HubInterface')]) - ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 3]) - ->tag('kernel.event_listener', ['event' => 'kernel.finish_request', 'method' => 'handleKernelFinishRequestEvent', 'priority' => 5]); - - $services->set('Sentry\SentryBundle\EventListener\TracingRequestListener', 'Sentry\SentryBundle\EventListener\TracingRequestListener') - ->args([ - service('Sentry\State\HubInterface'), - service('Sentry\Integration\RequestFetcherInterface'), - ]) - ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 4]) - ->tag('kernel.event_listener', ['event' => 'kernel.response', 'method' => 'handleKernelResponseEvent', 'priority' => 15]) - ->tag('kernel.event_listener', ['event' => 'kernel.terminate', 'method' => 'handleKernelTerminateEvent', 'priority' => 5]); - - $services->set('Sentry\SentryBundle\EventListener\TracingSubRequestListener', 'Sentry\SentryBundle\EventListener\TracingSubRequestListener') - ->args([service('Sentry\State\HubInterface')]) - ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent', 'priority' => 2]) - ->tag('kernel.event_listener', ['event' => 'kernel.finish_request', 'method' => 'handleKernelFinishRequestEvent', 'priority' => 10]) - ->tag('kernel.event_listener', ['event' => 'kernel.response', 'method' => 'handleKernelResponseEvent', 'priority' => 15]); - - $services->set('Sentry\SentryBundle\EventListener\TracingConsoleListener', 'Sentry\SentryBundle\EventListener\TracingConsoleListener') - ->args([ - service('Sentry\State\HubInterface'), - '', - ]) - ->tag('kernel.event_listener', ['event' => 'console.command', 'method' => 'handleConsoleCommandEvent', 'priority' => 118]) - ->tag('kernel.event_listener', ['event' => 'console.terminate', 'method' => 'handleConsoleTerminateEvent', 'priority' => -54]); - - $services->set('Sentry\SentryBundle\EventListener\MessengerListener', 'Sentry\SentryBundle\EventListener\MessengerListener') - ->args([service('Sentry\State\HubInterface')]) - ->tag('kernel.event_listener', ['event' => 'Symfony\Component\Messenger\Event\WorkerMessageFailedEvent', 'method' => 'handleWorkerMessageFailedEvent', 'priority' => 50]) - ->tag('kernel.event_listener', ['event' => 'Symfony\Component\Messenger\Event\WorkerMessageHandledEvent', 'method' => 'handleWorkerMessageHandledEvent', 'priority' => 50]) - ->tag('kernel.event_listener', ['event' => 'Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent', 'method' => 'handleWorkerMessageReceivedEvent', 'priority' => 50]); - - $services->set('Sentry\SentryBundle\EventListener\LoginListener', 'Sentry\SentryBundle\EventListener\LoginListener') - ->args([ - service('Sentry\State\HubInterface'), - service('security.token_storage')->ignoreOnInvalid(), - ]) - ->tag('kernel.event_listener', ['event' => 'kernel.request', 'method' => 'handleKernelRequestEvent']); - - $services->set('Sentry\SentryBundle\EventListener\LogRequestListener', 'Sentry\SentryBundle\EventListener\LogRequestListener') - ->tag('kernel.event_listener', ['event' => 'kernel.terminate', 'method' => 'handleKernelTerminateEvent', 'priority' => 10]); - - $services->set('Sentry\SentryBundle\Command\SentryTestCommand', 'Sentry\SentryBundle\Command\SentryTestCommand') - ->args([service('Sentry\State\HubInterface')]) - ->tag('console.command', ['command' => 'sentry:test']); - - $services->alias('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactoryInterface', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory'); - - $services->set('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory') - ->args([service('Sentry\State\HubInterface')]); - - $services->set('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware') - ->args([service('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactoryInterface')]); - - $services->set('Sentry\SentryBundle\Tracing\Doctrine\DBAL\ConnectionConfigurator', 'Sentry\SentryBundle\Tracing\Doctrine\DBAL\ConnectionConfigurator') - ->args([service('Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware')]); - - $services->set('Sentry\SentryBundle\Tracing\Twig\TwigTracingExtension', 'Sentry\SentryBundle\Tracing\Twig\TwigTracingExtension') - ->args([service('Sentry\State\HubInterface')]) - ->tag('twig.extension'); - - $services->set('sentry.tracing.traceable_cache_adapter', 'Sentry\SentryBundle\Tracing\Cache\TraceableCacheAdapter') - ->abstract() - ->args([ - service('Sentry\State\HubInterface'), - '', - ]); - - $services->set('sentry.tracing.traceable_tag_aware_cache_adapter', 'Sentry\SentryBundle\Tracing\Cache\TraceableTagAwareCacheAdapter') - ->abstract() - ->args([ - service('Sentry\State\HubInterface'), - '', - ]); - - $services->set('Sentry\SentryBundle\Integration\IntegrationConfigurator', 'Sentry\SentryBundle\Integration\IntegrationConfigurator') - ->args([ - [], - '', - ]); - - $services->set('Sentry\Integration\RequestFetcherInterface', 'Sentry\SentryBundle\Integration\RequestFetcher') - ->args([ - service('Symfony\Component\HttpFoundation\RequestStack'), - service('Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface')->nullOnInvalid(), - ]); - - $services->set('Sentry\SentryBundle\Twig\SentryExtension', 'Sentry\SentryBundle\Twig\SentryExtension') - ->tag('twig.extension'); -}; diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml new file mode 100644 index 00000000..548b3dd6 --- /dev/null +++ b/src/Resources/config/services.yaml @@ -0,0 +1,123 @@ +services: + _defaults: + public: false + + Sentry\ClientInterface: '@sentry.client' + Sentry\SentryBundle\EventListener\ConsoleCommandListener: '@Sentry\SentryBundle\EventListener\ConsoleListener' + Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactoryInterface: '@Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory' + + Sentry\State\HubInterface: + factory: ['Sentry\State\HubAdapter', 'getInstance'] + calls: + - [bindClient, ['@Sentry\ClientInterface']] + + Sentry\SentryBundle\EventListener\ConsoleListener: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: kernel.event_listener, event: console.command, method: handleConsoleCommandEvent, priority: 128 } + - { name: kernel.event_listener, event: console.terminate, method: handleConsoleTerminateEvent, priority: -64 } + - { name: kernel.event_listener, event: console.error, method: handleConsoleErrorEvent, priority: -64 } + + Sentry\SentryBundle\EventListener\ErrorListener: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: kernel.event_listener, event: kernel.exception, method: handleExceptionEvent, priority: 128 } + + Sentry\SentryBundle\EventListener\RequestListener: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: kernel.event_listener, event: kernel.request, method: handleKernelRequestEvent, priority: 5 } + - { name: kernel.event_listener, event: kernel.controller, method: handleKernelControllerEvent, priority: 10 } + + Sentry\SentryBundle\EventListener\SubRequestListener: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: kernel.event_listener, event: kernel.request, method: handleKernelRequestEvent, priority: 3 } + - { name: kernel.event_listener, event: kernel.finish_request, method: handleKernelFinishRequestEvent, priority: 5 } + + Sentry\SentryBundle\EventListener\TracingRequestListener: + arguments: + - '@Sentry\State\HubInterface' + - '@Sentry\Integration\RequestFetcherInterface' + tags: + - { name: kernel.event_listener, event: kernel.request, method: handleKernelRequestEvent, priority: 4 } + - { name: kernel.event_listener, event: kernel.response, method: handleKernelResponseEvent, priority: 15 } + - { name: kernel.event_listener, event: kernel.terminate, method: handleKernelTerminateEvent, priority: 5 } + + Sentry\SentryBundle\EventListener\TracingSubRequestListener: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: kernel.event_listener, event: kernel.request, method: handleKernelRequestEvent, priority: 2 } + - { name: kernel.event_listener, event: kernel.finish_request, method: handleKernelFinishRequestEvent, priority: 10 } + - { name: kernel.event_listener, event: kernel.response, method: handleKernelResponseEvent, priority: 15 } + + Sentry\SentryBundle\EventListener\TracingConsoleListener: + arguments: + - '@Sentry\State\HubInterface' + - '' + tags: + - { name: kernel.event_listener, event: console.command, method: handleConsoleCommandEvent, priority: 118 } + - { name: kernel.event_listener, event: console.terminate, method: handleConsoleTerminateEvent, priority: -54 } + + Sentry\SentryBundle\EventListener\MessengerListener: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: kernel.event_listener, event: 'Symfony\Component\Messenger\Event\WorkerMessageFailedEvent', method: handleWorkerMessageFailedEvent, priority: 50 } + - { name: kernel.event_listener, event: 'Symfony\Component\Messenger\Event\WorkerMessageHandledEvent', method: handleWorkerMessageHandledEvent, priority: 50 } + - { name: kernel.event_listener, event: 'Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent', method: handleWorkerMessageReceivedEvent, priority: 50 } + + Sentry\SentryBundle\EventListener\LoginListener: + arguments: + - '@Sentry\State\HubInterface' + - '@?security.token_storage' + tags: + - { name: kernel.event_listener, event: kernel.request, method: handleKernelRequestEvent } + + Sentry\SentryBundle\EventListener\LogRequestListener: + tags: + - { name: kernel.event_listener, event: kernel.terminate, method: handleKernelTerminateEvent, priority: 10 } + + # Command + Sentry\SentryBundle\Command\SentryTestCommand: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: console.command, command: 'sentry:test' } + + Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory: + arguments: ['@Sentry\State\HubInterface'] + + Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware: + arguments: ['@Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactory'] + + Sentry\SentryBundle\Tracing\Doctrine\DBAL\ConnectionConfigurator: + arguments: ['@Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware'] + + Sentry\SentryBundle\Tracing\Twig\TwigTracingExtension: + arguments: ['@Sentry\State\HubInterface'] + tags: + - { name: twig.extension } + + sentry.tracing.traceable_cache_adapter: + class: Sentry\SentryBundle\Tracing\Cache\TraceableCacheAdapter + abstract: true + arguments: ['@Sentry\State\HubInterface', '' ] + + sentry.tracing.traceable_tag_aware_cache_adapter: + class: Sentry\SentryBundle\Tracing\Cache\TraceableTagAwareCacheAdapter + abstract: true + arguments: ['@Sentry\State\HubInterface', '' ] + + Sentry\SentryBundle\Integration\IntegrationConfigurator: + arguments: [ [], '' ] + + Sentry\Integration\RequestFetcherInterface: + class: Sentry\SentryBundle\Integration\RequestFetcher + arguments: + - '@Symfony\Component\HttpFoundation\RequestStack' + - '@?Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface' + + Sentry\SentryBundle\Twig\SentryExtension: + tags: + - { name: twig.extension } + + diff --git a/tests/DependencyInjection/XmlSentryExtensionTest.php b/tests/DependencyInjection/XmlSentryExtensionTest.php new file mode 100644 index 00000000..fed6dcb8 --- /dev/null +++ b/tests/DependencyInjection/XmlSentryExtensionTest.php @@ -0,0 +1,21 @@ +markTestSkipped('XML Config files are not supported in Symfony 8.x and above.'); + } + $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/Fixtures/xml')); + $loader->load($fixtureFile . '.xml'); + } +} From c9d26b6f3e92b5690d9d8b22603969c4fdb5f5b3 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Fri, 31 Oct 2025 16:12:54 +0100 Subject: [PATCH 4/8] pipeline --- .github/workflows/tests.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 37fe3ddf..d1172beb 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -33,7 +33,7 @@ jobs: - 5.* - 6.* - 7.* - - 8.* + - 8.0.*@dev dependencies: - highest exclude: @@ -55,6 +55,20 @@ jobs: symfony-version: 7.* - php: '8.4' symfony-version: 4.4.* + - php: '7.2' + symfony-version: 8.0.*@dev + - php: '7.3' + symfony-version: 8.0.*@dev + - php: '7.4' + symfony-version: 8.0.*@dev + - php: '8.0' + symfony-version: 8.0.*@dev + - php: '8.1' + symfony-version: 8.0.*@dev + - php: '8.2' + symfony-version: 8.0.*@dev + - php: '8.3' + symfony-version: 8.0.*@dev include: - php: '7.2' symfony-version: 4.4.* @@ -123,6 +137,7 @@ jobs: symfony-version: 4.4.* - php: '8.4' dependencies: highest + symfony-version: 8.0.*@dev steps: - name: Checkout From 2852759e13e21e405cba835b24574783cbe51016 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Fri, 31 Oct 2025 17:35:55 +0100 Subject: [PATCH 5/8] wip --- .github/workflows/tests.yaml | 12 ++++++++++++ composer.json | 6 ++++-- tests/End2End/App/KernelForBufferTest.php | 6 ------ tests/End2End/App/config.yml | 1 - tests/End2End/App/config_buffer_test.yml | 10 ++++++++++ .../App/config_buffer_test_newer_versions.yml | 6 ------ tests/End2End/App/config_buffer_test_php72.yml | 13 ------------- 7 files changed, 26 insertions(+), 28 deletions(-) delete mode 100644 tests/End2End/App/config_buffer_test_newer_versions.yml delete mode 100644 tests/End2End/App/config_buffer_test_php72.yml diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index d1172beb..9a32a569 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -99,6 +99,12 @@ jobs: - name: Setup Problem Matchers for PHPUnit run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + - name: Allow Symfony 8 pre-releases + if: contains(matrix.symfony-version, '8.') + run: | + composer config minimum-stability dev + composer config prefer-stable true + # These dependencies are not used running the tests but can cause deprecation warnings so we remove them before running the tests - name: Remove unused dependencies run: composer remove vimeo/psalm phpstan/phpstan friendsofphp/php-cs-fixer --dev --no-interaction --no-update @@ -156,6 +162,12 @@ jobs: - name: Remove optional packages run: composer remove doctrine/dbal doctrine/doctrine-bundle symfony/messenger symfony/twig-bundle symfony/cache symfony/http-client --dev --no-update + - name: Allow Symfony 8 pre-releases + if: contains(matrix.symfony-version || '', '8.') + run: | + composer config minimum-stability dev + composer config prefer-stable true + - name: Install dependencies uses: ramsey/composer-install@v3 with: diff --git a/composer.json b/composer.json index ad69d107..c60dba78 100644 --- a/composer.json +++ b/composer.json @@ -4,6 +4,8 @@ "description": "Symfony integration for Sentry (http://getsentry.com)", "keywords": ["logging", "errors", "symfony", "sentry"], "homepage": "http://getsentry.com", + "minimum-stability": "dev", + "prefer-stable": true, "license": "MIT", "authors": [ { @@ -27,7 +29,7 @@ }, "require-dev": { "doctrine/dbal": "^2.13||^3.3||^4.0", - "doctrine/doctrine-bundle": "^2.6", + "doctrine/doctrine-bundle": "^2.6||^3.0", "friendsofphp/php-cs-fixer": "^2.19||^3.40", "masterminds/html5": "^2.8", "phpstan/extension-installer": "^1.0", @@ -41,7 +43,7 @@ "symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", "symfony/http-client": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", "symfony/messenger": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", - "symfony/monolog-bundle": "^3.4", + "symfony/monolog-bundle": "^3.4||^4.0", "symfony/phpunit-bridge": "^5.2.6||^6.0||^7.0||^8.0", "symfony/process": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", "symfony/security-core": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0", diff --git a/tests/End2End/App/KernelForBufferTest.php b/tests/End2End/App/KernelForBufferTest.php index c49a252e..c7aaae50 100644 --- a/tests/End2End/App/KernelForBufferTest.php +++ b/tests/End2End/App/KernelForBufferTest.php @@ -16,12 +16,6 @@ public function registerContainerConfiguration(LoaderInterface $loader): void { parent::registerContainerConfiguration($loader); $loader->load(__DIR__ . '/config_buffer_test.yml'); - - if ($this->supportsHubId()) { - $loader->load(__DIR__ . '/config_buffer_test_newer_versions.yml'); - } else { - $loader->load(__DIR__ . '/config_buffer_test_php72.yml'); - } } /** diff --git a/tests/End2End/App/config.yml b/tests/End2End/App/config.yml index af12f69e..453b050b 100644 --- a/tests/End2End/App/config.yml +++ b/tests/End2End/App/config.yml @@ -17,7 +17,6 @@ framework: router: { resource: "%routing_config_dir%/routing.yml" } secret: secret test: ~ - annotations: false php_errors: log: true # Use FS cache for testing diff --git a/tests/End2End/App/config_buffer_test.yml b/tests/End2End/App/config_buffer_test.yml index abd18707..a0e01826 100644 --- a/tests/End2End/App/config_buffer_test.yml +++ b/tests/End2End/App/config_buffer_test.yml @@ -4,6 +4,12 @@ services: - '@Sentry\State\HubInterface' - !php/const Monolog\Logger::WARNING + app.sentry.handler: + class: Sentry\Monolog\Handler + arguments: + - '@Sentry\State\HubInterface' + - !php/const Monolog\Logger::WARNING + Sentry\SentryBundle\Tests\End2End\App\Controller\BufferFlushController: autowire: true tags: @@ -31,6 +37,10 @@ services: monolog: handlers: + sentry: + type: service + id: app.sentry.handler + level: warning main: type: stream path: "%kernel.logs_dir%/%kernel.environment%.log" diff --git a/tests/End2End/App/config_buffer_test_newer_versions.yml b/tests/End2End/App/config_buffer_test_newer_versions.yml deleted file mode 100644 index aef316fb..00000000 --- a/tests/End2End/App/config_buffer_test_newer_versions.yml +++ /dev/null @@ -1,6 +0,0 @@ -monolog: - handlers: - sentry: - type: sentry - level: warning - hub_id: 'Sentry\State\HubInterface' diff --git a/tests/End2End/App/config_buffer_test_php72.yml b/tests/End2End/App/config_buffer_test_php72.yml deleted file mode 100644 index d4a64e2c..00000000 --- a/tests/End2End/App/config_buffer_test_php72.yml +++ /dev/null @@ -1,13 +0,0 @@ -services: - app.sentry.handler: - class: Sentry\Monolog\Handler - arguments: - - '@Sentry\State\HubInterface' - - !php/const Monolog\Logger::WARNING - -monolog: - handlers: - sentry: - type: service - id: app.sentry.handler - level: warning From e34686c85fd7e10d0e8a6d5a2a769d62ede8b3c1 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Mon, 3 Nov 2025 16:26:57 +0100 Subject: [PATCH 6/8] wip --- .github/workflows/tests.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 9a32a569..c69b038c 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -33,7 +33,7 @@ jobs: - 5.* - 6.* - 7.* - - 8.0.*@dev + - 8.0 dependencies: - highest exclude: @@ -56,19 +56,19 @@ jobs: - php: '8.4' symfony-version: 4.4.* - php: '7.2' - symfony-version: 8.0.*@dev + symfony-version: 8.0 - php: '7.3' - symfony-version: 8.0.*@dev + symfony-version: 8.0 - php: '7.4' - symfony-version: 8.0.*@dev + symfony-version: 8.0 - php: '8.0' - symfony-version: 8.0.*@dev + symfony-version: 8.0 - php: '8.1' - symfony-version: 8.0.*@dev + symfony-version: 8.0 - php: '8.2' - symfony-version: 8.0.*@dev + symfony-version: 8.0 - php: '8.3' - symfony-version: 8.0.*@dev + symfony-version: 8.0 include: - php: '7.2' symfony-version: 4.4.* @@ -102,7 +102,7 @@ jobs: - name: Allow Symfony 8 pre-releases if: contains(matrix.symfony-version, '8.') run: | - composer config minimum-stability dev + composer config minimum-stability beta composer config prefer-stable true # These dependencies are not used running the tests but can cause deprecation warnings so we remove them before running the tests @@ -165,7 +165,7 @@ jobs: - name: Allow Symfony 8 pre-releases if: contains(matrix.symfony-version || '', '8.') run: | - composer config minimum-stability dev + composer config minimum-stability beta composer config prefer-stable true - name: Install dependencies From 5e82e766371eab3cfbf8e0473d913b3e2cd66c69 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Thu, 6 Nov 2025 15:14:14 +0100 Subject: [PATCH 7/8] CS --- src/DependencyInjection/SentryExtension.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/DependencyInjection/SentryExtension.php b/src/DependencyInjection/SentryExtension.php index 61e58676..d752813c 100644 --- a/src/DependencyInjection/SentryExtension.php +++ b/src/DependencyInjection/SentryExtension.php @@ -298,7 +298,7 @@ private function registerHttpClientTracingConfiguration(ContainerBuilder $contai } /** - * @param string[] $integrations + * @param string[] $integrations * @param array $config * * @return array @@ -330,12 +330,12 @@ private function configureRequestIntegration(array $integrations, bool $useDefau /** * @param class-string $integrationClass - * @param array $integrations + * @param array $integrations */ private function isIntegrationEnabled(string $integrationClass, array $integrations): bool { foreach ($integrations as $integration) { - if ($integration instanceof Reference && $integrationClass === (string)$integration) { + if ($integration instanceof Reference && $integrationClass === (string) $integration) { return true; } From 6ed87a192fee038de6c681ba515dbc9f092cb6b4 Mon Sep 17 00:00:00 2001 From: Michael Hoffmann Date: Thu, 6 Nov 2025 15:23:01 +0100 Subject: [PATCH 8/8] wip --- .github/workflows/tests.yaml | 10 +++++----- composer.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index c69b038c..b5fc72d0 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -99,11 +99,11 @@ jobs: - name: Setup Problem Matchers for PHPUnit run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" - - name: Allow Symfony 8 pre-releases - if: contains(matrix.symfony-version, '8.') - run: | - composer config minimum-stability beta - composer config prefer-stable true + # - name: Allow Symfony 8 pre-releases + # if: contains(matrix.symfony-version, '8.') + # run: | + # composer config minimum-stability beta + # composer config prefer-stable true # These dependencies are not used running the tests but can cause deprecation warnings so we remove them before running the tests - name: Remove unused dependencies diff --git a/composer.json b/composer.json index c60dba78..11ea8a74 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "keywords": ["logging", "errors", "symfony", "sentry"], "homepage": "http://getsentry.com", "minimum-stability": "dev", - "prefer-stable": true, + "prefer-stable": false, "license": "MIT", "authors": [ {