diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index d7574c772a2..6753593ba47 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -336,6 +336,17 @@ jobs: echo "$OUTPUT" ../bashunit -a matches "Note: Using configuration file .+phpstan.neon." "$OUTPUT" ../bashunit -a contains 'Result cache not used because the metadata do not match: metaExtensions' "$OUTPUT" + - script: | + cd e2e/result-cache-meta-extension-throw + composer install + # https://github.com/phpstan/phpstan/issues/14805 + # An exception thrown from ResultCacheMetaExtension::getHash() during result cache + # restore must fail the run with a non-zero exit code - even when a bootstrap file + # installs a global exception handler that would otherwise swallow it into exit 0. + OUTPUT=$(../bashunit -a exit_code "1" "../../bin/phpstan --error-format=raw") + echo "$OUTPUT" + ../bashunit -a contains 'boom from getHash' "$OUTPUT" + ../bashunit -a not_contains 'Swallowed by global exception handler' "$OUTPUT" - script: | cd e2e/result-cache-restore-without-reflection composer install diff --git a/composer.json b/composer.json index 7219ef39d73..ce1237cd846 100644 --- a/composer.json +++ b/composer.json @@ -144,7 +144,8 @@ "patches/Resolver.patch" ], "symfony/console": [ - "patches/OutputFormatter.patch" + "patches/OutputFormatter.patch", + "patches/Application.patch" ] } }, diff --git a/composer.lock b/composer.lock index d9f2158470a..50f10be61fb 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": "018f18ace63a6268bd90ea37daca0d80", + "content-hash": "13e4d9e979c07e7c27e8d479ffa5b359", "packages": [ { "name": "clue/ndjson-react", diff --git a/e2e/result-cache-meta-extension-throw/.gitignore b/e2e/result-cache-meta-extension-throw/.gitignore new file mode 100644 index 00000000000..61ead86667c --- /dev/null +++ b/e2e/result-cache-meta-extension-throw/.gitignore @@ -0,0 +1 @@ +/vendor diff --git a/e2e/result-cache-meta-extension-throw/bootstrap.php b/e2e/result-cache-meta-extension-throw/bootstrap.php new file mode 100644 index 00000000000..126f6991a0f --- /dev/null +++ b/e2e/result-cache-meta-extension-throw/bootstrap.php @@ -0,0 +1,13 @@ +getMessage() . "\n"); + exit(0); +}); diff --git a/e2e/result-cache-meta-extension-throw/composer.json b/e2e/result-cache-meta-extension-throw/composer.json new file mode 100644 index 00000000000..a072011fe86 --- /dev/null +++ b/e2e/result-cache-meta-extension-throw/composer.json @@ -0,0 +1,5 @@ +{ + "autoload-dev": { + "classmap": ["src/"] + } +} diff --git a/e2e/result-cache-meta-extension-throw/composer.lock b/e2e/result-cache-meta-extension-throw/composer.lock new file mode 100644 index 00000000000..b383d88ac57 --- /dev/null +++ b/e2e/result-cache-meta-extension-throw/composer.lock @@ -0,0 +1,18 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "d751713988987e9331980363e24189ce", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": {}, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/e2e/result-cache-meta-extension-throw/phpstan.neon b/e2e/result-cache-meta-extension-throw/phpstan.neon new file mode 100644 index 00000000000..26d4bced9ff --- /dev/null +++ b/e2e/result-cache-meta-extension-throw/phpstan.neon @@ -0,0 +1,12 @@ +parameters: + level: 8 + paths: + - src + bootstrapFiles: + - bootstrap.php + +services: + - + class: ResultCacheE2E\MetaExtensionThrow\ThrowingResultCacheMetaExtension + tags: + - phpstan.resultCacheMetaExtension diff --git a/e2e/result-cache-meta-extension-throw/src/Foo.php b/e2e/result-cache-meta-extension-throw/src/Foo.php new file mode 100644 index 00000000000..12d0afae07c --- /dev/null +++ b/e2e/result-cache-meta-extension-throw/src/Foo.php @@ -0,0 +1,10 @@ +configureIO($input, $output); + + $exitCode = $this->doRun($input, $output); +- } catch (\Exception $e) { ++ } catch (\Throwable $e) { + if (!$this->catchExceptions) { + throw $e; + }