From 26582e574fa6062bb8809567b61f904ba8c54787 Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen@paragon-es.de> Date: Fri, 3 Jul 2020 10:58:34 +0200 Subject: [PATCH] Split post install and post update tasks --- src/Handler.php | 156 ++++++++++++++++++++++++++---------------------- src/Plugin.php | 14 ++++- 2 files changed, 95 insertions(+), 75 deletions(-) diff --git a/src/Handler.php b/src/Handler.php index 8e30f10..cfce435 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -41,13 +41,31 @@ class Handler { $this->io = $io; } + /** + * Configure composer.json. + */ + public function configureComposerJson() { + $fs = new Filesystem(); + $options = $this->getOptions(); + $projectRoot = getcwd(); + + // Append DrupalSpoon related components to composer.json. + $jsonFile = new JsonFile($projectRoot . '/composer.json.disabled'); + $content = []; + if ($jsonFile->exists()) { + $content = $jsonFile->read(); + } + $content = array_merge_recursive($content, $options); + $jsonFile->write($content); + $fs->remove($projectRoot . '/composer.json'); + $fs->rename($projectRoot . '/composer.json.disabled', $projectRoot . '/composer.json'); + } + /** * Configure Drupal project for CI and/or local tests. */ public function configureProject() { - $options = $this->getOptions(); $fs = new Filesystem(); - $installationManager = $this->composer->getInstallationManager(); // Directory where the root project is being created. $projectRoot = getcwd(); @@ -61,20 +79,11 @@ class Handler { } $fs->mkdir($moduleRoot); foreach (scandir($projectRoot) as $item) { - if (!in_array($item, ['.git', 'vemdor', 'web'])) { + if (!in_array($item, ['.', '..', '.git', '.idea', 'vemdor', 'web'])) { $rel = $fs->makePathRelative($projectRoot, $moduleRoot); - $fs->symlink($rel, $moduleRoot . "/$item"); + $fs->symlink($rel . "/$item", $moduleRoot . "/$item"); } } - - // Append DrupalSpoon related components to composer.json. - $jsonFile = new JsonFile($projectRoot . '/composer.json'); - $content = []; - if ($jsonFile->exists()) { - $content = $jsonFile->read(); - } - $content = array_merge_recursive($content, $options); - $jsonFile->write($content); } /** @@ -86,71 +95,72 @@ class Handler { protected function getOptions(): array { $extra = $this->composer->getPackage()->getExtra() + ['drupalspoons' => []]; return $extra['drupalspoons'] + [ - 'repositories' => [ - [ - 'type' => 'composer', - 'url' => 'https://packages.drupal.org/8', - ], - ], - 'require_dev' => [ - 'composer/installers' => '^1', - 'drupal/core-composer-scaffold' => '^8.8', - 'cweagans/composer-patches' => '~1.0', - 'drupal/core-recommended' => '^8.8', - 'drupal/core-dev' => '^8.8', - 'drush/drush' => '^10', - 'mglaman/phpstan-drupal' => '^0.12', - 'phpstan/phpstan-deprecation-rules' => '^0.12', - 'php-parallel-lint/php-parallel-lint' => '^1.2', - 'zaporylie/composer-drupal-optimizations' => '^1.0', - ], - 'scripts' => [ - 'si' => 'drush si -v --db-url=${SIMPLETEST_DB:-mysql://root:password@mariadb/db}', - 'phpcs' => 'phpcs --runtime-set ignore_warnings_on_exit 1 --runtime-set ignore_errors_on_exit 1 web/modules/custom', - 'lint' => 'parallel-lint --exclude web --exclude vendor .', - 'webserver' => 'cd web && php -S 0.0.0.0:8888 .ht.router.php', - 'chromedriver' => 'chromedriver --port=9515 --verbose --whitelisted-ips --log-path=/tmp/chromedriver.log --no-sandbox', - 'unit' => 'phpunit --verbose web/modules/custom', - 'phpstan' => 'phpstan analyse web/modules/custom', - 'stylelint' => 'yarn --silent --cwd web/core stylelint --formatter verbose --config ./.stylelintrc.json ../modules/custom/**/*.css', - 'eslint' => 'yarn --silent --cwd web/core eslint -c ./.eslintrc.json ../modules/custom', - ], - 'config' => [ - 'process-timeout' => 36000, - ], - 'extra' => [ - 'installer-paths' => [ - 'web/core' => [ - 0 => 'type:drupal-core', - ], - 'web/libraries/{$name}' => [ - 0 => 'type:drupal-library', - ], - 'web/modules/contrib/{$name}' => [ - 0 => 'type:drupal-module', - ], - 'web/profiles/{$name}' => [ - 0 => 'type:drupal-profile', - ], - 'web/themes/{$name}' => [ - 0 => 'type:drupal-theme', - ], - 'drush/{$name}' => [ - 0 => 'type:drupal-drush', + 'repositories' => [ + [ + 'type' => 'composer', + 'url' => 'https://packages.drupal.org/8', ], ], - 'drupal-scaffold' => [ - 'locations' => [ - 'web-root' => 'web/', - ], + 'require_dev' => [ + 'lakedrops/drupal-spoons' => 'dev-master', + 'composer/installers' => '^1', + 'drupal/core-composer-scaffold' => '^8.8', + 'cweagans/composer-patches' => '~1.0', + 'drupal/core-recommended' => '^8.8', + 'drupal/core-dev' => '^8.8', + 'drush/drush' => '^10', + 'mglaman/phpstan-drupal' => '^0.12', + 'phpstan/phpstan-deprecation-rules' => '^0.12', + 'php-parallel-lint/php-parallel-lint' => '^1.2', + 'zaporylie/composer-drupal-optimizations' => '^1.0', ], - 'drush' => [ - 'services' => [ - 'drush.services.yml' => '^9 || ^10', + 'scripts' => [ + 'si' => 'drush si -v --db-url=${SIMPLETEST_DB:-mysql://root:password@mariadb/db}', + 'phpcs' => 'phpcs --runtime-set ignore_warnings_on_exit 1 --runtime-set ignore_errors_on_exit 1 web/modules/custom', + 'lint' => 'parallel-lint --exclude web --exclude vendor .', + 'webserver' => 'cd web && php -S 0.0.0.0:8888 .ht.router.php', + 'chromedriver' => 'chromedriver --port=9515 --verbose --whitelisted-ips --log-path=/tmp/chromedriver.log --no-sandbox', + 'unit' => 'phpunit --verbose web/modules/custom', + 'phpstan' => 'phpstan analyse web/modules/custom', + 'stylelint' => 'yarn --silent --cwd web/core stylelint --formatter verbose --config ./.stylelintrc.json ../modules/custom/**/*.css', + 'eslint' => 'yarn --silent --cwd web/core eslint -c ./.eslintrc.json ../modules/custom', + ], + 'config' => [ + 'process-timeout' => 36000, + ], + 'extra' => [ + 'installer-paths' => [ + 'web/core' => [ + 0 => 'type:drupal-core', + ], + 'web/libraries/{$name}' => [ + 0 => 'type:drupal-library', + ], + 'web/modules/contrib/{$name}' => [ + 0 => 'type:drupal-module', + ], + 'web/profiles/{$name}' => [ + 0 => 'type:drupal-profile', + ], + 'web/themes/{$name}' => [ + 0 => 'type:drupal-theme', + ], + 'drush/{$name}' => [ + 0 => 'type:drupal-drush', + ], + ], + 'drupal-scaffold' => [ + 'locations' => [ + 'web-root' => 'web/', + ], + ], + 'drush' => [ + 'services' => [ + 'drush.services.yml' => '^9 || ^10', + ], ], ], - ], - ]; + ]; } } diff --git a/src/Plugin.php b/src/Plugin.php index ec62e2d..24979bf 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -43,13 +43,23 @@ class Plugin implements PluginInterface, EventSubscriberInterface, Capable { */ public static function getSubscribedEvents(): array { return [ - ScriptEvents::POST_INSTALL_CMD => 'configureProject', + ScriptEvents::POST_INSTALL_CMD => 'configureComposerJson', ScriptEvents::POST_UPDATE_CMD => 'configureProject', ]; } /** - * Post install and post update command event callback. + * Post install command event callback. + * + * @param \Composer\Script\Event $event + * The event that triggered the plugin. + */ + public function configureComposerJson(Event $event) { + $this->handler->configureComposerJson(); + } + + /** + * Post update command event callback. * * @param \Composer\Script\Event $event * The event that triggered the plugin. -- GitLab