Skip to content

Commit 39eccfb

Browse files
Litarnuscleptric
andauthored
feat: add support for symfony 8 (#968)
Co-authored-by: Michael Hoffmann <michi@sentry.io>
1 parent 11543b2 commit 39eccfb

File tree

13 files changed

+219
-196
lines changed

13 files changed

+219
-196
lines changed

.github/workflows/tests.yaml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ jobs:
3333
- 5.*
3434
- 6.*
3535
- 7.*
36+
- 8.*
3637
dependencies:
3738
- highest
3839
exclude:
@@ -54,6 +55,20 @@ jobs:
5455
symfony-version: 7.*
5556
- php: '8.4'
5657
symfony-version: 4.4.*
58+
- php: '7.2'
59+
symfony-version: 8.*
60+
- php: '7.3'
61+
symfony-version: 8.*
62+
- php: '7.4'
63+
symfony-version: 8.*
64+
- php: '8.0'
65+
symfony-version: 8.*
66+
- php: '8.1'
67+
symfony-version: 8.*
68+
- php: '8.2'
69+
symfony-version: 8.*
70+
- php: '8.3'
71+
symfony-version: 8.*
5772
include:
5873
- php: '7.2'
5974
symfony-version: 4.4.*
@@ -92,7 +107,7 @@ jobs:
92107
uses: ramsey/composer-install@v3
93108
with:
94109
dependency-versions: ${{ matrix.dependencies }}
95-
composer-options: --prefer-dist
110+
composer-options: --prefer-dist --no-security-blocking
96111

97112
- name: Run tests
98113
run: vendor/bin/phpunit --coverage-clover=build/coverage-report.xml
@@ -122,6 +137,7 @@ jobs:
122137
symfony-version: 4.4.*
123138
- php: '8.4'
124139
dependencies: highest
140+
symfony-version: 8.*
125141

126142
steps:
127143
- name: Checkout
@@ -137,14 +153,18 @@ jobs:
137153
- name: Setup Problem Matchers for PHPUnit
138154
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
139155

156+
# These dependencies are not used running the tests but can cause deprecation warnings so we remove them before running the tests
157+
- name: Remove unused dependencies
158+
run: composer remove vimeo/psalm phpstan/phpstan friendsofphp/php-cs-fixer --dev --no-interaction --no-update
159+
140160
- name: Remove optional packages
141161
run: composer remove doctrine/dbal doctrine/doctrine-bundle symfony/messenger symfony/twig-bundle symfony/cache symfony/http-client --dev --no-update
142162

143163
- name: Install dependencies
144164
uses: ramsey/composer-install@v3
145165
with:
146166
dependency-versions: ${{ matrix.dependencies }}
147-
composer-options: --prefer-dist
167+
composer-options: --prefer-dist --no-security-blocking
148168

149169
- name: Run tests
150170
run: vendor/bin/phpunit --coverage-clover=build/coverage-report.xml

composer.json

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,39 +15,39 @@
1515
"php": "^7.2||^8.0",
1616
"guzzlehttp/psr7": "^2.1.1",
1717
"jean85/pretty-package-versions": "^1.5||^2.0",
18-
"sentry/sentry": "^4.16.0",
18+
"sentry/sentry": "^4.18",
1919
"symfony/cache-contracts": "^1.1||^2.4||^3.0",
20-
"symfony/config": "^4.4.20||^5.0.11||^6.0||^7.0",
21-
"symfony/console": "^4.4.20||^5.0.11||^6.0||^7.0",
22-
"symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0||^7.0",
23-
"symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0||^7.0",
24-
"symfony/http-kernel": "^4.4.20||^5.0.11||^6.0||^7.0",
20+
"symfony/config": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
21+
"symfony/console": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
22+
"symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
23+
"symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
24+
"symfony/http-kernel": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
2525
"symfony/polyfill-php80": "^1.22",
26-
"symfony/psr-http-message-bridge": "^1.2||^2.0||^6.4||^7.0"
26+
"symfony/psr-http-message-bridge": "^1.2||^2.0||^6.4||^7.0||^8.0"
2727
},
2828
"require-dev": {
2929
"doctrine/dbal": "^2.13||^3.3||^4.0",
30-
"doctrine/doctrine-bundle": "^2.6",
30+
"doctrine/doctrine-bundle": "^2.6||^3.0",
3131
"friendsofphp/php-cs-fixer": "^2.19||^3.40",
3232
"masterminds/html5": "^2.8",
3333
"phpstan/extension-installer": "^1.0",
3434
"phpstan/phpstan": "1.12.5",
3535
"phpstan/phpstan-phpunit": "1.4.0",
3636
"phpstan/phpstan-symfony": "1.4.10",
3737
"phpunit/phpunit": "^8.5.40||^9.6.21",
38-
"symfony/browser-kit": "^4.4.20||^5.0.11||^6.0||^7.0",
39-
"symfony/cache": "^4.4.20||^5.0.11||^6.0||^7.0",
40-
"symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0||^7.0",
41-
"symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0||^7.0",
42-
"symfony/http-client": "^4.4.20||^5.0.11||^6.0||^7.0",
43-
"symfony/messenger": "^4.4.20||^5.0.11||^6.0||^7.0",
44-
"symfony/monolog-bundle": "^3.4",
45-
"symfony/phpunit-bridge": "^5.2.6||^6.0||^7.0",
46-
"symfony/process": "^4.4.20||^5.0.11||^6.0||^7.0",
47-
"symfony/security-core": "^4.4.20||^5.0.11||^6.0||^7.0",
48-
"symfony/security-http": "^4.4.20||^5.0.11||^6.0||^7.0",
49-
"symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0||^7.0",
50-
"symfony/yaml": "^4.4.20||^5.0.11||^6.0||^7.0",
38+
"symfony/browser-kit": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
39+
"symfony/cache": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
40+
"symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
41+
"symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
42+
"symfony/http-client": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
43+
"symfony/messenger": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
44+
"symfony/monolog-bundle": "^3.4||^4.0",
45+
"symfony/phpunit-bridge": "^5.2.6||^6.0||^7.0||^8.0",
46+
"symfony/process": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
47+
"symfony/security-core": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
48+
"symfony/security-http": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
49+
"symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
50+
"symfony/yaml": "^4.4.20||^5.0.11||^6.0||^7.0||^8.0",
5151
"vimeo/psalm": "^4.3||^5.16.0"
5252
},
5353
"suggest": {

src/DependencyInjection/Configuration.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Symfony\Bundle\TwigBundle\TwigBundle;
1010
use Symfony\Component\Cache\CacheItem;
1111
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
12+
use Symfony\Component\Config\Definition\Builder\NodeParentInterface;
1213
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
1314
use Symfony\Component\Config\Definition\ConfigurationInterface;
1415
use Symfony\Component\HttpClient\HttpClient;
@@ -19,12 +20,14 @@ final class Configuration implements ConfigurationInterface
1920
{
2021
/**
2122
* {@inheritdoc}
23+
*
24+
* @phpstan-return TreeBuilder<'array'>
2225
*/
2326
public function getConfigTreeBuilder(): TreeBuilder
2427
{
2528
$treeBuilder = new TreeBuilder('sentry');
2629

27-
/** @var ArrayNodeDefinition $rootNode */
30+
/** @phpstan-var ArrayNodeDefinition<NodeParentInterface|null> $rootNode */
2831
$rootNode = method_exists(TreeBuilder::class, 'getRootNode')
2932
? $treeBuilder->getRootNode()
3033
: $treeBuilder->root('sentry');
@@ -38,6 +41,7 @@ public function getConfigTreeBuilder(): TreeBuilder
3841
$inAppExcludes[] = '%kernel.build_dir%';
3942
}
4043

44+
// @phpstan-ignore-next-line
4145
$rootNode
4246
->children()
4347
->scalarNode('dsn')
@@ -176,8 +180,12 @@ public function getConfigTreeBuilder(): TreeBuilder
176180
return $treeBuilder;
177181
}
178182

183+
/**
184+
* @phpstan-param ArrayNodeDefinition<NodeParentInterface|null> $rootNode
185+
*/
179186
private function addMessengerSection(ArrayNodeDefinition $rootNode): void
180187
{
188+
// @phpstan-ignore-next-line
181189
$rootNode
182190
->children()
183191
->arrayNode('messenger')
@@ -190,8 +198,12 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode): void
190198
->end();
191199
}
192200

201+
/**
202+
* @phpstan-param ArrayNodeDefinition<NodeParentInterface|null> $rootNode
203+
*/
193204
private function addDistributedTracingSection(ArrayNodeDefinition $rootNode): void
194205
{
206+
// @phpstan-ignore-next-line
195207
$rootNode
196208
->children()
197209
->arrayNode('tracing')

src/DependencyInjection/SentryExtension.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,18 @@ public function getNamespace(): string
6262
*/
6363
protected function loadInternal(array $mergedConfig, ContainerBuilder $container): void
6464
{
65-
$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
66-
$loader->load('services.xml');
65+
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
66+
$loader->load('services.yaml');
6767

6868
if (!$container->hasParameter('env(SENTRY_RELEASE)')) {
6969
$container->setParameter('env(SENTRY_RELEASE)', PrettyVersions::getRootPackageVersion()->getPrettyVersion());
7070
}
7171

72+
// Remove Twig extension service if Twig is not installed to avoid autoloading failures on Symfony 8
73+
if (!class_exists(\Twig\Extension\AbstractExtension::class)) {
74+
$container->removeDefinition(\Sentry\SentryBundle\Twig\SentryExtension::class);
75+
}
76+
7277
$this->registerConfiguration($container, $mergedConfig);
7378
$this->registerErrorListenerConfiguration($container, $mergedConfig);
7479
$this->registerMessengerListenerConfiguration($container, $mergedConfig['messenger']);
@@ -244,6 +249,19 @@ private function registerDbalTracingConfiguration(ContainerBuilder $container, a
244249
$container->setParameter('sentry.tracing.dbal.enabled', $isConfigEnabled);
245250
$container->setParameter('sentry.tracing.dbal.connections', $isConfigEnabled ? $config['dbal']['connections'] : []);
246251

252+
$factoryServiceId = 'sentry.tracing.dbal.connection_factory';
253+
if ($container->hasDefinition($factoryServiceId)) {
254+
$factoryClass = \Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactoryForV2V3::class;
255+
256+
// On Symfony 8+, the container validates FQCN-like service IDs at compile time. Classes provided
257+
// via aliases.php aren’t considered during this check, so FQCN IDs without loadable classes fail
258+
if (class_exists(\Doctrine\DBAL\Result::class) && !interface_exists(\Doctrine\DBAL\VersionAwarePlatformDriver::class)) {
259+
$factoryClass = \Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverConnectionFactoryForV4::class;
260+
}
261+
262+
$container->getDefinition($factoryServiceId)->setClass($factoryClass);
263+
}
264+
247265
if (!$isConfigEnabled) {
248266
$container->removeDefinition(ConnectionConfigurator::class);
249267
$container->removeDefinition(TracingDriverMiddleware::class);

src/Resources/config/services.xml

Lines changed: 0 additions & 144 deletions
This file was deleted.

0 commit comments

Comments
 (0)