composer name continue; } if (str_ends_with($config['extra']['shopware-plugin-class'], $pluginName)) { $pluginMapping[$config['name']] = $pluginName; } } // collect dependencies foreach ($composer['packages'] as $config) { if (!isset($pluginMapping[$config['name']])) { // if the composer.json doesn't belong to a shopware module // or doesn't have dependencies, ignore it continue; } $dependencies[$config['name']] = array_filter(array_keys($config['require'] ?? []), static function ($composerName) use ($pluginMapping) { // only add dependencies between shopware modules return isset($pluginMapping[$composerName]); }); } } $sorter = new FixedArraySort(); foreach ($dependencies as $name => $dep) { $sorter->add($name, $dep); } return array_map(static function ($name) use ($parsedPlugins, $pluginMapping) { return $parsedPlugins[$pluginMapping[$name]]; }, $sorter->sort()); } task('sw:plugin:activate:all', static function () { invoke('sw:plugin:refresh'); foreach (getSortedPlugins() as $pluginInfo) { [ $plugin, $label, $version, $upgrade, $author, $installed, $active, $upgradeable, ] = $pluginInfo; if ($installed === 'No' || $active === 'No') { run("cd {{release_or_current_path}} && bin/console plugin:install --activate $plugin"); } } }); task('sw:plugin:migrate:all', static function () { invoke('sw:plugin:refresh'); foreach (getSortedPlugins() as $pluginInfo) { [ $plugin, $label, $version, $upgrade, $author, $installed, $active, $upgradeable, ] = $pluginInfo; if ($installed === 'Yes' || $active === 'Yes') { run("cd {{release_or_current_path}} && bin/console database:migrate --all $plugin || true"); } } }); /** * Grouped SW deploy tasks */ task('sw:deploy', [ 'sw:build', 'sw:plugin:activate:all', 'sw:database:migrate', 'sw:plugin:migrate:all', 'sw:theme:compile', 'sw:cache:clear', ]); /** * Main task */ desc('Deploy your project'); task('deploy', [ 'deploy:prepare', 'sw:deploy', 'deploy:clear_paths', 'sw:cache:warmup', 'deploy:publish', ]);