From 1ac85e6543938dac905313d14b231c2756ccc70f Mon Sep 17 00:00:00 2001
From: "reactphp-parallel-renovate-runner[bot]"
<226772824+reactphp-parallel-renovate-runner[bot]@users.noreply.github.com>
Date: Thu, 2 Jul 2026 12:13:53 +0000
Subject: [PATCH] Update QA Utilities
---
Makefile | 72 +++++++++++-----
composer.json | 4 +-
composer.lock | 206 ++++++++++++++++++++++++++++++----------------
etc/qa/phpcs.xml | 12 ---
etc/qa/rector.php | 1 -
5 files changed, 190 insertions(+), 105 deletions(-)
delete mode 100644 etc/qa/phpcs.xml
delete mode 100644 etc/qa/rector.php
diff --git a/Makefile b/Makefile
index e34003c..e7b1c7a 100644
--- a/Makefile
+++ b/Makefile
@@ -28,23 +28,29 @@ ifeq ("$(IN_DOCKER)","TRUE")
DOCKER_INTERACTIVE_SHELL:=
else
ifeq ($(DOCKER_AVAILABLE),0)
- DOCKER_COMMON_OPS:=-v "`pwd`:`pwd`" -w "`pwd`" -v "${COMPOSER_CACHE_DIR}:${COMPOSER_CONTAINER_CACHE_DIR}" -e OTEL_PHP_FIBERS_ENABLED="${OTEL_PHP_FIBERS_ENABLED}" --ulimit nofile=1000000
+ DOCKER_DEFAULT_SECURITY_OPS=--cap-drop=ALL --security-opt="no-new-privileges=true" --user="`id -u`:`id -g`"
+ DOCKER_COMMON_OPS:=-v "`pwd`:`pwd`" -w "`pwd`" -v "`pwd`/.git:`pwd`/.git:ro" -v "${COMPOSER_CACHE_DIR}:${COMPOSER_CONTAINER_CACHE_DIR}" --ulimit nofile=1000000
+ DOCKER_COMMON_NON_INTERACTIVE_OPS:=-e OTEL_PHP_FIBERS_ENABLED="${OTEL_PHP_FIBERS_ENABLED}"
+ DOCKER_COMMON_INTERACTIVE_OPS:=-e OTEL_PHP_FIBERS_ENABLED="false"
ifeq ("$(NEEDS_DOCKER_SOCKET)","TRUE")
ifneq ("$(wildcard /var/run/docker.sock)","")
+ DOCKER_SECURITY_OPS:=
DOCKER_SOCKET_OPS:=-v "/var/run/docker.sock:/var/run/docker.sock"
DOCKER_SOCKET_CONTAINER_NAME_SUFFIX:=-root
else
+ DOCKER_SECURITY_OPS:=${DOCKER_DEFAULT_SECURITY_OPS}
DOCKER_SOCKET_OPS:=
DOCKER_SOCKET_CONTAINER_NAME_SUFFIX:=
endif
else
+ DOCKER_SECURITY_OPS:=${DOCKER_DEFAULT_SECURITY_OPS}
DOCKER_SOCKET_OPS:=
DOCKER_SOCKET_CONTAINER_NAME_SUFFIX:=
endif
- DOCKER_RUN:=docker run --rm -i ${DOCKER_COMMON_OPS} "${CONTAINER_NAME}"
- DOCKER_RUN_WITH_SOCKET:=docker run --rm -i ${DOCKER_COMMON_OPS} ${DOCKER_SOCKET_OPS} "${CONTAINER_NAME}${DOCKER_SOCKET_CONTAINER_NAME_SUFFIX}"
- DOCKER_SHELL:=docker run --rm -it ${DOCKER_COMMON_OPS} "${CONTAINER_NAME}"
- DOCKER_INTERACTIVE_SHELL:=docker run --rm -it ${DOCKER_COMMON_OPS} "${CONTAINER_NAME_INTERACTIVE_SHELL}"
+ DOCKER_RUN:=docker run --rm -i ${DOCKER_SECURITY_OPS} ${DOCKER_COMMON_NON_INTERACTIVE_OPS} ${DOCKER_COMMON_OPS} "${CONTAINER_NAME}"
+ DOCKER_RUN_WITH_SOCKET:=docker run --rm -i ${DOCKER_SECURITY_OPS} ${DOCKER_COMMON_NON_INTERACTIVE_OPS} ${DOCKER_COMMON_OPS} ${DOCKER_SOCKET_OPS} "${CONTAINER_NAME}${DOCKER_SOCKET_CONTAINER_NAME_SUFFIX}"
+ DOCKER_SHELL:=docker run --rm -it ${DOCKER_SECURITY_OPS} ${DOCKER_COMMON_NON_INTERACTIVE_OPS} ${DOCKER_COMMON_OPS} "${CONTAINER_NAME}"
+ DOCKER_INTERACTIVE_SHELL:=docker run --rm -it ${DOCKER_SECURITY_OPS} ${DOCKER_COMMON_INTERACTIVE_OPS} ${DOCKER_COMMON_OPS} "${CONTAINER_NAME_INTERACTIVE_SHELL}"
else
DOCKER_RUN:=
DOCKER_RUN_WITH_SOCKET:=
@@ -92,7 +98,7 @@ migrations-docs-update-etc-readme-template-copyright-year-to-current: #### Updat
($(DOCKER_RUN) php -r '$$readmeFile = "etc/README.md.twig"; $$copyRight = "Copyright "; $$currentYear = date("Y"); if (!file_exists($$readmeFile)) {exit;} $$readmeContents = file_get_contents($$readmeFile); foreach (range(2000, 2100) as $$year) { $$readmeContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$readmeContents); } file_put_contents($$readmeFile, $$readmeContents); ' || true)
migrations-docs-create-license-when-it-doesnt-exists: #### Create license when it doesn't exists ##*I*##
- ($(DOCKER_RUN) php -r '$$licenseFile = "LICENSE"; if (file_exists($$licenseFile)) {exit;} file_put_contents($$licenseFile, base64_decode("VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMDEgQ2Vlcy1KYW4gS2lld2lldAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K"));' || true)
+ ($(DOCKER_RUN) php -r '$$licenseFile = "LICENSE"; $$composerFIle = "composer.json"; if (file_exists($$licenseFile)) {exit;} if (file_exists($$composerFIle)) {$$json = json_decode(file_get_contents($$composerFIle), true); if (array_key_exists("license", $$json)) {if ($$json["license"] === "proprietary") {exit;}}} file_put_contents($$licenseFile, base64_decode("VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMDEgQ2Vlcy1KYW4gS2lld2lldAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K"));' || true)
migrations-docs-update-license-copyright-c-year-to-current: #### Update license copyright year to current ##*I*##
($(DOCKER_RUN) php -r '$$licenseFile = "LICENSE"; $$copyRight = "Copyright (c) "; $$currentYear = date("Y"); if (!file_exists($$licenseFile)) {exit;} $$licenseContents = file_get_contents($$licenseFile); foreach (range(2000, 2100) as $$year) { $$licenseContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$licenseContents); } file_put_contents($$licenseFile, $$licenseContents); ' || true)
@@ -100,33 +106,42 @@ migrations-docs-update-license-copyright-c-year-to-current: #### Update license
migrations-docs-update-license-copyright-year-to-current: #### Update license copyright year to current ##*I*##
($(DOCKER_RUN) php -r '$$licenseFile = "LICENSE"; $$copyRight = "Copyright "; $$currentYear = date("Y"); if (!file_exists($$licenseFile)) {exit;} $$licenseContents = file_get_contents($$licenseFile); foreach (range(2000, 2100) as $$year) { $$licenseContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$licenseContents); } file_put_contents($$licenseFile, $$licenseContents); ' || true)
-migrations-php-make-sure-var-exists: #### Make sure var/ exists ##*I*##
+migrations-php-make-sure-var-exists: #### Make sure `var/` exists ##*I*##
($(DOCKER_RUN) mkdir var || true)
-migrations-php-make-sure-var-gitkeep-exists: #### Make sure var/.gitkeep exists ##*I*##
+migrations-php-make-sure-var-gitkeep-exists: #### Make sure `var/.gitkeep` exists ##*I*##
($(DOCKER_RUN) touch var/.gitkeep || true)
-migrations-php-make-sure-etc-exists: #### Make sure etc/ exists ##*I*##
+migrations-php-make-sure-etc-exists: #### Make sure `etc/` exists ##*I*##
($(DOCKER_RUN) mkdir etc || true)
-migrations-php-make-sure-etc-ci-exists: #### Make sure etc/ci/ exists ##*I*##
+migrations-php-make-sure-etc-ci-exists: #### Make sure `etc/ci/` exists ##*I*##
($(DOCKER_RUN) mkdir etc/ci || true)
-migrations-php-make-sure-etc-qa-exists: #### Make sure etc/qa/ exists ##*I*##
+migrations-php-make-sure-etc-qa-exists: #### Make sure `etc/qa/` exists ##*I*##
($(DOCKER_RUN) mkdir etc/qa || true)
-migrations-php-move-psalm-xml-config-to-etc: #### Move psalm.xml to etc/qa/psalm.xml ##*I*##
+migrations-php-move-psalm-xml-config-to-etc: #### Move `psalm.xml` to `etc/qa/psalm.xml` ##*I*##
($(DOCKER_RUN) mv psalm.xml etc/qa/psalm.xml || true)
-migrations-php-remove-psalm-xml-config: #### Make sure we remove etc/qa/psalm.xml ##*I*##
+migrations-php-remove-psalm-xml-config: #### Make sure we remove `etc/qa/psalm.xml` ##*I*##
($(DOCKER_RUN) rm etc/qa/psalm.xml || true)
-migrations-php-remove-old-phpunit-xml-dist-config: #### Make sure we remove phpunit.xml.dist ##*I*##
+migrations-php-remove-old-phpunit-xml-dist-config: #### Make sure we remove `phpunit.xml.dist` ##*I*##
($(DOCKER_RUN) rm phpunit.xml.dist || true)
-migrations-php-remove-old-phpunit-xml-config: #### Make sure we remove phpunit.xml ##*I*##
+migrations-php-remove-old-phpunit-xml-config: #### Make sure we remove `phpunit.xml` ##*I*##
($(DOCKER_RUN) rm phpunit.xml || true)
+migrations-php-remove-old-php-cs-fiver-config: #### Make sure we remove `.php_cs` ##*I*##
+ ($(DOCKER_RUN) rm .php_cs || true)
+
+migrations-php-remove-old-scrutinizer-yml-config: #### Make sure we remove `.scrutinizer.yml` ##*I*##
+ ($(DOCKER_RUN) rm .scrutinizer.yml || true)
+
+migrations-php-remove-old-appveyor-yml-config: #### Make sure we remove `appveyor.yml` ##*I*##
+ ($(DOCKER_RUN) rm appveyor.yml || true)
+
migrations-php-ensure-etc-ci-markdown-link-checker-json-exists: #### Make sure we have etc/ci/markdown-link-checker.json ##*I*##
($(DOCKER_RUN) php -r '$$markdownLinkCheckerFile = "etc/ci/markdown-link-checker.json"; $$json = json_decode("{\"httpHeaders\": [{\"urls\": [\"https://docs.github.com/\"],\"headers\": {\"Accept-Encoding\": \"zstd, br, gzip, deflate\"}}]}"); if (file_exists($$markdownLinkCheckerFile)) {exit;} file_put_contents($$markdownLinkCheckerFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
@@ -211,6 +226,9 @@ migrations-php-composer-unused-create-config-if-not-exists: #### Create Composer
migrations-php-composer-unused-drop-commented-out-line-scattered-across-my-repos: #### Update Composer Unused config file dropping a commented out line that is scattered cross my repos ##*I*##
($(DOCKER_RUN) php -r '$$composerUnusedConfigFile = "etc/qa/composer-unused.php"; if (!file_exists($$composerUnusedConfigFile)) {exit;} $$php = file_get_contents($$composerUnusedConfigFile); if (!is_string($$php)) {exit;} $$php = str_replace(base64_decode("Ly8gICAgICAgIC0+YWRkTmFtZWRGaWx0ZXIoTmFtZWRGaWx0ZXI6OmZyb21TdHJpbmcoJ3d5cmloYXhpbXVzL3BocHN0YW4tcnVsZXMtd3JhcHBlcicpKTs="), "", $$php); file_put_contents($$composerUnusedConfigFile, $$php);' || true)
+migrations-php-migrate-composer-unused-from-extra-unused-to-etc-qa-composer-used-php: #### Migrate Compose Unused from composer.json extra unused to etc/qa/composer-unused.php ##*I*##
+ ($(DOCKER_RUN) php -r '$$composerJsonFile = "composer.json"; $$composerUnusedFile = "etc/qa/composer-unused.php"; if (!file_exists($$composerJsonFile)) {exit;} $$json = json_decode(file_get_contents($$composerJsonFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("extra", $$json)) {exit;} if (!array_key_exists("unused", $$json["extra"])) {exit;} foreach ($$json["extra"]["unused"] as $$unusedPAckage) { file_put_contents($$composerUnusedFile, str_replace(base64_decode("cmV0dXJuIHN0YXRpYyBmbiAoQ29uZmlndXJhdGlvbiAkY29uZmlnKTogQ29uZmlndXJhdGlvbiA9PiAkY29uZmln"), base64_decode("cmV0dXJuIHN0YXRpYyBmbiAoQ29uZmlndXJhdGlvbiAkY29uZmlnKTogQ29uZmlndXJhdGlvbiA9PiAkY29uZmln") . "\r\n" . base64_decode("ICAgIC0+YWRkTmFtZWRGaWx0ZXIoXENvbXBvc2VyVW51c2VkXENvbXBvc2VyVW51c2VkXENvbmZpZ3VyYXRpb25cTmFtZWRGaWx0ZXI6OmZyb21TdHJpbmcoJw==") . $$unusedPAckage . base64_decode("Jykp"), file_get_contents($$composerUnusedFile))); } unset($$json["extra"]["unused"]); file_put_contents($$composerJsonFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
migrations-php-move-phpcs: #### Move phpcs.xml.dist to etc/qa/phpcs.xml ##*I*##
($(DOCKER_RUN) mv phpcs.xml.dist etc/qa/phpcs.xml || true)
@@ -269,16 +287,22 @@ migrations-inline-code-remove-line-internal: #### Remove all lines that contain
($(DOCKER_RUN) php -r '$$possibleDirectories = ["src", "tests", "etc", "examples"]; foreach ($$possibleDirectories as $$possibleDirectory) { if (!file_exists($$possibleDirectory)) {continue;} $$i = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($$possibleDirectory)); $$i->rewind(); while ($$i->valid()) { if (!is_file($$i->key()) || (is_file($$i->key()) && !str_ends_with($$i->key(), ".php"))) { $$i->next(); continue; } $$fileContents = explode("\n", file_get_contents($$i->key())); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "@internal")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$i->key(), implode("\n", $$fileContents)); $$i->next(); } }' || true)
migrations-supported-features-php-ensure-we-only-cs-check-and-fix-tests-if-unit-tests-is-enabled: #### Ensure we only cs check/fix tests/ if unit-tests is enabled ##*I*##
- ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","macos","windows","zts"])) {exit;} $$phpCSCongifFIle = "etc/qa/phpcs.xml"; $$fileContents = explode("\n", file_get_contents($$phpCSCongifFIle)); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "../../tests")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$phpCSCongifFIle, implode("\n", $$fileContents));' || true)
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","zts"])) {exit;} $$phpCSCongifFIle = "etc/qa/phpcs.xml"; $$fileContents = explode("\n", file_get_contents($$phpCSCongifFIle)); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "../../tests")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$phpCSCongifFIle, implode("\n", $$fileContents));' || true)
migrations-supported-features-php-ensure-we-only-staticly-analyse-tests-with-phpstan-if-unit-tests-is-enabled: #### Ensure we only staticly analyse tests/ with PHPStan if unit-tests is enabled ##*I*##
- ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","macos","windows","zts"])) {exit;} $$phpStanCongifFIle = "etc/qa/phpstan.neon"; $$fileContents = explode("\n", file_get_contents($$phpStanCongifFIle)); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "- ../../tests")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$phpStanCongifFIle, implode("\n", $$fileContents));' || true)
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","zts"])) {exit;} $$phpStanCongifFIle = "etc/qa/phpstan.neon"; $$fileContents = explode("\n", file_get_contents($$phpStanCongifFIle)); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "- ../../tests")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$phpStanCongifFIle, implode("\n", $$fileContents));' || true)
migrations-supported-features-php-ensure-no-phpunit-config-file-is-present-when-unit-tests-are-disabled: #### Ensure we remove the PHPUnit config file when unit-tests aren't enabled ##*I*##
- ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","macos","windows","zts"])) {exit;} @unlink("etc/qa/phpunit.xml");' || true)
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","zts"])) {exit;} @unlink("etc/qa/phpunit.xml");' || true)
migrations-supported-features-php-ensure-no-infectionphp-config-file-is-present-when-unit-tests-are-disabled: #### Ensure we remove the InfectionPHP config file when unit-tests aren't enabled ##*I*##
- ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","macos","windows","zts"])) {exit;} @unlink("etc/qa/infection.json5");' || true)
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["linux","zts"])) {exit;} @unlink("etc/qa/infection.json5");' || true)
+
+migrations-supported-features-php-ensure-no-rector-config-file-is-present-when-code-style-is-disabled: #### Ensure we remove the RectorPHP config file when code-style isn't enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("code-style", ["linux","zts"])) {exit;} @unlink("etc/qa/rector.php");' || true)
+
+migrations-supported-features-php-ensure-no-phpcs-config-file-is-present-when-code-style-is-disabled: #### Ensure we remove the PHPCSS config file when code-style isn't enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("code-style", ["linux","zts"])) {exit;} @unlink("etc/qa/phpcs.xml");' || true)
migrations-php-make-sure-github-exists: #### Make sure .github/ exists ##*I*##
($(DOCKER_RUN) mkdir .github || true)
@@ -342,7 +366,7 @@ migration-renovate-set-composer-constraint: #### Always keep renovate's constrai
## Our default jobs
on-install-or-update: ## Tasks, like migrations, that specifically have be run after composer install or update. These will also run by self hosted Renovate ####
- $(DOCKER_RUN) $(MAKE) migrations-git-enforce-gitattributes-contents migrations-git-make-sure-gitignore-exists migrations-git-make-sure-gitignore-ignores-var migrations-git-make-sure-gitignore-excludes-var-gitkeep migrations-docs-update-readme-copyright-c-year-to-current migrations-docs-update-readme-copyright-year-to-current migrations-docs-update-etc-readme-template-copyright-c-year-to-current migrations-docs-update-etc-readme-template-copyright-year-to-current migrations-docs-create-license-when-it-doesnt-exists migrations-docs-update-license-copyright-c-year-to-current migrations-docs-update-license-copyright-year-to-current migrations-php-make-sure-var-exists migrations-php-make-sure-var-gitkeep-exists migrations-php-make-sure-etc-exists migrations-php-make-sure-etc-ci-exists migrations-php-make-sure-etc-qa-exists migrations-php-move-psalm-xml-config-to-etc migrations-php-remove-psalm-xml-config migrations-php-remove-old-phpunit-xml-dist-config migrations-php-remove-old-phpunit-xml-config migrations-php-ensure-etc-ci-markdown-link-checker-json-exists migrations-php-move-infection-config-to-etc migrations-php-infection-create-config-if-not-exists migrations-php-remove-phpunit-config-dir-from-infection migrations-php-fix-logs-relative-paths-for-infection migrations-php-infection-ensure-log-text-has-the-correct-path migrations-php-infection-ensure-log-summary-has-the-correct-path migrations-php-infection-ensure-log-json-has-the-correct-path migrations-php-infection-ensure-log-per-mutator-has-the-correct-path migrations-php-add-github-true-to-for-infection migrations-php-make-paths-compatible-with-infection-0-32 migrations-php-set-phpunit-ensure-config-file-exists migrations-php-set-phpunit-xsd-path-to-local migrations-php-set-phpunit-make-sure-we-see-all-the-warnings-deprecations-etc-etc-that-will-make-phpunit-do-a-non-happy-exit migrations-php-move-phpstan migrations-php-set-phpstan-ensure-config-file-exists migrations-php-set-phpstan-uncomment-parameters migrations-php-set-phpstan-add-parameters-if-it-isnt-present-in-the-config-file migrations-php-set-phpstan-paths-in-config migrations-php-set-phpstan-level-max-in-config migrations-php-set-phpstan-resolve-ergebnis-noExtends-classesAllowedToBeExtended migrations-php-set-phpstan-drop-checkGenericClassInNonGenericObjectType migrations-php-phpstan-add-prefix-for-anything-that-starts-with-vendor-in-a-list migrations-php-set-phpstan-drop-include-test-utilities-rules migrations-php-set-phpstan-drop-include-async-test-utilities-rules migrations-php-set-rector-create-config-if-not-exists migrations-php-composer-unused-create-config-if-not-exists migrations-php-composer-unused-drop-commented-out-line-scattered-across-my-repos migrations-php-move-phpcs migrations-php-move-phpcs-not-dist migrations-php-set-phpcs-ensure-config-file-exists migrations-php-phpcs-make-basepath-is-correct-relatively migrations-php-phpcs-make-cache-is-correct-relatively migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-etc migrations-php-phpcs-make-sure-etc-has-no-trailing-slash migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-src migrations-php-phpcs-make-sure-src-has-no-trailing-slash migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-tests migrations-php-phpcs-make-sure-tests-has-no-trailing-slash migrations-php-phpcs-make-sure-etc-is-ran-through migrations-phpcs-include-examples-directory-when-present migrations-php-move-composer-require-checker migrations-php-composer-require-checker-create-config-if-not-exists migrations-inline-code-phpstan-remove-line-phpstan-ignore-next-line migrations-inline-code-phpstan-remove-rest-of-line-phpstan-ignore-line migrations-inline-code-psalm-remove-line-psalm-suppress migrations-inline-code-remove-line-internal migrations-supported-features-php-ensure-we-only-cs-check-and-fix-tests-if-unit-tests-is-enabled migrations-supported-features-php-ensure-we-only-staticly-analyse-tests-with-phpstan-if-unit-tests-is-enabled migrations-supported-features-php-ensure-no-phpunit-config-file-is-present-when-unit-tests-are-disabled migrations-supported-features-php-ensure-no-infectionphp-config-file-is-present-when-unit-tests-are-disabled migrations-php-make-sure-github-exists migrations-github-codeowners migrations-php-make-sure-github-workflows-exists migrations-github-actions-remove-composer-diff migrations-github-actions-remove-markdown-check-links migrations-github-actions-remove-markdown-craft-release migrations-github-actions-remove-set-milestone-on-pr migrations-github-actions-move-ci migrations-github-actions-remove-ci-if-its-old-style-php-ci-workflow migrations-github-actions-create-ci-if-not-exists migrations-github-actions-move-release-management migrations-github-actions-fix-management-in-release-management-referenced-workflow-file migrations-github-actions-create-release-management-if-not-exists migrations-renovate-remove-dependabot-config migrations-renovate-move-config migrations-renovate-create-config-if-not-exists migrations-renovate-point-at-correct-config migration-renovate-set-php-constraint migration-renovate-set-composer-constraint composer-validate syntax-php composer-normalize ## Count: 93
+ $(DOCKER_RUN) $(MAKE) migrations-git-enforce-gitattributes-contents migrations-git-make-sure-gitignore-exists migrations-git-make-sure-gitignore-ignores-var migrations-git-make-sure-gitignore-excludes-var-gitkeep migrations-docs-update-readme-copyright-c-year-to-current migrations-docs-update-readme-copyright-year-to-current migrations-docs-update-etc-readme-template-copyright-c-year-to-current migrations-docs-update-etc-readme-template-copyright-year-to-current migrations-docs-create-license-when-it-doesnt-exists migrations-docs-update-license-copyright-c-year-to-current migrations-docs-update-license-copyright-year-to-current migrations-php-make-sure-var-exists migrations-php-make-sure-var-gitkeep-exists migrations-php-make-sure-etc-exists migrations-php-make-sure-etc-ci-exists migrations-php-make-sure-etc-qa-exists migrations-php-move-psalm-xml-config-to-etc migrations-php-remove-psalm-xml-config migrations-php-remove-old-phpunit-xml-dist-config migrations-php-remove-old-phpunit-xml-config migrations-php-remove-old-php-cs-fiver-config migrations-php-remove-old-scrutinizer-yml-config migrations-php-remove-old-appveyor-yml-config migrations-php-ensure-etc-ci-markdown-link-checker-json-exists migrations-php-move-infection-config-to-etc migrations-php-infection-create-config-if-not-exists migrations-php-remove-phpunit-config-dir-from-infection migrations-php-fix-logs-relative-paths-for-infection migrations-php-infection-ensure-log-text-has-the-correct-path migrations-php-infection-ensure-log-summary-has-the-correct-path migrations-php-infection-ensure-log-json-has-the-correct-path migrations-php-infection-ensure-log-per-mutator-has-the-correct-path migrations-php-add-github-true-to-for-infection migrations-php-make-paths-compatible-with-infection-0-32 migrations-php-set-phpunit-ensure-config-file-exists migrations-php-set-phpunit-xsd-path-to-local migrations-php-set-phpunit-make-sure-we-see-all-the-warnings-deprecations-etc-etc-that-will-make-phpunit-do-a-non-happy-exit migrations-php-move-phpstan migrations-php-set-phpstan-ensure-config-file-exists migrations-php-set-phpstan-uncomment-parameters migrations-php-set-phpstan-add-parameters-if-it-isnt-present-in-the-config-file migrations-php-set-phpstan-paths-in-config migrations-php-set-phpstan-level-max-in-config migrations-php-set-phpstan-resolve-ergebnis-noExtends-classesAllowedToBeExtended migrations-php-set-phpstan-drop-checkGenericClassInNonGenericObjectType migrations-php-phpstan-add-prefix-for-anything-that-starts-with-vendor-in-a-list migrations-php-set-phpstan-drop-include-test-utilities-rules migrations-php-set-phpstan-drop-include-async-test-utilities-rules migrations-php-set-rector-create-config-if-not-exists migrations-php-composer-unused-create-config-if-not-exists migrations-php-composer-unused-drop-commented-out-line-scattered-across-my-repos migrations-php-migrate-composer-unused-from-extra-unused-to-etc-qa-composer-used-php migrations-php-move-phpcs migrations-php-move-phpcs-not-dist migrations-php-set-phpcs-ensure-config-file-exists migrations-php-phpcs-make-basepath-is-correct-relatively migrations-php-phpcs-make-cache-is-correct-relatively migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-etc migrations-php-phpcs-make-sure-etc-has-no-trailing-slash migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-src migrations-php-phpcs-make-sure-src-has-no-trailing-slash migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-tests migrations-php-phpcs-make-sure-tests-has-no-trailing-slash migrations-php-phpcs-make-sure-etc-is-ran-through migrations-phpcs-include-examples-directory-when-present migrations-php-move-composer-require-checker migrations-php-composer-require-checker-create-config-if-not-exists migrations-inline-code-phpstan-remove-line-phpstan-ignore-next-line migrations-inline-code-phpstan-remove-rest-of-line-phpstan-ignore-line migrations-inline-code-psalm-remove-line-psalm-suppress migrations-inline-code-remove-line-internal migrations-supported-features-php-ensure-we-only-cs-check-and-fix-tests-if-unit-tests-is-enabled migrations-supported-features-php-ensure-we-only-staticly-analyse-tests-with-phpstan-if-unit-tests-is-enabled migrations-supported-features-php-ensure-no-phpunit-config-file-is-present-when-unit-tests-are-disabled migrations-supported-features-php-ensure-no-infectionphp-config-file-is-present-when-unit-tests-are-disabled migrations-supported-features-php-ensure-no-rector-config-file-is-present-when-code-style-is-disabled migrations-supported-features-php-ensure-no-phpcs-config-file-is-present-when-code-style-is-disabled migrations-php-make-sure-github-exists migrations-github-codeowners migrations-php-make-sure-github-workflows-exists migrations-github-actions-remove-composer-diff migrations-github-actions-remove-markdown-check-links migrations-github-actions-remove-markdown-craft-release migrations-github-actions-remove-set-milestone-on-pr migrations-github-actions-move-ci migrations-github-actions-remove-ci-if-its-old-style-php-ci-workflow migrations-github-actions-create-ci-if-not-exists migrations-github-actions-move-release-management migrations-github-actions-fix-management-in-release-management-referenced-workflow-file migrations-github-actions-create-release-management-if-not-exists migrations-renovate-remove-dependabot-config migrations-renovate-move-config migrations-renovate-create-config-if-not-exists migrations-renovate-point-at-correct-config migration-renovate-set-php-constraint migration-renovate-set-composer-constraint composer-validate syntax-php composer-normalize ## Count: 99
composer-validate: ## Ensure we don't require any package we don't use in this package directly ##*IC*##
$(DOCKER_SHELL) composer validate
@@ -402,6 +426,12 @@ install: ### Install dependencies ####
composer-require: ### Require passed dependencies ####
$(DOCKER_INTERACTIVE_SHELL) composer require -W $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
+composer-why: ### Show why a specific dependency is loaded ####
+ $(DOCKER_INTERACTIVE_SHELL) composer why $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
+
+composer-outdated: ### Show outdated packages ####
+ $(DOCKER_SHELL) composer outdated
+
update: ### Update dependencies ####
$(DOCKER_SHELL) composer update -W
@@ -437,5 +467,5 @@ task-list-ci-high: ## CI: Generate a JSON array of jobs to run against the highe
@echo "[\"syntax-php\"]" ## Count: 1
supported-features: ## CI: List the features this package supports
- @echo "[\"linux\",\"macos\",\"windows\",\"zts\"]" ## Count: 4
+ @echo "[\"linux\",\"zts\"]" ## Count: 2
diff --git a/composer.json b/composer.json
index 09e7294..cfadddd 100644
--- a/composer.json
+++ b/composer.json
@@ -15,8 +15,8 @@
"ext-parallel": "*"
},
"require-dev": {
- "wyrihaximus/async-test-utilities": "^13.1.0",
- "wyrihaximus/makefiles": "^0.11.0"
+ "wyrihaximus/async-test-utilities": "^13.3.0",
+ "wyrihaximus/makefiles": "^0.12.3"
},
"config": {
"allow-plugins": {
diff --git a/composer.lock b/composer.lock
index 5efabf7..74a4df8 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": "32189a77dc5d2d2f60b7b604acb911f7",
+ "content-hash": "d0cac4cb99fc27c9fa97a70cba580ead",
"packages": [],
"packages-dev": [
{
@@ -2133,16 +2133,16 @@
},
{
"name": "infection/infection",
- "version": "0.33.2",
+ "version": "0.33.3",
"source": {
"type": "git",
"url": "https://github.com/infection/infection.git",
- "reference": "c0250ea5c1082e26798a236b05d1cb319175ab3e"
+ "reference": "cc789bb58df7c649c4533ab860d98283fe270215"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/infection/infection/zipball/c0250ea5c1082e26798a236b05d1cb319175ab3e",
- "reference": "c0250ea5c1082e26798a236b05d1cb319175ab3e",
+ "url": "https://api.github.com/repos/infection/infection/zipball/cc789bb58df7c649c4533ab860d98283fe270215",
+ "reference": "cc789bb58df7c649c4533ab860d98283fe270215",
"shasum": ""
},
"require": {
@@ -2163,16 +2163,16 @@
"ondram/ci-detector": "^4.1.0",
"php": "^8.3",
"psr/log": "^2.0 || ^3.0",
- "sanmai/di-container": "^0.1.12",
+ "sanmai/di-container": "^0.1.16",
"sanmai/duoclock": "^0.1.0",
"sanmai/later": "^0.1.7",
"sanmai/pipeline": "^7.2",
"sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
- "symfony/console": "^6.4 || ^7.0 || ^8.0",
- "symfony/filesystem": "^6.4 || ^7.0 || ^8.0",
- "symfony/finder": "^6.4 || ^7.0 || ^8.0",
+ "symfony/console": "^6.4 || ^7.4 || ^8.0",
+ "symfony/filesystem": "^6.4 || ^7.4 || ^8.0",
+ "symfony/finder": "^6.4 || ^7.4 || ^8.0",
"symfony/polyfill-php85": "^1.33",
- "symfony/process": "^6.4 || ^7.0 || ^8.0",
+ "symfony/process": "^6.4 || ^7.4 || ^8.0",
"thecodingmachine/safe": "^v3.0",
"webmozart/assert": "^1.11 || ^2.0"
},
@@ -2197,7 +2197,7 @@
"shipmonk/dead-code-detector": "^0.15",
"shipmonk/name-collision-detector": "^2.1",
"sidz/phpstan-rules": "^0.5.1",
- "symfony/yaml": "^6.4 || ^7.0 || ^8.0",
+ "symfony/yaml": "^6.4 || ^7.4 || ^8.0",
"thecodingmachine/phpstan-safe-rule": "^1.4",
"webmozarts/strict-phpunit": "^7.15"
},
@@ -2255,7 +2255,7 @@
],
"support": {
"issues": "https://github.com/infection/infection/issues",
- "source": "https://github.com/infection/infection/tree/0.33.2"
+ "source": "https://github.com/infection/infection/tree/0.33.3"
},
"funding": [
{
@@ -2267,7 +2267,7 @@
"type": "open_collective"
}
],
- "time": "2026-05-20T07:03:50+00:00"
+ "time": "2026-06-18T07:45:54+00:00"
},
{
"name": "infection/mutator",
@@ -4550,21 +4550,21 @@
},
{
"name": "rector/rector",
- "version": "2.4.5",
+ "version": "2.5.2",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "cbd86024be5014d3c14d9f0b3f7aae8ecbffd62c"
+ "reference": "49ff6339174bdbdf50b0b35ecbcff14a05ac9e24"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/cbd86024be5014d3c14d9f0b3f7aae8ecbffd62c",
- "reference": "cbd86024be5014d3c14d9f0b3f7aae8ecbffd62c",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/49ff6339174bdbdf50b0b35ecbcff14a05ac9e24",
+ "reference": "49ff6339174bdbdf50b0b35ecbcff14a05ac9e24",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
- "phpstan/phpstan": "^2.1.56"
+ "phpstan/phpstan": "^2.2.2"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -4598,7 +4598,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/2.4.5"
+ "source": "https://github.com/rectorphp/rector/tree/2.5.2"
},
"funding": [
{
@@ -4606,7 +4606,7 @@
"type": "github"
}
],
- "time": "2026-05-26T21:03:22+00:00"
+ "time": "2026-06-22T11:39:33+00:00"
},
{
"name": "revolt/event-loop",
@@ -6458,16 +6458,16 @@
},
{
"name": "slevomat/coding-standard",
- "version": "8.29.0",
+ "version": "8.30.1",
"source": {
"type": "git",
"url": "https://github.com/slevomat/coding-standard.git",
- "reference": "81fce13c4ef4b53a03e5cfa6ce36afc191c1598e"
+ "reference": "70a3b2150600122f87c59cae1c1b5902ba73798b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/81fce13c4ef4b53a03e5cfa6ce36afc191c1598e",
- "reference": "81fce13c4ef4b53a03e5cfa6ce36afc191c1598e",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/70a3b2150600122f87c59cae1c1b5902ba73798b",
+ "reference": "70a3b2150600122f87c59cae1c1b5902ba73798b",
"shasum": ""
},
"require": {
@@ -6479,11 +6479,11 @@
"require-dev": {
"phing/phing": "3.0.1|3.1.2",
"php-parallel-lint/php-parallel-lint": "1.4.0",
- "phpstan/phpstan": "2.1.54",
+ "phpstan/phpstan": "2.2.2",
"phpstan/phpstan-deprecation-rules": "2.0.4",
"phpstan/phpstan-phpunit": "2.0.16",
"phpstan/phpstan-strict-rules": "2.0.11",
- "phpunit/phpunit": "9.6.34|10.5.63|11.4.4|11.5.55|12.5.24"
+ "phpunit/phpunit": "9.6.34|10.5.63|11.4.4|11.5.55|12.5.30"
},
"type": "phpcodesniffer-standard",
"extra": {
@@ -6507,7 +6507,7 @@
],
"support": {
"issues": "https://github.com/slevomat/coding-standard/issues",
- "source": "https://github.com/slevomat/coding-standard/tree/8.29.0"
+ "source": "https://github.com/slevomat/coding-standard/tree/8.30.1"
},
"funding": [
{
@@ -6519,7 +6519,7 @@
"type": "tidelift"
}
],
- "time": "2026-05-07T05:48:08+00:00"
+ "time": "2026-06-27T11:26:35+00:00"
},
{
"name": "squizlabs/php_codesniffer",
@@ -9122,16 +9122,16 @@
},
{
"name": "wyrihaximus/async-test-utilities",
- "version": "13.1.0",
+ "version": "13.3.0",
"source": {
"type": "git",
"url": "https://github.com/WyriHaximus/php-async-test-utilities.git",
- "reference": "65cbbd82500dd4da040fdc06f1513364f91e136f"
+ "reference": "4c9f02bf271bc6ff615a6a1b85f2839f811b2274"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/65cbbd82500dd4da040fdc06f1513364f91e136f",
- "reference": "65cbbd82500dd4da040fdc06f1513364f91e136f",
+ "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/4c9f02bf271bc6ff615a6a1b85f2839f811b2274",
+ "reference": "4c9f02bf271bc6ff615a6a1b85f2839f811b2274",
"shasum": ""
},
"require": {
@@ -9142,14 +9142,14 @@
"react/promise": "^3.3.0",
"wyrihaximus/phpstan-react": "^2.0.0",
"wyrihaximus/react-phpunit-run-tests-in-fiber": "^4.0.0",
- "wyrihaximus/test-utilities": "^13.1.0"
+ "wyrihaximus/test-utilities": "^13.3.0"
},
"conflict": {
"composer/compoer": "<2.6.0"
},
"require-dev": {
"react/promise-timer": "^1.11.0",
- "wyrihaximus/makefiles": "^0.10.6"
+ "wyrihaximus/makefiles": "^0.12.1"
},
"type": "library",
"extra": {
@@ -9177,7 +9177,7 @@
"description": "Test utilities for api-clients packages",
"support": {
"issues": "https://github.com/WyriHaximus/php-async-test-utilities/issues",
- "source": "https://github.com/WyriHaximus/php-async-test-utilities/tree/13.1.0"
+ "source": "https://github.com/WyriHaximus/php-async-test-utilities/tree/13.3.0"
},
"funding": [
{
@@ -9185,30 +9185,43 @@
"type": "github"
}
],
- "time": "2026-06-09T08:34:11+00:00"
+ "time": "2026-06-27T22:10:23+00:00"
},
{
"name": "wyrihaximus/coding-standard",
- "version": "4.0.0",
+ "version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/WyriHaximus/php-coding-standard.git",
- "reference": "29855675f089665ad4923afb61305cbf42589255"
+ "reference": "15de1c4e2be8857b2c086810659eac158dfe7531"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-coding-standard/zipball/29855675f089665ad4923afb61305cbf42589255",
- "reference": "29855675f089665ad4923afb61305cbf42589255",
+ "url": "https://api.github.com/repos/WyriHaximus/php-coding-standard/zipball/15de1c4e2be8857b2c086810659eac158dfe7531",
+ "reference": "15de1c4e2be8857b2c086810659eac158dfe7531",
"shasum": ""
},
"require": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.2.0",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.2.1",
"doctrine/coding-standard": "^14.0.0",
"php": "^8.4",
- "slevomat/coding-standard": "^8.26.0",
+ "slevomat/coding-standard": "^8.30.1",
"squizlabs/php_codesniffer": "^4.0.1"
},
+ "require-dev": {
+ "wyrihaximus/makefiles": "^0.12.1"
+ },
"type": "phpcodesniffer-standard",
+ "extra": {
+ "wyrihaximus": {
+ "supported-features": {
+ "code-style": false,
+ "unit-tests": false,
+ "static-analysis": false,
+ "composer-dependency-checkers": false
+ }
+ }
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
@@ -9216,7 +9229,7 @@
"description": "WyriHaximus Coding Standard",
"support": {
"issues": "https://github.com/WyriHaximus/php-coding-standard/issues",
- "source": "https://github.com/WyriHaximus/php-coding-standard/tree/4.0.0"
+ "source": "https://github.com/WyriHaximus/php-coding-standard/tree/4.2.0"
},
"funding": [
{
@@ -9224,20 +9237,20 @@
"type": "github"
}
],
- "time": "2026-01-14T17:34:23+00:00"
+ "time": "2026-06-27T19:56:09+00:00"
},
{
"name": "wyrihaximus/makefiles",
- "version": "0.11.0",
+ "version": "0.12.3",
"source": {
"type": "git",
"url": "https://github.com/WyriHaximus/Makefiles.git",
- "reference": "776126bd353f26c556a7fb3b20643eaa9d7f72aa"
+ "reference": "cbb98ce358e8886a3c5d982b01fc478677ba8ef2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/Makefiles/zipball/776126bd353f26c556a7fb3b20643eaa9d7f72aa",
- "reference": "776126bd353f26c556a7fb3b20643eaa9d7f72aa",
+ "url": "https://api.github.com/repos/WyriHaximus/Makefiles/zipball/cbb98ce358e8886a3c5d982b01fc478677ba8ef2",
+ "reference": "cbb98ce358e8886a3c5d982b01fc478677ba8ef2",
"shasum": ""
},
"require": {
@@ -9249,7 +9262,7 @@
"infection/infection": "<0.32.0"
},
"require-dev": {
- "wyrihaximus/test-utilities": "^13.1.0"
+ "wyrihaximus/test-utilities": "^13.3.0"
},
"type": "composer-plugin",
"extra": {
@@ -9278,7 +9291,7 @@
"description": "🧱 Makefile building blocks",
"support": {
"issues": "https://github.com/WyriHaximus/Makefiles/issues",
- "source": "https://github.com/WyriHaximus/Makefiles/tree/0.11.0"
+ "source": "https://github.com/WyriHaximus/Makefiles/tree/0.12.3"
},
"funding": [
{
@@ -9286,7 +9299,61 @@
"type": "github"
}
],
- "time": "2026-06-13T00:33:51+00:00"
+ "time": "2026-07-02T10:01:48+00:00"
+ },
+ {
+ "name": "wyrihaximus/phpstan-no-safe",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/WyriHaximus/phpstan-no-safe.git",
+ "reference": "f9bed3bbba6cf617e25b3753ecbb09ad4d2c4813"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/WyriHaximus/phpstan-no-safe/zipball/f9bed3bbba6cf617e25b3753ecbb09ad4d2c4813",
+ "reference": "f9bed3bbba6cf617e25b3753ecbb09ad4d2c4813",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.4"
+ },
+ "require-dev": {
+ "jawira/case-converter": "^3.6",
+ "nikic/php-parser": "^5.6.1",
+ "phpstan/phpdoc-parser": "^2.2.0",
+ "wyrihaximus/makefiles": "^0.11.1",
+ "wyrihaximus/test-utilities": "^13.1.0"
+ },
+ "type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "WyriHaximus\\PHPStan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "⛔🔐 PHPStan extension that detects and blocks any usage of `thecodingmachine/safe`",
+ "support": {
+ "issues": "https://github.com/WyriHaximus/phpstan-no-safe/issues",
+ "source": "https://github.com/WyriHaximus/phpstan-no-safe/tree/1.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-19T23:15:39+00:00"
},
{
"name": "wyrihaximus/phpstan-react",
@@ -9344,16 +9411,16 @@
},
{
"name": "wyrihaximus/phpstan-rules-wrapper",
- "version": "13.1.0",
+ "version": "14.0.0",
"source": {
"type": "git",
"url": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper.git",
- "reference": "38449f0fc35fce570d26f1841606bbef51710365"
+ "reference": "a06a7d45b26704dc422db617e696267441e9d69b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/38449f0fc35fce570d26f1841606bbef51710365",
- "reference": "38449f0fc35fce570d26f1841606bbef51710365",
+ "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/a06a7d45b26704dc422db617e696267441e9d69b",
+ "reference": "a06a7d45b26704dc422db617e696267441e9d69b",
"shasum": ""
},
"require": {
@@ -9365,11 +9432,12 @@
"phpstan/phpstan-mockery": "^2.0.0",
"phpstan/phpstan-phpunit": "^2.0.16",
"phpstan/phpstan-strict-rules": "^2.0.11",
- "shipmonk/dead-code-detector": "^1.2.0",
+ "shipmonk/dead-code-detector": "^1.2.1",
"shipmonk/phpstan-rules": "^4.4.0",
"staabm/phpstan-psr3": "^1.0.3",
"symplify/phpstan-extensions": "^12.0.2",
"tomasvotruba/type-coverage": "^2.2.2",
+ "wyrihaximus/phpstan-no-safe": "^1.0.0",
"yamadashy/phpstan-friendly-formatter": "^1.4.0"
},
"type": "library",
@@ -9393,7 +9461,7 @@
"description": "🌯 PHPStan rules wrapper",
"support": {
"issues": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/issues",
- "source": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/tree/13.1.0"
+ "source": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/tree/14.0.0"
},
"funding": [
{
@@ -9401,7 +9469,7 @@
"type": "github"
}
],
- "time": "2026-06-08T13:27:51+00:00"
+ "time": "2026-06-19T23:25:20+00:00"
},
{
"name": "wyrihaximus/react-phpunit-run-tests-in-fiber",
@@ -9462,16 +9530,16 @@
},
{
"name": "wyrihaximus/test-utilities",
- "version": "13.1.0",
+ "version": "13.3.0",
"source": {
"type": "git",
"url": "https://github.com/WyriHaximus/php-test-utilities.git",
- "reference": "e4980b68709db0c7a03d8fbd4905eec62dd9b102"
+ "reference": "ed71de5364fbf676c30110ee1c9e7e26e24aee03"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/e4980b68709db0c7a03d8fbd4905eec62dd9b102",
- "reference": "e4980b68709db0c7a03d8fbd4905eec62dd9b102",
+ "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/ed71de5364fbf676c30110ee1c9e7e26e24aee03",
+ "reference": "ed71de5364fbf676c30110ee1c9e7e26e24aee03",
"shasum": ""
},
"require": {
@@ -9481,7 +9549,7 @@
"ext-hash": "^8.4",
"ext-json": "^8.4",
"icanhazstring/composer-unused": "^0.9.6",
- "infection/infection": "^0.33.2",
+ "infection/infection": "^0.33.3",
"maglnet/composer-require-checker": "^4.20.0",
"mockery/mockery": "^1.6.12",
"php": "^8.4",
@@ -9489,11 +9557,11 @@
"php-parallel-lint/php-parallel-lint": "^1.4.0",
"phpstan/phpstan": "^2.2.2",
"phpunit/phpunit": "^13.1.13",
- "rector/rector": "^2.4.5",
+ "rector/rector": "^2.5.2",
"roave/backward-compatibility-check": "^8.19.0",
"squizlabs/php_codesniffer": "^4.0.1",
- "wyrihaximus/coding-standard": "^4.0.0",
- "wyrihaximus/phpstan-rules-wrapper": "^13.1.0"
+ "wyrihaximus/coding-standard": "^4.2.0",
+ "wyrihaximus/phpstan-rules-wrapper": "^14.0.0"
},
"conflict": {
"composer-unused/symbol-parser": "<0.3.3",
@@ -9501,7 +9569,7 @@
"wyrihaximus/makefiles": "<0.5.0"
},
"require-dev": {
- "wyrihaximus/makefiles": "^0.10.6"
+ "wyrihaximus/makefiles": "^0.12.1"
},
"suggest": {
"wyrihaximus/async-test-utilities": "The recommended addition to this package when building ReactPHP packages and projects.",
@@ -9534,7 +9602,7 @@
"description": "🛠️ Test utilities for api-clients packages",
"support": {
"issues": "https://github.com/WyriHaximus/php-test-utilities/issues",
- "source": "https://github.com/WyriHaximus/php-test-utilities/tree/13.1.0"
+ "source": "https://github.com/WyriHaximus/php-test-utilities/tree/13.3.0"
},
"funding": [
{
@@ -9542,7 +9610,7 @@
"type": "github"
}
],
- "time": "2026-06-08T22:56:10+00:00"
+ "time": "2026-06-27T20:14:37+00:00"
},
{
"name": "yamadashy/phpstan-friendly-formatter",
diff --git a/etc/qa/phpcs.xml b/etc/qa/phpcs.xml
deleted file mode 100644
index 9ecccf9..0000000
--- a/etc/qa/phpcs.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
- ../../stubs
-
-
-
diff --git a/etc/qa/rector.php b/etc/qa/rector.php
deleted file mode 100644
index 16b1c00..0000000
--- a/etc/qa/rector.php
+++ /dev/null
@@ -1 +0,0 @@
-