Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f94607d
[Doctrine Migrations] Added Doctrine Migrations-based schema and data…
Steveb-p Jul 16, 2026
389cdcb
Fixed PHPStan generics error on ServiceLocator<Installer>
Steveb-p Jul 17, 2026
60aa2f3
[Doctrine Migrations] Inlined SQL directly into migration classes
Steveb-p Jul 17, 2026
f855ab2
[Doctrine Migrations] Reformatted long/multiline SQL using NOWDOC
Steveb-p Jul 17, 2026
a3c29bb
IBX-11939: Adopted AbstractSqlMigration for platform-separated SQL
Steveb-p Jul 21, 2026
e2fa485
IBX-11939: Aborted migration on unsupported database platform
Steveb-p Jul 22, 2026
23a8dde
IBX-11939: Added trailing semicolons to migration SQL files
Steveb-p Jul 22, 2026
0bece79
IBX-11939: Added schema/data-presence guards for legacy-install migra…
Steveb-p Jul 23, 2026
3f1dc58
IBX-11939: Recorded schema-guarded migrations as applied, not skipped
Steveb-p Jul 23, 2026
606b9a9
IBX-11939: Fixed 4.6 baseline guards to check the branch's own table …
Steveb-p Jul 23, 2026
d0a6984
IBX-11939: Added a SchemaProvider bridging Doctrine Migrations to Sch…
Steveb-p Jul 24, 2026
e712803
IBX-11939: Fixed PHP 7.4 compatibility in SchemaBuilderEventSchemaPro…
Steveb-p Jul 24, 2026
dbc8807
IBX-11939: Addressed review feedback (arrow-fn style, removed redunda…
Steveb-p Jul 27, 2026
d3c4754
IBX-11939: Removed ibexa/doctrine-migrations VCS repository entry
Steveb-p Jul 27, 2026
2485b8f
IBX-11939: Made TaggedMigrationsRunner's DependencyFactory dependency…
Steveb-p Jul 28, 2026
cad60ff
IBX-11939: Enforced list<Query> return from getQueriesFromSchemaBuild…
Steveb-p Jul 28, 2026
d966b22
Added guarded migrations for core content/URL performance indexes
Steveb-p Jul 28, 2026
018b396
Fixed guard crash on installs that never had the pre-rename table
Steveb-p Jul 29, 2026
2ae15bc
Removed pre-4.6-origin AddContentPerformanceIndexesMigration, folded …
Steveb-p Jul 29, 2026
fce94f6
Fix ibexa/doctrine-migrations constraint to track the 4.6 branch
Steveb-p Jul 30, 2026
accaaf2
Fix TaggedMigrationsRunner passing an empty Schema to every migration
Steveb-p Jul 30, 2026
076c9b6
Move core's own Doctrine Migrations into IbexaCoreBundle
Steveb-p Jul 30, 2026
cf07df6
Fix SQLite-dialect bugs in InstallSchemaMigration/ImportDataMigration…
Steveb-p Jul 30, 2026
d6f799e
Fix stale PHPStan baseline counts for LocationServiceTest.php assertI…
Steveb-p Jul 31, 2026
b223248
Merge remote-tracking branch 'origin/4.6' into doctrine-migrations-in…
Steveb-p Aug 8, 2026
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
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"symfony/validator": "^5.3.0",
"symfony/var-dumper": "^5.3.0",
"ibexa/doctrine-schema": "~4.6.0@dev",
"ibexa/doctrine-migrations": "~4.6.x-dev",
"symfony-cmf/routing": "^2.3",
"nelmio/cors-bundle": "^2.0",
"pagerfanta/pagerfanta": "^2.1",
Expand Down
72 changes: 0 additions & 72 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -5550,84 +5550,12 @@ parameters:
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Call to method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:checkParameters\(\) on a separate line has no effect\.$#'
identifier: method.resultUnused
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:__construct\(\) has parameter \$installers with no value type specified in iterable type array\.$#'
identifier: missingType.iterableValue
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:cacheClear\(\) has no return type specified\.$#'
identifier: missingType.return
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:checkCreateDatabase\(\) has no return type specified\.$#'
identifier: missingType.return
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:checkParameters\(\) has no return type specified\.$#'
identifier: missingType.return
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:checkPermissions\(\) has no return type specified\.$#'
identifier: missingType.return
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:configure\(\) has no return type specified\.$#'
identifier: missingType.return
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:executeCommand\(\) has no return type specified\.$#'
identifier: missingType.return
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:getInstaller\(\) has parameter \$type with no type specified\.$#'
identifier: missingType.parameter
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:getInstaller\(\) should return Ibexa\\Bundle\\RepositoryInstaller\\Installer\\Installer but returns false\.$#'
identifier: return.type
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\InstallPlatformCommand\:\:indexData\(\) has no return type specified\.$#'
identifier: missingType.return
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Strict comparison using \=\=\= between bool and 1 will always evaluate to false\.$#'
identifier: identical.alwaysFalse
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 1
path: src/bundle/RepositoryInstaller/Command/InstallPlatformCommand.php

-
message: '#^Method Ibexa\\Bundle\\RepositoryInstaller\\Command\\ValidatePasswordHashesCommand\:\:configure\(\) has no return type specified\.$#'
identifier: missingType.return
Expand Down
39 changes: 39 additions & 0 deletions src/bundle/Core/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public function getConfigTreeBuilder()
$this->addUrlWildcardsSection($rootNode);
$this->addOrmSection($rootNode);
$this->addUITranslationsSection($rootNode);
$this->addInstallerSection($rootNode);

// Delegate SiteAccess config to configuration parsers
$this->mainSiteAccessConfigParser->addSemanticConfig($this->generateScopeBaseNode($rootNode));
Expand Down Expand Up @@ -563,6 +564,44 @@ private function addUITranslationsSection($rootNode): ArrayNodeDefinition
->end()
->end();
}

/**
* Defines configuration for the "ibexa:install" installer.
*
* The configuration is available at:
* <code>
* ibexa:
* installer:
* schema_builder_event:
* enabled: true
* </code>
*
* @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode
*/
private function addInstallerSection(ArrayNodeDefinition $rootNode): ArrayNodeDefinition
{
return $rootNode
->children()
->arrayNode('installer')
->children()
->arrayNode('schema_builder_event')
->info('Configuration of the legacy, event-driven database schema building mechanism used by the "ibexa:install" command')
->children()
->booleanNode('enabled')
->defaultTrue()
->info(
'Whether "ibexa:install" dispatches Ibexa\Contracts\DoctrineSchema\Event\SchemaBuilderEvent ' .
'to let packages contribute their database schema via an event subscriber, as opposed to ' .
'the schema being installed from static SQL migrations. ' .
'Disable once all installed packages have migrated away from the event-driven mechanism.'
)
->end()
->end()
->end()
->end()
->end()
->end();
}
}

class_alias(Configuration::class, 'eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Configuration');
14 changes: 14 additions & 0 deletions src/bundle/Core/DependencyInjection/IbexaCoreExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ public function load(array $configs, ContainerBuilder $container)

// Base services and services overrides
$loader->load('services.yml');
// Doctrine Migrations for core's own schema, alongside the legacy SchemaBuilderEvent path
$loader->load('doctrine_migrations.yml');
// Security services
$loader->load('security.yml');
// HTTP Kernel
Expand All @@ -134,6 +136,7 @@ public function load(array $configs, ContainerBuilder $container)
$this->registerUrlWildcardsConfiguration($config, $container);
$this->registerOrmConfiguration($config, $container);
$this->registerUITranslationsConfiguration($config, $container);
$this->registerInstallerConfiguration($config, $container);

// Routing
$this->handleRouting($config, $container, $loader);
Expand Down Expand Up @@ -331,6 +334,17 @@ private function registerUITranslationsConfiguration(array $config, ContainerBui
$container->setParameter('ibexa.ui.translations.enabled', $config['ui']['translations']['enabled'] ?? false);
}

/**
* @param array<string, mixed> $config
*/
private function registerInstallerConfiguration(array $config, ContainerBuilder $container): void
{
$container->setParameter(
'ibexa.installer.schema_builder_event.enabled',
$config['installer']['schema_builder_event']['enabled'] ?? true
);
}

/**
* Handle routing parameters.
*
Expand Down
24 changes: 24 additions & 0 deletions src/bundle/Core/Resources/config/doctrine_migrations.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
services:
Ibexa\Bundle\RepositoryInstaller\Migration\InstallSchemaMigration:
autowire: true
public: false
arguments:
$connection: '@ibexa.persistence.connection'
tags:
- { name: !php/const Ibexa\Contracts\DoctrineMigrations\Migrations\IbexaMigrationTag::TAG }

Ibexa\Bundle\RepositoryInstaller\Migration\AddUrlAliasMlLinkIndexMigration:
autowire: true
public: false
arguments:
$connection: '@ibexa.persistence.connection'
tags:
- { name: !php/const Ibexa\Contracts\DoctrineMigrations\Migrations\IbexaMigrationTag::TAG }

Ibexa\Bundle\RepositoryInstaller\Migration\ImportDataMigration:
autowire: true
public: false
arguments:
$connection: '@ibexa.persistence.connection'
tags:
- { name: !php/const Ibexa\Contracts\DoctrineMigrations\Migrations\IbexaMigrationTag::TAG }
Loading