From 23244a7d9096236b2025bed7b155cf58cab0936d Mon Sep 17 00:00:00 2001 From: catch <6915-catch@users.noreply.drupalcode.org> Date: Mon, 31 Mar 2025 12:03:51 +0100 Subject: [PATCH 01/13] Raise execution time to 30. --- .../package_manager/tests/src/Build/TemplateProjectTestBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php index 16cd486ad750..cbdd3f0ab88f 100644 --- a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php +++ b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php @@ -60,7 +60,7 @@ abstract class TemplateProjectTestBase extends QuickStartTestBase { * * @var int */ - protected const MAX_EXECUTION_TIME = 20; + protected const MAX_EXECUTION_TIME = 30; /** * {@inheritdoc} -- GitLab From a45486dfcecabe1d0658075c6268b66d2b238322 Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 08:43:38 +1000 Subject: [PATCH 02/13] Assert response content --- .../modules/package_manager_test_api/src/ApiController.php | 2 +- .../tests/src/Build/TemplateProjectTestBase.php | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php b/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php index d2839be3947c..b51c3544167e 100644 --- a/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php +++ b/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php @@ -91,7 +91,7 @@ public function run(Request $request): RedirectResponse { public function finish(string $id): Response { $this->stage->claim($id)->postApply(); $this->stage->destroy(); - return new Response(); + return new Response('Finished'); } /** diff --git a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php index cbdd3f0ab88f..ff4d47f486db 100644 --- a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php +++ b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php @@ -719,6 +719,9 @@ protected function makePackageManagerTestApiRequest(string $url, array $query_da $this->serverErrorLog, ); $this->assertSame(200, $session->getStatusCode(), $message); + // Sometimes we get a 200 response after a PHP timeout or OOM error, so we + // also check the page content to ensure it's what we expect. + $this->assertSame('Finished', $session->getPage()->getText()); } /** -- GitLab From fdb0368bbaee3984fbe3d080a59296945faa1ae8 Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 08:52:28 +1000 Subject: [PATCH 03/13] Revert MAX_EXECUTION_TIME to see if we catch any --- .../package_manager/tests/src/Build/TemplateProjectTestBase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php index ff4d47f486db..3023d4aa56cb 100644 --- a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php +++ b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php @@ -60,7 +60,7 @@ abstract class TemplateProjectTestBase extends QuickStartTestBase { * * @var int */ - protected const MAX_EXECUTION_TIME = 30; + protected const MAX_EXECUTION_TIME = 20; /** * {@inheritdoc} -- GitLab From 10ab5d6d317deaf0c44d0d648cfca5f6a7eefde5 Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 13:36:32 +1000 Subject: [PATCH 04/13] Patch composer-stager --- composer-stager-414.patch | 29 +++++++++++ composer.json | 9 +++- composer.lock | 50 ++++++++++++++++++- .../Metapackage/DevDependencies/composer.json | 1 + .../PinnedDevDependencies/composer.json | 1 + 5 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 composer-stager-414.patch diff --git a/composer-stager-414.patch b/composer-stager-414.patch new file mode 100644 index 000000000000..38172203d3d4 --- /dev/null +++ b/composer-stager-414.patch @@ -0,0 +1,29 @@ +diff --git a/src/Internal/FileSyncer/Service/FileSyncer.php b/src/Internal/FileSyncer/Service/FileSyncer.php +index 25a9cfff..129f7413 100644 +--- a/src/Internal/FileSyncer/Service/FileSyncer.php ++++ b/src/Internal/FileSyncer/Service/FileSyncer.php +@@ -55,7 +55,7 @@ public function sync( + $this->assertSourceAndDestinationAreDifferent($source, $destination); + $this->assertSourceIsValid($source); + +- $this->runCommand($exclusions, $source, $destination, $callback); ++ $this->runCommand($exclusions, $source, $destination, $callback, $timeout); + } + + /** @infection-ignore-all This only makes any difference on Windows, whereas Infection is only run on Linux. */ +@@ -113,6 +113,7 @@ private function runCommand( + PathInterface $source, + PathInterface $destination, + ?OutputCallbackInterface $callback, ++ int $timeout, + ): void { + $this->ensureDestinationDirectoryExists($destination); + $command = $this->buildCommand($source, $destination, $exclusions); +@@ -123,6 +124,7 @@ private function runCommand( + $this->pathFactory->create('/', $source), + [], + $callback, ++ $timeout, + ); + } catch (ExceptionInterface $e) { + throw new IOException($e->getTranslatableMessage(), 0, $e); diff --git a/composer.json b/composer.json index 659cbf36d8f3..1f6460323e3f 100644 --- a/composer.json +++ b/composer.json @@ -19,6 +19,7 @@ "behat/mink-browserkit-driver": "^2.2", "colinodell/psr-testlogger": "^1.2", "composer/composer": "^2.8.1", + "cweagans/composer-patches": "^1.7", "drupal/coder": "^8.3.10", "justinrainbow/json-schema": "^5.2", "lullabot/mink-selenium2-driver": "^1.7.3", @@ -65,10 +66,16 @@ "drupal/core-vendor-hardening": true, "php-http/discovery": true, "phpstan/extension-installer": true, - "tbachert/spi": false + "tbachert/spi": false, + "cweagans/composer-patches": true } }, "extra": { + "patches": { + "php-tuf/composer-stager": { + "Pass FileSyncer timeout to AbstractProcessRunner::run": "./composer-stager-414.patch" + } + }, "_readme": [ "By default Drupal loads the autoloader from ./vendor/autoload.php.", "To change the autoloader you can edit ./autoload.php.", diff --git a/composer.lock b/composer.lock index 86e0d6df2327..241a9bf891b2 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": "a6a454e0a25ad4c4d26cd760d50eb4d0", + "content-hash": "37a7635547d62acc810e988795dd8c6e", "packages": [ { "name": "asm89/stack-cors", @@ -5325,6 +5325,54 @@ ], "time": "2024-05-06T16:37:16+00:00" }, + { + "name": "cweagans/composer-patches", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/cweagans/composer-patches.git", + "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e190d4466fe2b103a55467dfa83fc2fecfcaf2db", + "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3.0" + }, + "require-dev": { + "composer/composer": "~1.0 || ~2.0", + "phpunit/phpunit": "~4.6" + }, + "type": "composer-plugin", + "extra": { + "class": "cweagans\\Composer\\Patches" + }, + "autoload": { + "psr-4": { + "cweagans\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Cameron Eagans", + "email": "me@cweagans.net" + } + ], + "description": "Provides a way to patch Composer packages.", + "support": { + "issues": "https://github.com/cweagans/composer-patches/issues", + "source": "https://github.com/cweagans/composer-patches/tree/1.7.3" + }, + "time": "2022-12-20T22:53:13+00:00" + }, { "name": "dealerdirect/phpcodesniffer-composer-installer", "version": "v1.0.0", diff --git a/composer/Metapackage/DevDependencies/composer.json b/composer/Metapackage/DevDependencies/composer.json index 023a65286fdd..71d922ee7190 100644 --- a/composer/Metapackage/DevDependencies/composer.json +++ b/composer/Metapackage/DevDependencies/composer.json @@ -11,6 +11,7 @@ "behat/mink-browserkit-driver": "^2.2", "colinodell/psr-testlogger": "^1.2", "composer/composer": "^2.8.1", + "cweagans/composer-patches": "^1.7", "drupal/coder": "^8.3.10", "justinrainbow/json-schema": "^5.2", "lullabot/mink-selenium2-driver": "^1.7.3", diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json index ce382db15563..913cf72e1acc 100644 --- a/composer/Metapackage/PinnedDevDependencies/composer.json +++ b/composer/Metapackage/PinnedDevDependencies/composer.json @@ -19,6 +19,7 @@ "composer/pcre": "3.3.2", "composer/spdx-licenses": "1.5.8", "composer/xdebug-handler": "3.0.5", + "cweagans/composer-patches": "1.7.3", "dealerdirect/phpcodesniffer-composer-installer": "v1.0.0", "doctrine/instantiator": "2.0.0", "drupal/coder": "8.3.26", -- GitLab From a2d1a62744b5f54b98b669567bbb64a933ffacb7 Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 14:27:37 +1000 Subject: [PATCH 05/13] Revert metapackages --- composer/Metapackage/DevDependencies/composer.json | 1 - composer/Metapackage/PinnedDevDependencies/composer.json | 1 - 2 files changed, 2 deletions(-) diff --git a/composer/Metapackage/DevDependencies/composer.json b/composer/Metapackage/DevDependencies/composer.json index 71d922ee7190..023a65286fdd 100644 --- a/composer/Metapackage/DevDependencies/composer.json +++ b/composer/Metapackage/DevDependencies/composer.json @@ -11,7 +11,6 @@ "behat/mink-browserkit-driver": "^2.2", "colinodell/psr-testlogger": "^1.2", "composer/composer": "^2.8.1", - "cweagans/composer-patches": "^1.7", "drupal/coder": "^8.3.10", "justinrainbow/json-schema": "^5.2", "lullabot/mink-selenium2-driver": "^1.7.3", diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json index 913cf72e1acc..ce382db15563 100644 --- a/composer/Metapackage/PinnedDevDependencies/composer.json +++ b/composer/Metapackage/PinnedDevDependencies/composer.json @@ -19,7 +19,6 @@ "composer/pcre": "3.3.2", "composer/spdx-licenses": "1.5.8", "composer/xdebug-handler": "3.0.5", - "cweagans/composer-patches": "1.7.3", "dealerdirect/phpcodesniffer-composer-installer": "v1.0.0", "doctrine/instantiator": "2.0.0", "drupal/coder": "8.3.26", -- GitLab From c0c59eafb9aa041f87310ecb45ac5155467c5bcf Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 14:28:21 +1000 Subject: [PATCH 06/13] Hardcode repeat test class --- .gitlab-ci/pipeline.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitlab-ci/pipeline.yml b/.gitlab-ci/pipeline.yml index 3196e5078226..771721be17f0 100644 --- a/.gitlab-ci/pipeline.yml +++ b/.gitlab-ci/pipeline.yml @@ -274,10 +274,8 @@ variables: '🔠Repeat Class Test': <<: [ *with-composer, *run-repeat-class-test, *default-job-settings ] - when: manual - allow_failure: true variables: - REPEAT_TEST_CLASS: 'Drupal\Tests\Change\Me' + REPEAT_TEST_CLASS: '\Drupal\Tests\package_manager\Build\PackageUpdateTest' services: - <<: *with-database -- GitLab From 40f6f578177b75eb7b4248689b0359c9464e2cef Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 15:06:59 +1000 Subject: [PATCH 07/13] Revert "Revert metapackages" This reverts commit a2d1a62744b5f54b98b669567bbb64a933ffacb7. --- composer/Metapackage/DevDependencies/composer.json | 1 + composer/Metapackage/PinnedDevDependencies/composer.json | 1 + 2 files changed, 2 insertions(+) diff --git a/composer/Metapackage/DevDependencies/composer.json b/composer/Metapackage/DevDependencies/composer.json index 023a65286fdd..71d922ee7190 100644 --- a/composer/Metapackage/DevDependencies/composer.json +++ b/composer/Metapackage/DevDependencies/composer.json @@ -11,6 +11,7 @@ "behat/mink-browserkit-driver": "^2.2", "colinodell/psr-testlogger": "^1.2", "composer/composer": "^2.8.1", + "cweagans/composer-patches": "^1.7", "drupal/coder": "^8.3.10", "justinrainbow/json-schema": "^5.2", "lullabot/mink-selenium2-driver": "^1.7.3", diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json index ce382db15563..913cf72e1acc 100644 --- a/composer/Metapackage/PinnedDevDependencies/composer.json +++ b/composer/Metapackage/PinnedDevDependencies/composer.json @@ -19,6 +19,7 @@ "composer/pcre": "3.3.2", "composer/spdx-licenses": "1.5.8", "composer/xdebug-handler": "3.0.5", + "cweagans/composer-patches": "1.7.3", "dealerdirect/phpcodesniffer-composer-installer": "v1.0.0", "doctrine/instantiator": "2.0.0", "drupal/coder": "8.3.26", -- GitLab From 6b4f03c007140332f4886ea761b370e74d2f9f7a Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 15:09:13 +1000 Subject: [PATCH 08/13] Allow composer-patches --- .../package_manager/tests/src/Build/TemplateProjectTestBase.php | 1 + 1 file changed, 1 insertion(+) diff --git a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php index 3023d4aa56cb..36e359b989fb 100644 --- a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php +++ b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php @@ -290,6 +290,7 @@ protected function createTestProject(string $template): void { // executable that might not exist while dependencies are being installed. // It adds no value to this test. $data['config']['allow-plugins']['dealerdirect/phpcodesniffer-composer-installer'] = FALSE; + $data['config']['allow-plugins']['cweagans/composer-patches'] = TRUE; // Always force Composer to mirror path repositories. This is necessary // because dependencies are installed from a Composer-type repository, which -- GitLab From 56363b40f0c31b4fd4b8bea205b1aac6537e0cc2 Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 15:23:53 +1000 Subject: [PATCH 09/13] Force composer patches in to project --- .../tests/src/Build/TemplateProjectTestBase.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php index 36e359b989fb..5bee6ef0ad99 100644 --- a/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php +++ b/core/modules/package_manager/tests/src/Build/TemplateProjectTestBase.php @@ -290,7 +290,10 @@ protected function createTestProject(string $template): void { // executable that might not exist while dependencies are being installed. // It adds no value to this test. $data['config']['allow-plugins']['dealerdirect/phpcodesniffer-composer-installer'] = FALSE; + + $data['require']['cweagans/composer-patches'] = '^1.7'; $data['config']['allow-plugins']['cweagans/composer-patches'] = TRUE; + $data['config']['extra']['composer-exit-on-patch-failure'] = TRUE; // Always force Composer to mirror path repositories. This is necessary // because dependencies are installed from a Composer-type repository, which -- GitLab From a0feea2eca4aa1890b162418c626ddcd89897bc5 Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Tue, 1 Apr 2025 15:24:42 +1000 Subject: [PATCH 10/13] Test 180 second timeout --- .../modules/package_manager_test_api/src/ApiController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php b/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php index b51c3544167e..e15d3cb07626 100644 --- a/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php +++ b/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php @@ -108,7 +108,7 @@ public function finish(string $id): Response { * as long as the stage needs to exist. */ protected function createAndApplyStage(Request $request) : string { - $id = $this->stage->create(); + $id = $this->stage->create(180); $this->stage->require( $request->get('runtime', []), $request->get('dev', []) -- GitLab From 21f981a376894f151637278316454068960c40de Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Wed, 2 Apr 2025 08:02:53 +1000 Subject: [PATCH 11/13] Repeat only 50 times so we definitely get test output --- .gitlab-ci/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci/pipeline.yml b/.gitlab-ci/pipeline.yml index 771721be17f0..06370dca2e87 100644 --- a/.gitlab-ci/pipeline.yml +++ b/.gitlab-ci/pipeline.yml @@ -113,7 +113,7 @@ variables: echo ' "Key" to "REPEAT_TEST_CLASS" and "Value" to "Drupal\Tests\ckeditor5\FunctionalJavascript\MediaLinkabilityTest"'; exit 1; else - sudo -u www-data -E -H php ./core/scripts/run-tests.sh --color --keep-results --concurrency "$CONCURRENCY" --repeat "100" --sqlite "./sites/default/files/tests.sqlite" --dburl $SIMPLETEST_DB --url $SIMPLETEST_BASE_URL --verbose --non-html --class $REPEAT_TEST_CLASS + sudo -u www-data -E -H php ./core/scripts/run-tests.sh --color --keep-results --concurrency "$CONCURRENCY" --repeat "50" --sqlite "./sites/default/files/tests.sqlite" --dburl $SIMPLETEST_DB --url $SIMPLETEST_BASE_URL --verbose --non-html --class $REPEAT_TEST_CLASS fi ################ -- GitLab From fb7e11684900308308c3e3e78250bd74d9dc14b5 Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Wed, 2 Apr 2025 15:42:43 +1000 Subject: [PATCH 12/13] Give standard profile another minute to complete --- core/tests/Drupal/BuildTests/Framework/BuildTestBase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php index 313c6f54fa9d..8ae2b1b3e49e 100644 --- a/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php +++ b/core/tests/Drupal/BuildTests/Framework/BuildTestBase.php @@ -331,8 +331,8 @@ public function assertCommandExitCode($expected_code) { public function executeCommand($command_line, $working_dir = NULL) { $this->commandProcess = Process::fromShellCommandline($command_line); $this->commandProcess->setWorkingDirectory($this->getWorkingPath($working_dir)) - ->setTimeout(300) - ->setIdleTimeout(300); + ->setTimeout(360) + ->setIdleTimeout(360); $this->commandProcess->run(); return $this->commandProcess; } -- GitLab From 79a4571ca543e51992f0938036e8f6a9014bf2ea Mon Sep 17 00:00:00 2001 From: Michael Strelan <mstrelan@gmail.com> Date: Thu, 3 Apr 2025 13:36:24 +1000 Subject: [PATCH 13/13] Remove 180 and fallback to 300 that should work now with the patch --- .../modules/package_manager_test_api/src/ApiController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php b/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php index e15d3cb07626..b51c3544167e 100644 --- a/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php +++ b/core/modules/package_manager/tests/modules/package_manager_test_api/src/ApiController.php @@ -108,7 +108,7 @@ public function finish(string $id): Response { * as long as the stage needs to exist. */ protected function createAndApplyStage(Request $request) : string { - $id = $this->stage->create(180); + $id = $this->stage->create(); $this->stage->require( $request->get('runtime', []), $request->get('dev', []) -- GitLab