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 @@ -