Skip to content
Open
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
34 changes: 26 additions & 8 deletions .github/workflows/php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
name: PHP ${{ matrix.php-versions }}
Expand Down Expand Up @@ -51,7 +52,7 @@ jobs:
run: composer validate --strict

- name: Install dependencies
run: composer install --prefer-dist --no-progress
run: composer install --no-blocking --prefer-dist --no-progress

- name: Run test suite
run: composer run-script tests
Expand All @@ -60,8 +61,25 @@ jobs:
name: Compatibility between prime versions
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
prime-versions: ['~1.2.0', '~1.3.0', '~2.0.0', '~2.1.0', '~2.2.0']
versions:
- prime: '~1.2.0'
php: '8.0'
- prime: '~1.3.0'
php: '8.0'
- prime: '~2.0.0'
php: '8.0'
- prime: '~2.1.0'
php: '8.0'
- prime: '~2.2.0'
php: '8.0'
- prime: '~2.3.0'
php: '8.1'
- prime: '~3.0.0'
php: '8.4'
- prime: 'dev-chore-FRAM-232-modernize-code as 3.0.0'
php: '8.4'

steps:
- uses: actions/checkout@v2
Expand All @@ -74,7 +92,7 @@ jobs:
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.0
php-version: ${{ matrix.versions.php }}
extensions: json
ini-values: date.timezone=Europe/Paris

Expand All @@ -94,8 +112,8 @@ jobs:
FLUSH PRIVILEGES;
EOF

- name: Install prime ${{ matrix.prime-versions }}
run: composer require "b2pweb/bdf-prime:${{ matrix.prime-versions }}" --with-all-dependencies
- name: Install prime ${{ matrix.versions.prime }}
run: composer require --no-blocking "b2pweb/bdf-prime:${{ matrix.versions.prime }}" --with-all-dependencies

- name: Run test suite
run: composer run-script tests
Expand Down Expand Up @@ -139,7 +157,7 @@ jobs:
uses: supercharge/mongodb-github-action@1.7.0

- name: Install mongo driver
run: composer require "b2pweb/bdf-prime-mongodb:~2.0" --with-all-dependencies
run: composer require --no-blocking "b2pweb/bdf-prime-mongodb:~2.0" --with-all-dependencies

- name: Run test suite
run: composer run-script tests
Expand Down Expand Up @@ -183,7 +201,7 @@ jobs:
uses: supercharge/mongodb-github-action@1.7.0

- name: Install mongo driver
run: composer require "b2pweb/bdf-prime-shell" --with-all-dependencies
run: composer require --no-blocking "b2pweb/bdf-prime-shell" --with-all-dependencies

- name: Run test suite
run: composer run-script tests
Expand Down Expand Up @@ -224,7 +242,7 @@ jobs:
EOF

- name: Install symfony clock
run: composer require "symfony/clock" --with-all-dependencies
run: composer require --no-blocking "symfony/clock" --with-all-dependencies

- name: Run test suite
run: composer run-script tests
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
*/
class IgnorePrimeAnnotationsPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
public function process(ContainerBuilder $container): void
{
if (!class_exists(AnnotationReader::class)) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public function __construct(string $service = ChainFactory::class, string $loade
$this->tag = $loaderTag;
}

public function process(ContainerBuilder $container)
public function process(ContainerBuilder $container): void
{
if (!$container->hasDefinition($this->service)) {
return;
Expand Down
2 changes: 1 addition & 1 deletion DependencyInjection/Compiler/PrimeMiddlewarePass.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function __construct(string $loaderTag = self::TAG)
$this->tag = $loaderTag;
}

public function process(ContainerBuilder $container)
public function process(ContainerBuilder $container): void
{
// Skip if middleware are not available on the installed version of doctrine/dbal
if (!\interface_exists(Middleware::class)) {
Expand Down
73 changes: 57 additions & 16 deletions DependencyInjection/PrimeExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Bdf\PrimeBundle\DependencyInjection;

use Bdf\Prime\Cache\CachePoolAdapter;
use Bdf\Prime\Cache\DoctrineCacheAdapter;
use Bdf\Prime\Configuration as PrimeConfiguration;
use Bdf\Prime\Connection\ConnectionRegistry;
Expand Down Expand Up @@ -32,6 +33,7 @@
use Symfony\Bridge\Doctrine\Middleware\Debug\DebugDataHolder;
use Symfony\Bridge\Doctrine\Middleware\Debug\Middleware as ProfilingMiddleware;
use Symfony\Component\Cache\Psr16Cache;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Loader\FileLoader;
use Symfony\Component\DependencyInjection\ChildDefinition;
Expand All @@ -46,14 +48,15 @@
*/
class PrimeExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
public function load(array $configs, ContainerBuilder $container): void
{
$configuration = $this->getConfiguration($configs, $container);
$config = $this->processConfiguration($configuration, $configs);

$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('prime.yaml');
$loader->load('collector.yaml');
$this->configureCollector($container);

if (\class_exists(LoggerMiddleware::class)) {
$loader->load('middlewares.yaml');
Expand Down Expand Up @@ -83,6 +86,7 @@ public function load(array $configs, ContainerBuilder $container)
$container->setParameter('prime.locatorizable', $config['activerecord']);

$this->configurePrime21($container);
$this->configureLegacyCommands($container);
}

public function configureConnection(array $config, ContainerBuilder $container)
Expand Down Expand Up @@ -253,6 +257,35 @@ private function configurePrime21(ContainerBuilder $container): void
}
}

/**
* Register CLI commands deleted from prime 3.0, if exists.
*/
private function configureLegacyCommands(ContainerBuilder $container): void
{
if (\class_exists('Bdf\Prime\Console\GraphCommand')) {
$container->register('prime.graph_command', 'Bdf\Prime\Console\GraphCommand')
->addArgument(new Reference(ServiceLocator::class))
->addTag('console.command')
;
}

if (\class_exists('Bdf\Prime\Console\MapperCommand')) {
$container->register('prime.mapper_command', 'Bdf\Prime\Console\MapperCommand')
->addArgument(new Reference(ServiceLocator::class))
->addTag('console.command')
;
}
}

private function configureCollector(ContainerBuilder $container): void
{
if (\class_exists('Doctrine\DBAL\Logging\DebugStack')) {
$container->getDefinition(PrimeDataCollector::class)
->addMethodCall('addLogger', ['', new Reference('prime.logger.profiling')])
;
}
}

public function mergeConfiguration(array $globalConfig, array $config): array
{
return [
Expand Down Expand Up @@ -287,6 +320,7 @@ public function createConfiguration(string $name, array $config, ContainerBuilde

$logger = null;
$supportsMiddleware = $container->hasDefinition('prime.middleware.logger');
$supportsLegacySqlLogger = \method_exists(PrimeConfiguration::class, 'setSQLLogger');

// Mongo driver for Prime does not support middleware prior to introduction of MongoConnectionFactory
// So we must use the legacy SQLLogger
Expand All @@ -306,15 +340,17 @@ public function createConfiguration(string $name, array $config, ContainerBuilde
}

if ($config['profiling']) {
$profilingLogger = new Reference('prime.logger.profiling');
if ($supportsLegacySqlLogger) {
$profilingLogger = new Reference('prime.logger.profiling');

if (null !== $logger) {
$chainLogger = $container->findDefinition('prime.logger.chain');
$chainLogger->replaceArgument(0, [$logger, $profilingLogger]);
if (null !== $logger) {
$chainLogger = $container->findDefinition('prime.logger.chain');
$chainLogger->replaceArgument(0, [$logger, $profilingLogger]);

$logger = new Reference('prime.logger.chain');
} else {
$logger = $profilingLogger;
$logger = new Reference('prime.logger.chain');
} else {
$logger = $profilingLogger;
}
}

// Symfony 7 : new profiler middleware
Expand Down Expand Up @@ -344,7 +380,7 @@ public function createConfiguration(string $name, array $config, ContainerBuilde
}
}

if ($logger) {
if ($logger && $supportsLegacySqlLogger) {
$configuration->addMethodCall('setSQLLogger', [$logger]);
}

Expand Down Expand Up @@ -387,12 +423,17 @@ private function createResultCacheReference(string $namespace, array $config, Co

if (isset($config['pool'])) {
if (!$container->has($namespace)) {
$definition = $container->register($namespace.'.doctrine-provider', DoctrineProvider::class);
$definition->setFactory([DoctrineProvider::class, 'wrap']);
$definition->addArgument(new Reference($config['pool']));

$definition = $container->register($namespace, DoctrineCacheAdapter::class);
$definition->addArgument(new Reference($namespace.'.doctrine-provider'));
if (\class_exists(DoctrineCacheAdapter::class)) {
$definition = $container->register($namespace.'.doctrine-provider', DoctrineProvider::class);
$definition->setFactory([DoctrineProvider::class, 'wrap']);
$definition->addArgument(new Reference($config['pool']));

$definition = $container->register($namespace, DoctrineCacheAdapter::class);
$definition->addArgument(new Reference($namespace.'.doctrine-provider'));
} else {
$definition = $container->register($namespace, CachePoolAdapter::class);
$definition->addArgument(new Reference($config['pool']));
}
}

return new Reference($namespace);
Expand Down Expand Up @@ -449,7 +490,7 @@ private function cleanConnectionOptions(array $options): array
return $options;
}

public function getConfiguration(array $config, ContainerBuilder $container)
public function getConfiguration(array $config, ContainerBuilder $container): ?ConfigurationInterface
{
return new Configuration($container->getParameter('kernel.debug'));
}
Expand Down
2 changes: 0 additions & 2 deletions Resources/config/collector.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ services:
public: true
class: 'Bdf\PrimeBundle\Collector\PrimeDataCollector'
arguments: ['@Bdf\Prime\Persistence\PrimeManagerRegistry', false, null]
calls:
- ['addLogger', ['', '@prime.logger.profiling']]
tags:
- { name: 'data_collector', template: '@Doctrine/Collector/db.html.twig', id: 'db', 'priority': 250 }

Expand Down
14 changes: 0 additions & 14 deletions Resources/config/prime.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -199,13 +199,6 @@ services:
tags:
- { name: 'console.command' }

prime.graph_command:
class: 'Bdf\Prime\Console\GraphCommand'
arguments:
- '@prime'
tags:
- { name: 'console.command' }

prime.hydrator_command:
class: 'Bdf\Prime\Console\HydratorGenerationCommand'
arguments:
Expand All @@ -214,13 +207,6 @@ services:
tags:
- { name: 'console.command' }

prime.mapper_command:
class: 'Bdf\Prime\Console\MapperCommand'
arguments:
- '@prime'
tags:
- { name: 'console.command' }

prime.upgrade_command:
class: 'Bdf\Prime\Console\UpgraderCommand'
arguments:
Expand Down
4 changes: 2 additions & 2 deletions TestingPrimeBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
*/
class TestingPrimeBundle extends Bundle
{
public function boot()
public function boot(): void
{
Prime::configure($this->container);
TestPack::pack()->initialize();
}

public function shutdown()
public function shutdown(): void
{
TestPack::pack()->clear();
TestPack::pack()->destroy();
Expand Down
Loading
Loading