From 344d8422e388c11a38bdf01060f5acf3670cb4f2 Mon Sep 17 00:00:00 2001 From: Lee Rowlands Date: Tue, 6 Aug 2019 15:51:39 +1000 Subject: [PATCH] Issue #2912387 by greg.1.anderson, Mile23, Mixologic, larowlan, jibran, alexpott, catch: Stop using wikimedia/composer-merge-plugin --- composer.json | 29 +- composer.lock | 303 ++++++++++++++---- core/composer.json | 50 --- core/lib/Drupal/Core/Composer/Composer.php | 13 + .../Drupal/Nightwatch/nightwatch.conf.js | 7 +- .../Tests/Core/Composer/ComposerTest.php | 28 ++ 6 files changed, 313 insertions(+), 117 deletions(-) create mode 100644 core/tests/Drupal/Tests/Core/Composer/ComposerTest.php diff --git a/composer.json b/composer.json index 8612c77ac221..7b00ebb866a3 100644 --- a/composer.json +++ b/composer.json @@ -5,10 +5,24 @@ "license": "GPL-2.0-or-later", "require": { "composer/installers": "^1.0.24", - "wikimedia/composer-merge-plugin": "^1.4" + "wikimedia/composer-merge-plugin": "^1.4", + "drupal/core": "self.version" }, - "replace": { - "drupal/core": "^8.8" + "require-dev": { + "behat/mink": "1.7.x-dev", + "behat/mink-goutte-driver": "^1.2", + "behat/mink-selenium2-driver": "1.3.x-dev", + "composer/composer": "^1.8", + "drupal/coder": "^8.3.2", + "jcalderonzumba/gastonjs": "^1.0.2", + "jcalderonzumba/mink-phantomjs-driver": "^0.3.1", + "mikey179/vfsstream": "^1.2", + "phpunit/phpunit": "^6.5", + "phpspec/prophecy": "^1.7", + "symfony/css-selector": "^3.4.0", + "symfony/phpunit-bridge": "^3.4.3", + "symfony/debug": "^3.4.0", + "justinrainbow/json-schema": "^5.2" }, "minimum-stability": "dev", "prefer-stable": true, @@ -25,9 +39,6 @@ "https://www.drupal.org/node/2718229" ], "merge-plugin": { - "include": [ - "core/composer.json" - ], "recurse": true, "replace": false, "merge-extra": false @@ -48,6 +59,8 @@ } }, "scripts": { + "pre-install-cmd": "Drupal\\Core\\Composer\\Composer::ensureComposerVersion", + "pre-update-cmd": "Drupal\\Core\\Composer\\Composer::ensureComposerVersion", "pre-autoload-dump": "Drupal\\Core\\Composer\\Composer::preAutoloadDump", "post-autoload-dump": "Drupal\\Core\\Composer\\Composer::ensureHtaccess", "post-package-install": "Drupal\\Core\\Composer\\Composer::vendorTestCodeCleanup", @@ -59,6 +72,10 @@ { "type": "composer", "url": "https://packages.drupal.org/8" + }, + { + "type": "path", + "url": "core" } ] } diff --git a/composer.lock b/composer.lock index c43e82677e31..775324f2471f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "15aa825e18c7099ad637f9d55109db29", + "content-hash": "36ce6886f9438a31a1d93784286214df", "packages": [ { "name": "asm89/stack-cors", @@ -674,6 +674,204 @@ ], "time": "2014-09-09T13:34:57+00:00" }, + { + "name": "drupal/core", + "version": "8.8.x-dev", + "dist": { + "type": "path", + "url": "core", + "reference": "27f439f6978708d477ebb70f2ce97b28e8043da2" + }, + "require": { + "asm89/stack-cors": "^1.1", + "composer/semver": "^1.0", + "doctrine/annotations": "^1.2", + "doctrine/common": "^2.5", + "easyrdf/easyrdf": "^0.9", + "egulias/email-validator": "^2.0", + "ext-date": "*", + "ext-dom": "*", + "ext-filter": "*", + "ext-gd": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-pdo": "*", + "ext-session": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "guzzlehttp/guzzle": "^6.2.1", + "masterminds/html5": "^2.1", + "pear/archive_tar": "^1.4", + "php": ">=7.0.8", + "stack/builder": "^1.0", + "symfony-cmf/routing": "^1.4", + "symfony/class-loader": "~3.4.0", + "symfony/console": "~3.4.0", + "symfony/dependency-injection": "~3.4.26", + "symfony/event-dispatcher": "~3.4.0", + "symfony/http-foundation": "~3.4.27", + "symfony/http-kernel": "~3.4.14", + "symfony/polyfill-iconv": "^1.0", + "symfony/process": "~3.4.0", + "symfony/psr-http-message-bridge": "^1.0", + "symfony/routing": "~3.4.0", + "symfony/serializer": "~3.4.0", + "symfony/translation": "~3.4.0", + "symfony/validator": "~3.4.0", + "symfony/yaml": "~3.4.5", + "twig/twig": "^1.38.2", + "typo3/phar-stream-wrapper": "^2.1.1", + "zendframework/zend-diactoros": "^1.1", + "zendframework/zend-feed": "^2.4" + }, + "conflict": { + "drush/drush": "<8.1.10" + }, + "replace": { + "drupal/action": "self.version", + "drupal/aggregator": "self.version", + "drupal/automated_cron": "self.version", + "drupal/ban": "self.version", + "drupal/bartik": "self.version", + "drupal/basic_auth": "self.version", + "drupal/big_pipe": "self.version", + "drupal/block": "self.version", + "drupal/block_content": "self.version", + "drupal/block_place": "self.version", + "drupal/book": "self.version", + "drupal/breakpoint": "self.version", + "drupal/ckeditor": "self.version", + "drupal/classy": "self.version", + "drupal/color": "self.version", + "drupal/comment": "self.version", + "drupal/config": "self.version", + "drupal/config_environment": "self.version", + "drupal/config_translation": "self.version", + "drupal/contact": "self.version", + "drupal/content_moderation": "self.version", + "drupal/content_translation": "self.version", + "drupal/contextual": "self.version", + "drupal/core-annotation": "self.version", + "drupal/core-assertion": "self.version", + "drupal/core-bridge": "self.version", + "drupal/core-class-finder": "self.version", + "drupal/core-datetime": "self.version", + "drupal/core-dependency-injection": "self.version", + "drupal/core-diff": "self.version", + "drupal/core-discovery": "self.version", + "drupal/core-event-dispatcher": "self.version", + "drupal/core-file-cache": "self.version", + "drupal/core-filesystem": "self.version", + "drupal/core-gettext": "self.version", + "drupal/core-graph": "self.version", + "drupal/core-http-foundation": "self.version", + "drupal/core-php-storage": "self.version", + "drupal/core-plugin": "self.version", + "drupal/core-proxy-builder": "self.version", + "drupal/core-render": "self.version", + "drupal/core-serialization": "self.version", + "drupal/core-transliteration": "self.version", + "drupal/core-utility": "self.version", + "drupal/core-uuid": "self.version", + "drupal/core-version": "self.version", + "drupal/datetime": "self.version", + "drupal/datetime_range": "self.version", + "drupal/dblog": "self.version", + "drupal/dynamic_page_cache": "self.version", + "drupal/editor": "self.version", + "drupal/entity_reference": "self.version", + "drupal/field": "self.version", + "drupal/field_layout": "self.version", + "drupal/field_ui": "self.version", + "drupal/file": "self.version", + "drupal/filter": "self.version", + "drupal/forum": "self.version", + "drupal/hal": "self.version", + "drupal/help": "self.version", + "drupal/help_topics": "self.version", + "drupal/history": "self.version", + "drupal/image": "self.version", + "drupal/inline_form_errors": "self.version", + "drupal/jsonapi": "self.version", + "drupal/language": "self.version", + "drupal/layout_builder": "self.version", + "drupal/layout_discovery": "self.version", + "drupal/link": "self.version", + "drupal/locale": "self.version", + "drupal/media": "self.version", + "drupal/media_library": "self.version", + "drupal/menu_link_content": "self.version", + "drupal/menu_ui": "self.version", + "drupal/migrate": "self.version", + "drupal/migrate_drupal": "self.version", + "drupal/migrate_drupal_multilingual": "self.version", + "drupal/migrate_drupal_ui": "self.version", + "drupal/minimal": "self.version", + "drupal/node": "self.version", + "drupal/options": "self.version", + "drupal/page_cache": "self.version", + "drupal/path": "self.version", + "drupal/quickedit": "self.version", + "drupal/rdf": "self.version", + "drupal/responsive_image": "self.version", + "drupal/rest": "self.version", + "drupal/search": "self.version", + "drupal/serialization": "self.version", + "drupal/settings_tray": "self.version", + "drupal/seven": "self.version", + "drupal/shortcut": "self.version", + "drupal/simpletest": "self.version", + "drupal/standard": "self.version", + "drupal/stark": "self.version", + "drupal/statistics": "self.version", + "drupal/syslog": "self.version", + "drupal/system": "self.version", + "drupal/taxonomy": "self.version", + "drupal/telephone": "self.version", + "drupal/text": "self.version", + "drupal/toolbar": "self.version", + "drupal/tour": "self.version", + "drupal/tracker": "self.version", + "drupal/update": "self.version", + "drupal/user": "self.version", + "drupal/views": "self.version", + "drupal/views_ui": "self.version", + "drupal/workflows": "self.version", + "drupal/workspaces": "self.version" + }, + "type": "drupal-core", + "autoload": { + "psr-4": { + "Drupal\\Core\\": "lib/Drupal/Core", + "Drupal\\Component\\": "lib/Drupal/Component", + "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver" + }, + "classmap": [ + "lib/Drupal.php", + "lib/Drupal/Component/Utility/Timer.php", + "lib/Drupal/Component/Utility/Unicode.php", + "lib/Drupal/Core/Database/Database.php", + "lib/Drupal/Core/DrupalKernel.php", + "lib/Drupal/Core/DrupalKernelInterface.php", + "lib/Drupal/Core/Site/Settings.php" + ] + }, + "scripts": { + "pre-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::preAutoloadDump" + ], + "post-autoload-dump": [ + "Drupal\\Core\\Composer\\Composer::ensureHtaccess" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Drupal is an open source content management platform powering millions of websites and applications." + }, { "name": "easyrdf/easyrdf", "version": "0.9.1", @@ -714,14 +912,14 @@ "authors": [ { "name": "Nicholas Humfrey", + "role": "Developer", "email": "njh@aelius.com", - "homepage": "http://www.aelius.com/njh/", - "role": "Developer" + "homepage": "http://www.aelius.com/njh/" }, { "name": "Alexey Zakhlestin", - "email": "indeyets@gmail.com", - "role": "Developer" + "role": "Developer", + "email": "indeyets@gmail.com" } ], "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", @@ -2775,19 +2973,19 @@ "authors": [ { "name": "Fabien Potencier", + "role": "Lead Developer", "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" + "homepage": "http://fabien.potencier.org" }, { "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" + "role": "Project Founder", + "email": "armin.ronacher@active-4.com" }, { "name": "Twig Team", - "homepage": "https://twig.symfony.com/contributors", - "role": "Contributors" + "role": "Contributors", + "homepage": "https://twig.symfony.com/contributors" } ], "description": "Twig, the flexible, fast, and secure template language for PHP", @@ -3102,26 +3300,27 @@ "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "9ea1cebe3dc529ba3861d87c818f045362c40484" + "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/9ea1cebe3dc529ba3861d87c818f045362c40484", - "reference": "9ea1cebe3dc529ba3861d87c818f045362c40484", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/a534fe7dac9525e8e10ca68e737c3d7e5058ec83", + "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "symfony/phpunit-bridge": "^4.2" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { @@ -3152,7 +3351,7 @@ "testing", "web" ], - "time": "2017-02-06T09:59:54+00:00" + "time": "2019-07-15T12:45:29+00:00" }, { "name": "behat/mink-browserkit-driver", @@ -3271,12 +3470,12 @@ "source": { "type": "git", "url": "https://github.com/minkphp/MinkSelenium2Driver.git", - "reference": "93474c65a2a7bf959200ab5f7a14cc450645c185" + "reference": "8684ee4e634db7abda9039ea53545f86fc1e105a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/93474c65a2a7bf959200ab5f7a14cc450645c185", - "reference": "93474c65a2a7bf959200ab5f7a14cc450645c185", + "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/8684ee4e634db7abda9039ea53545f86fc1e105a", + "reference": "8684ee4e634db7abda9039ea53545f86fc1e105a", "shasum": "" }, "require": { @@ -3324,7 +3523,7 @@ "testing", "webdriver" ], - "time": "2018-01-07T19:17:08+00:00" + "time": "2018-10-10T12:39:06+00:00" }, { "name": "composer/ca-bundle", @@ -3995,7 +4194,7 @@ "time": "2019-01-14T23:55:14+00:00" }, { - "name": "mikey179/vfsStream", + "name": "mikey179/vfsstream", "version": "v1.6.5", "source": { "type": "git", @@ -4032,8 +4231,8 @@ "authors": [ { "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" + "role": "Developer", + "homepage": "http://frankkleine.de/" } ], "description": "Virtual file system to mock the real file system in unit tests.", @@ -4170,18 +4369,18 @@ "authors": [ { "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "role": "Developer", + "email": "arne@blankerts.de" }, { "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "role": "Developer", + "email": "sebastian@phpeople.de" }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "Developer", + "email": "sebastian@phpunit.de" } ], "description": "Library for handling version information and constraints", @@ -4349,8 +4548,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", @@ -4397,8 +4596,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "role": "lead", + "email": "sb@sebastian-bergmann.de" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", @@ -4439,8 +4638,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Simple template engine.", @@ -4488,8 +4687,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "role": "lead", + "email": "sb@sebastian-bergmann.de" } ], "description": "Utility class for timing", @@ -4619,8 +4818,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "The PHP Unit Testing framework.", @@ -5243,8 +5442,8 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "role": "lead", + "email": "sebastian@phpunit.de" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", @@ -5770,26 +5969,12 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { + "drupal/core": 20, "behat/mink": 20, "behat/mink-selenium2-driver": 20 }, "prefer-stable": true, "prefer-lowest": false, - "platform": { - "ext-date": "*", - "ext-dom": "*", - "ext-filter": "*", - "ext-gd": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-pdo": "*", - "ext-session": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": ">=7.0.8" - }, + "platform": [], "platform-dev": [] } diff --git a/core/composer.json b/core/composer.json index 4fee977c236e..5d248a188e6a 100644 --- a/core/composer.json +++ b/core/composer.json @@ -51,22 +51,6 @@ "conflict": { "drush/drush": "<8.1.10" }, - "require-dev": { - "behat/mink": "1.7.x-dev", - "behat/mink-goutte-driver": "^1.2", - "behat/mink-selenium2-driver": "1.3.x-dev", - "composer/composer": "^1.8", - "drupal/coder": "^8.3.2", - "jcalderonzumba/gastonjs": "^1.0.2", - "jcalderonzumba/mink-phantomjs-driver": "^0.3.1", - "mikey179/vfsstream": "^1.2", - "phpunit/phpunit": "^6.5", - "phpspec/prophecy": "^1.7", - "symfony/css-selector": "^3.4.0", - "symfony/phpunit-bridge": "^3.4.3", - "symfony/debug": "^3.4.0", - "justinrainbow/json-schema": "^5.2" - }, "replace": { "drupal/action": "self.version", "drupal/aggregator": "self.version", @@ -110,7 +94,6 @@ "drupal/core-proxy-builder": "self.version", "drupal/core-render": "self.version", "drupal/core-serialization": "self.version", - "drupal/core-composer-scaffold": "self.version", "drupal/core-transliteration": "self.version", "drupal/core-utility": "self.version", "drupal/core-uuid": "self.version", @@ -180,39 +163,6 @@ "drupal/workflows": "self.version", "drupal/workspaces": "self.version" }, - "extra": { - "merge-plugin": { - "require": [ - "core/lib/Drupal/Component/Annotation/composer.json", - "core/lib/Drupal/Component/Assertion/composer.json", - "core/lib/Drupal/Component/Bridge/composer.json", - "core/lib/Drupal/Component/ClassFinder/composer.json", - "core/lib/Drupal/Component/Datetime/composer.json", - "core/lib/Drupal/Component/DependencyInjection/composer.json", - "core/lib/Drupal/Component/Diff/composer.json", - "core/lib/Drupal/Component/Discovery/composer.json", - "core/lib/Drupal/Component/EventDispatcher/composer.json", - "core/lib/Drupal/Component/FileCache/composer.json", - "core/lib/Drupal/Component/FileSystem/composer.json", - "core/lib/Drupal/Component/Gettext/composer.json", - "core/lib/Drupal/Component/Graph/composer.json", - "core/lib/Drupal/Component/HttpFoundation/composer.json", - "core/lib/Drupal/Component/PhpStorage/composer.json", - "core/lib/Drupal/Component/Plugin/composer.json", - "core/lib/Drupal/Component/ProxyBuilder/composer.json", - "core/lib/Drupal/Component/Render/composer.json", - "core/lib/Drupal/Component/Serialization/composer.json", - "core/lib/Drupal/Component/Scaffold/composer.json", - "core/lib/Drupal/Component/Transliteration/composer.json", - "core/lib/Drupal/Component/Utility/composer.json", - "core/lib/Drupal/Component/Uuid/composer.json", - "core/lib/Drupal/Component/Version/composer.json" - ], - "recurse": false, - "replace": false, - "merge-extra": false - } - }, "minimum-stability": "dev", "prefer-stable": true, "autoload": { diff --git a/core/lib/Drupal/Core/Composer/Composer.php b/core/lib/Drupal/Core/Composer/Composer.php index 7be3ca4d44db..cae919645002 100644 --- a/core/lib/Drupal/Core/Composer/Composer.php +++ b/core/lib/Drupal/Core/Composer/Composer.php @@ -3,6 +3,8 @@ namespace Drupal\Core\Composer; use Drupal\Component\PhpStorage\FileStorage; +use Composer\Semver\Comparator; +use Composer\Composer as ComposerApp; use Composer\Script\Event; use Composer\Installer\PackageEvent; use Composer\Semver\Constraint\Constraint; @@ -94,6 +96,17 @@ class Composer { 'zendframework/zend-stdlib' => ['doc'], ]; + /** + * Ensure that the minimum required version of Composer is running. + * Throw an exception if Composer is too old. + */ + public static function ensureComposerVersion() { + $composerVersion = ComposerApp::getVersion(); + if (Comparator::lessThan($composerVersion, '1.9.0')) { + throw new \RuntimeException("Drupal core development requires Composer 1.9.0, but Composer $composerVersion is installed. Please run 'composer self-update'."); + } + } + /** * Add vendor classes to Composer's static classmap. */ diff --git a/core/tests/Drupal/Nightwatch/nightwatch.conf.js b/core/tests/Drupal/Nightwatch/nightwatch.conf.js index 7f4cb83529b8..ee98b2815f3c 100644 --- a/core/tests/Drupal/Nightwatch/nightwatch.conf.js +++ b/core/tests/Drupal/Nightwatch/nightwatch.conf.js @@ -10,13 +10,16 @@ const collectedFolders = { Pages: [], }; const searchDirectory = process.env.DRUPAL_NIGHTWATCH_SEARCH_DIRECTORY || ''; +const defaultIgnore = ['vendor/**']; glob .sync('**/tests/**/Nightwatch/**/*.js', { cwd: path.resolve(process.cwd(), `../${searchDirectory}`), ignore: process.env.DRUPAL_NIGHTWATCH_IGNORE_DIRECTORIES - ? process.env.DRUPAL_NIGHTWATCH_IGNORE_DIRECTORIES.split(',') - : [], + ? process.env.DRUPAL_NIGHTWATCH_IGNORE_DIRECTORIES.split(',').concat( + defaultIgnore, + ) + : defaultIgnore, }) .forEach(file => { let m = regex.exec(file); diff --git a/core/tests/Drupal/Tests/Core/Composer/ComposerTest.php b/core/tests/Drupal/Tests/Core/Composer/ComposerTest.php new file mode 100644 index 000000000000..906b45d4e525 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Composer/ComposerTest.php @@ -0,0 +1,28 @@ +assertNull(Composer::ensureComposerVersion()); + } + catch (\RuntimeException $e) { + $this->assertRegExp('/Drupal core development requires Composer 1.9.0, but Composer /', $e->getMessage()); + } + } + +}