From 90ef48936aa92fd4d99f356d5516e2b1b4aa1741 Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen@paragon-es.de> Date: Fri, 3 Jul 2020 09:33:23 +0200 Subject: [PATCH] Build initial functionality --- composer.json | 7 ++-- src/Handler.php | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 2d13f64..4bfc267 100644 --- a/composer.json +++ b/composer.json @@ -17,12 +17,9 @@ "source": "https://gitlab.lakedrops.com/composer/plugin/drupal-spoons/tree/master" }, "require": { - "php": ">=7", - "composer-plugin-api": "^1.0.0" - }, - "require-dev": { + "php": ">=7.1", "composer/composer": "^1.10", - "phpunit/phpunit": "^8.4" + "composer-plugin-api": "^1.0.0" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/src/Handler.php b/src/Handler.php index 739995c..8e30f10 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -4,6 +4,7 @@ namespace LakeDrops\DrupalSpoons; use Composer\Composer; use Composer\IO\IOInterface; +use Composer\Json\JsonFile; use Symfony\Component\Filesystem\Filesystem; /** @@ -50,6 +51,30 @@ class Handler { // Directory where the root project is being created. $projectRoot = getcwd(); + $full_name = $this->composer->getPackage()->getName(); + [, $project_name] = explode('/', $full_name); + $moduleRoot = $projectRoot . "/web/modules/custom/$project_name"; + + // Prepare directory for current module. + if ($fs->exists($moduleRoot)) { + $fs->remove($moduleRoot); + } + $fs->mkdir($moduleRoot); + foreach (scandir($projectRoot) as $item) { + if (!in_array($item, ['.git', 'vemdor', 'web'])) { + $rel = $fs->makePathRelative($projectRoot, $moduleRoot); + $fs->symlink($rel, $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); } /** @@ -61,6 +86,70 @@ 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', + ], + ], + 'drupal-scaffold' => [ + 'locations' => [ + 'web-root' => 'web/', + ], + ], + 'drush' => [ + 'services' => [ + 'drush.services.yml' => '^9 || ^10', + ], + ], + ], ]; } -- GitLab