- Issue created by @a.dmitriiev
I will start with error report during deployment:
[notice] Database updates start.
> [error] AssertionError: The file specified by the given app root, relative path and file name (/var/www/html/docroot/profiles/contrib/profile/themes/my_admintheme.info.yml) do not exist. in assert() (line 68 of /var/www/html/docroot/core/lib/Drupal/Core/Extension/Extension.php) #0 /var/www/html/docroot/core/lib/Drupal/Core/Extension/Extension.php(68): assert(false, 'The file specif...')
> #1 /var/www/html/docroot/modules/contrib/config_sync/src/ConfigSyncLister.php(152): Drupal\Core\Extension\Extension->__construct('/var/www/html/d...', 'theme', 'profiles/contri...')
This happens due to the fact, that admin theme that was used in the project was moved outside of the profile and became a separate package. This can be fixed with drush cr
easily, but in case of deployment with CI/CD using drush deploy
command only, it won't work and throw the exception. Normally this could be fixed with update hook that resets the extension list cache. But, the assertion error is thrown even before any updates are executed, because this happens on container build time:
#0 /var/www/html/docroot/core/lib/Drupal/Core/Extension/Extension.php(68): assert()
#1 /var/www/html/docroot/modules/contrib/config_sync/src/ConfigSyncLister.php(152): Drupal\Core\Extension\Extension->__construct()
#2 /var/www/html/docroot/modules/contrib/config_sync/src/ConfigSyncLister.php(135): Drupal\config_sync\ConfigSyncLister->getExtensionChangelist()
#3 /var/www/html/docroot/modules/contrib/config_sync/src/Plugin/ConfigFilter/SyncFilterDeriver.php(90): Drupal\config_sync\ConfigSyncLister->getExtensionChangelists()
#4 /var/www/html/docroot/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php(101): Drupal\config_sync\Plugin\ConfigFilter\SyncFilterDeriver->getDerivativeDefinitions()
#5 /var/www/html/docroot/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php(87): Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator->getDerivatives()
#6 /var/www/html/docroot/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php(291): Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator->getDefinitions()
#7 /var/www/html/docroot/modules/contrib/config_filter/src/Plugin/ConfigFilterPluginManager.php(70): Drupal\Core\Plugin\DefaultPluginManager->findDefinitions()
#8 /var/www/html/docroot/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php(181): Drupal\config_filter\Plugin\ConfigFilterPluginManager->findDefinitions()
#9 /var/www/html/docroot/modules/contrib/config_filter/src/Plugin/ConfigFilterPluginManager.php(37): Drupal\Core\Plugin\DefaultPluginManager->getDefinitions()
#10 /var/www/html/docroot/modules/contrib/config_filter/src/ConfigFilterStorageFactory.php(88): Drupal\config_filter\Plugin\ConfigFilterPluginManager->getFiltersForStorages()
#11 /var/www/html/docroot/modules/contrib/config_filter/src/ConfigFilterStorageFactory.php(54): Drupal\config_filter\ConfigFilterStorageFactory->getFilteredStorage()
#12 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1130): Drupal\config_filter\ConfigFilterStorageFactory->getSync()
#13 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(618): Symfony\Component\DependencyInjection\ContainerBuilder->createService()
#14 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1265): Symfony\Component\DependencyInjection\ContainerBuilder->doGet()
#15 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1213): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices()
#16 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1621): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices()
#17 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1167): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod()
#18 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(618): Symfony\Component\DependencyInjection\ContainerBuilder->createService()
#19 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1265): Symfony\Component\DependencyInjection\ContainerBuilder->doGet()
#20 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1213): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices()
#21 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1621): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices()
#22 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1167): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod()
#23 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(618): Symfony\Component\DependencyInjection\ContainerBuilder->createService()
#24 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(558): Symfony\Component\DependencyInjection\ContainerBuilder->doGet()
#25 /var/www/html/vendor/drush/drush/src/Boot/DrupalBoot8.php(288): Symfony\Component\DependencyInjection\ContainerBuilder->get()
#26 /var/www/html/vendor/drush/drush/src/Boot/DrupalBoot8.php(251): Drush\Boot\DrupalBoot8->addDrupalModuleDrushCommands()
#27 /var/www/html/vendor/drush/drush/src/Boot/BootstrapManager.php(291): Drush\Boot\DrupalBoot8->bootstrapDrupalFull()
#28 /var/www/html/vendor/drush/drush/src/Boot/BootstrapManager.php(432): Drush\Boot\BootstrapManager->doBootstrap()
#29 /var/www/html/vendor/drush/drush/src/Boot/BootstrapManager.php(384): Drush\Boot\BootstrapManager->bootstrapToPhaseIndex()
#30 /var/www/html/vendor/drush/drush/src/Boot/BootstrapHook.php(32): Drush\Boot\BootstrapManager->bootstrapToPhase()
#31 /var/www/html/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php(44): Drush\Boot\BootstrapHook->initialize()
#32 /var/www/html/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php(36): Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->doInitializeHook()
#33 /var/www/html/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php(29): Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->callInitializeHook()
#34 /var/www/html/vendor/consolidation/annotated-command/src/CommandProcessor.php(145): Consolidation\AnnotatedCommand\Hooks\Dispatchers\InitializeHookDispatcher->initialize()
#35 /var/www/html/vendor/consolidation/annotated-command/src/AnnotatedCommand.php(375): Consolidation\AnnotatedCommand\CommandProcessor->initializeHook()
#36 /var/www/html/vendor/symfony/console/Command/Command.php(221): Consolidation\AnnotatedCommand\AnnotatedCommand->initialize()
#37 /var/www/html/vendor/symfony/console/Application.php(1039): Symfony\Component\Console\Command\Command->run()
#38 /var/www/html/vendor/symfony/console/Application.php(275): Symfony\Component\Console\Application->doRunCommand()
#39 /var/www/html/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun()
#40 /var/www/html/vendor/drush/drush/src/Runtime/Runtime.php(124): Symfony\Component\Console\Application->run()
#41 /var/www/html/vendor/drush/drush/src/Runtime/Runtime.php(51): Drush\Runtime\Runtime->doRun()
#42 /var/www/html/vendor/drush/drush/drush.php(72): Drush\Runtime\Runtime->run()
#43 /var/www/html/vendor/drush/drush/drush(4): require('...')
#44 /var/www/html/vendor/bin/drush(117): include('...')
#45 {main}
To be more precised in this Deriver Plugin class SyncFilterDeriver. This all happens only because derivatives at the moment are dependent on extension change list. And here comes the question/solution:
Would it be possible to use getSyncExtensions
from ConfigSyncExtensionsTrait
instead of getExtensionChangelists
for derivatives definition, or is it crucial to have only extensions with changes as plugin derivatives?
If proposed resolution is ok, create patch or MR and change getExtensionChangelists
to getSyncExtensions
None
It will be necessary to set getSyncExtensions
as public method and maybe add it to ConfigSyncListerInterface
None
Active
3.0
Code