diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cd3dd09..7623471 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,33 +6,22 @@ Fork, then clone the repo: git clone git@github.com:your-username/reactphp-http-middleware-session.git -Set up your machine: +Install dependencies: - composer install + make install -Make sure the tests pass: +Work on the contribution and check if it passes all QA checks with: - make unit + make -Make your change. Add tests for your change. Make the tests pass: - - make unit - -Before committing and submitting your pull request make sure it passes PSR2 coding style, unit tests pass and pass on all supported PHP versions: +If some of the PHPStan or other checks are to strict or intimidating that is fine, finish what you want to contribute and I'll help you with those, but please make the following command passes. It runs a subset of everything: make contrib -Push to your fork and [submit a pull request][pr]. - -[pr]: https://help.github.com/articles/creating-a-pull-request/ +You can list all the contrib commands with: -At this point you're waiting on me. I like to at least comment on pull requests -within a day or two. I may suggest some changes or improvements or alternatives. + make help-contrib -Some things that will increase the chance that your pull request is accepted: - -* Write tests. -* Follow PSR2 (travis will also check for this). -* Write a [good commit message][commit]. +Push to your fork and [submit a pull request][pr]. -[commit]: http://chris.beams.io/posts/git-commit/ +[pr]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request diff --git a/Makefile b/Makefile index c33992b..14775f1 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,7 @@ endif ifeq ("$(IN_DOCKER)","TRUE") DOCKER_RUN:= + DOCKER_RUN_WITHOUT_NETWORK_FOR_COMPOSER:= DOCKER_RUN_WITH_SOCKET:= DOCKER_SHELL:= DOCKER_INTERACTIVE_SHELL:= @@ -48,11 +49,13 @@ else DOCKER_SOCKET_CONTAINER_NAME_SUFFIX:= endif DOCKER_RUN:=docker run --rm -i ${DOCKER_SECURITY_OPS} ${DOCKER_COMMON_NON_INTERACTIVE_OPS} ${DOCKER_COMMON_OPS} "${CONTAINER_NAME}" + DOCKER_RUN_WITHOUT_NETWORK_FOR_COMPOSER:=docker run --rm -i ${DOCKER_SECURITY_OPS} ${DOCKER_COMMON_NON_INTERACTIVE_OPS} -e COMPOSER_DISABLE_NETWORK="1" ${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_WITHOUT_NETWORK_FOR_COMPOSER:= DOCKER_RUN_WITH_SOCKET:= DOCKER_SHELL:= DOCKER_INTERACTIVE_SHELL:= @@ -65,24 +68,31 @@ else THREADS=$(shell nproc) endif -## Run everything extra point +## Run everything extra points all: ## Runs everything #### $(DOCKER_RUN_WITH_SOCKET) make all-raw all-raw: ## The real runs everything, but due to sponge it has to be ran inside DOCKER_RUN ##U## - $(MAKE) composer-validate syntax-php rector-upgrade cs-fix cs stan unit-testing mutation-testing composer-require-checker composer-unused backward-compatibility-check ## Count: 11 + $(MAKE) composer-validate syntax-php composer-normalize rector-upgrade cs-fix cs stan unit-testing mutation-testing composer-require-checker composer-unused backward-compatibility-check ## Count: 12 + + +## Run a subset of everything for those that find everything intimidating +contrib: ## Runs a subset of everything (all) #### + $(DOCKER_RUN_WITH_SOCKET) make contrib-raw +contrib-raw: ## The real runs everything, but due to sponge it has to be ran inside DOCKER_RUN ##U## + $(MAKE) cs-fix cs unit-testing composer-require-checker composer-unused ## Count: 5 ## Temporary set of migrations to get all my repos in shape -migrations-git-enforce-gitattributes-contents: #### Enforce .gitattributes contents ##*I*## +migrations-git-enforce-gitattributes-contents: #### Enforce `.gitattributes` contents ##*I*## ($(DOCKER_RUN) php -r 'file_put_contents(".gitattributes", base64_decode("IyBTZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGluIGNhc2UgcGVvcGxlIGRvbid0IGhhdmUgY29yZS5hdXRvY3JsZiBzZXQuCiogdGV4dCBlb2w9bGYKCiMgVGhlc2UgZmlsZXMgYXJlIGJpbmFyeSBhbmQgc2hvdWxkIGJlIGxlZnQgdW50b3VjaGVkCiMgKGJpbmFyeSBpcyBhIG1hY3JvIGZvciAtdGV4dCAtZGlmZikKKi5wbmcgYmluYXJ5CiouanBnIGJpbmFyeQoqLmpwZWcgYmluYXJ5CiouZ2lmIGJpbmFyeQoqLmljbyBiaW5hcnkKKi53ZWJwIGJpbmFyeQoqLmJtcCBiaW5hcnkKKi50dGYgYmluYXJ5CiouYmxwIGJpbmFyeQoqLmRiMiBiaW5hcnkKCiMgSWdub3JpbmcgZmlsZXMgZm9yIGRpc3RyaWJ1dGlvbiBhcmNoaWV2ZXMKLmdpdGh1Yi8gZXhwb3J0LWlnbm9yZQpldGMvY2kvIGV4cG9ydC1pZ25vcmUKZXRjL2Rldi1hcHAvIGV4cG9ydC1pZ25vcmUKZXRjL3FhLyBleHBvcnQtaWdub3JlCmV4YW1wbGVzLyBleHBvcnQtaWdub3JlCnRlc3RzLyBleHBvcnQtaWdub3JlCnZhci8gZXhwb3J0LWlnbm9yZQouZGV2Y29udGFpbmVyLmpzb24gZXhwb3J0LWlnbm9yZQouZWRpdG9yY29uZmlnIGV4cG9ydC1pZ25vcmUKLmdpdGF0dHJpYnV0ZXMgZXhwb3J0LWlnbm9yZQouZ2l0aWdub3JlIGV4cG9ydC1pZ25vcmUKQ09OVFJJQlVUSU5HLm1kIGV4cG9ydC1pZ25vcmUKY29tcG9zZXIubG9jayBleHBvcnQtaWdub3JlCk1ha2VmaWxlIGV4cG9ydC1pZ25vcmUKUkVBRE1FLm1kIGV4cG9ydC1pZ25vcmUKCiMgRGlmZmluZwoqLnBocCBkaWZmPXBocAo="));' || true) -migrations-git-make-sure-gitignore-exists: #### Make sure .gitignore exists ##*I*## +migrations-git-make-sure-gitignore-exists: #### Make sure `.gitignore` exists ##*I*## ($(DOCKER_RUN) touch .gitignore || true) -migrations-git-make-sure-gitignore-ignores-var: #### Make sure .gitignore ignores var/* ##*I*## +migrations-git-make-sure-gitignore-ignores-var: #### Make sure `.gitignore` ignores `var/*` ##*I*## ($(DOCKER_RUN) php -r '$$gitignoreFile = ".gitignore"; if (!file_exists($$gitignoreFile)) {exit;} $$txt = file_get_contents($$gitignoreFile); if (!is_string($$txt)) {exit;} if (strpos($$txt, "var/*") !== false) {exit;} file_put_contents($$gitignoreFile, "var/*\n", FILE_APPEND);' || true) -migrations-git-make-sure-gitignore-excludes-var-gitkeep: #### Make sure .gitignore excludes var/.gitkeep ##*I*## +migrations-git-make-sure-gitignore-excludes-var-gitkeep: #### Make sure `.gitignore` excludes `var/.gitkeep` ##*I*## ($(DOCKER_RUN) php -r '$$gitignoreFile = ".gitignore"; if (!file_exists($$gitignoreFile)) {exit;} $$txt = file_get_contents($$gitignoreFile); if (!is_string($$txt)) {exit;} if (strpos($$txt, "!var/.gitkeep") !== false) {exit;} file_put_contents($$gitignoreFile, "!var/.gitkeep\n", FILE_APPEND);' || true) migrations-docs-update-readme-copyright-c-year-to-current: #### Update readme copyright year to current ##*I*## @@ -106,6 +116,9 @@ 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-docs-enforce-contributing-md-contents: #### Enforce CONTRIBUTING.md contents ##*I*## + ($(DOCKER_RUN) php -r '$$contributingFile = "CONTRIBUTING.md"; $$contributingContents = base64_decode("IyBDb250cmlidXRpbmcKClB1bGwgcmVxdWVzdHMgYXJlIGhpZ2hseSBhcHByZWNpYXRlZC4gSGVyZSdzIGEgcXVpY2sgZ3VpZGUuCgpGb3JrLCB0aGVuIGNsb25lIHRoZSByZXBvOgoKICAgIGdpdCBjbG9uZSBnaXRAZ2l0aHViLmNvbTp5b3VyLXVzZXJuYW1lL1tyZXBvXS5naXQKCkluc3RhbGwgZGVwZW5kZW5jaWVzOgoKICAgIG1ha2UgaW5zdGFsbAoKV29yayBvbiB0aGUgY29udHJpYnV0aW9uIGFuZCBjaGVjayBpZiBpdCBwYXNzZXMgYWxsIFFBIGNoZWNrcyB3aXRoOgoKICAgIG1ha2UKCklmIHNvbWUgb2YgdGhlIFBIUFN0YW4gb3Igb3RoZXIgY2hlY2tzIGFyZSB0byBzdHJpY3Qgb3IgaW50aW1pZGF0aW5nIHRoYXQgaXMgZmluZSwgZmluaXNoIHdoYXQgeW91IHdhbnQgdG8gY29udHJpYnV0ZSBhbmQgSSdsbCBoZWxwIHlvdSB3aXRoIHRob3NlLCBidXQgcGxlYXNlIG1ha2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHBhc3Nlcy4gSXQgcnVucyBhIHN1YnNldCBvZiBldmVyeXRoaW5nOgoKICAgIG1ha2UgY29udHJpYgoKWW91IGNhbiBsaXN0IGFsbCB0aGUgY29udHJpYiBjb21tYW5kcyB3aXRoOgoKICAgIG1ha2UgaGVscC1jb250cmliCgpQdXNoIHRvIHlvdXIgZm9yayBhbmQgW3N1Ym1pdCBhIHB1bGwgcmVxdWVzdF1bcHJdLgoKW3ByXTogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vcHVsbC1yZXF1ZXN0cy9jb2xsYWJvcmF0aW5nLXdpdGgtcHVsbC1yZXF1ZXN0cy9wcm9wb3NpbmctY2hhbmdlcy10by15b3VyLXdvcmstd2l0aC1wdWxsLXJlcXVlc3RzL2NyZWF0aW5nLWEtcHVsbC1yZXF1ZXN0Cg=="); file_put_contents($$contributingFile, str_replace(["[repo]"], [basename(__DIR__)], $$contributingContents)); ' || true) + migrations-php-make-sure-var-exists: #### Make sure `var/` exists ##*I*## ($(DOCKER_RUN) mkdir var || true) @@ -142,19 +155,22 @@ migrations-php-remove-old-scrutinizer-yml-config: #### Make sure we remove `.scr 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*## +migrations-php-remove-old-travis-yml-config: #### Make sure we remove `.travis.yml` ##*I*## + ($(DOCKER_RUN) rm .travis.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) -migrations-php-move-infection-config-to-etc: #### Move infection.json.dist to etc/qa/infection.json5 ##*I*## +migrations-php-move-infection-config-to-etc: #### Move `infection.json.dist` to `etc/qa/infection.json5` ##*I*## ($(DOCKER_RUN) mv infection.json.dist etc/qa/infection.json5 || true) -migrations-php-infection-create-config-if-not-exists: #### Create Infection config file if it doesn't exists at etc/qa/infection.json5 ##*I*## +migrations-php-infection-create-config-if-not-exists: #### Create Infection config file if it doesn't exists at `etc/qa/infection.json5` ##*I*## ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; $$infectionConfig = base64_decode("ewogICAgInRpbWVvdXQiOiAxMjAsCiAgICAic291cmNlIjogewogICAgICAgICJkaXJlY3RvcmllcyI6IFsKICAgICAgICAgICAgInNyYyIKICAgICAgICBdCiAgICB9LAogICAgImxvZ3MiOiB7CiAgICAgICAgInRleHQiOiAiLi4vLi4vdmFyL2luZmVjdGlvbi5sb2ciLAogICAgICAgICJzdW1tYXJ5IjogIi4uLy4uL3Zhci9pbmZlY3Rpb24tc3VtbWFyeS5sb2ciLAogICAgICAgICJqc29uIjogIi4uLy4uL3Zhci9pbmZlY3Rpb24uanNvbiIsCiAgICAgICAgInBlck11dGF0b3IiOiAiLi4vLi4vdmFyL2luZmVjdGlvbi1wZXItbXV0YXRvci5tZCIsCiAgICAgICAgImdpdGh1YiI6IHRydWUKICAgIH0sCiAgICAibWluTXNpIjogMTAwLAogICAgIm1pbkNvdmVyZWRNc2kiOiAxMDAsCiAgICAiaWdub3JlTXNpV2l0aE5vTXV0YXRpb25zIjogdHJ1ZSwKICAgICJtdXRhdG9ycyI6IHsKICAgICAgICAiQGRlZmF1bHQiOiB0cnVlCiAgICB9Cn0K"); if (file_exists($$infectionFile)) {exit;} file_put_contents($$infectionFile, $$infectionConfig);' || true) -migrations-php-remove-phpunit-config-dir-from-infection: #### Drop XXX from etc/qa/infection.json5 ##*I*## +migrations-php-remove-phpunit-config-dir-from-infection: #### Drop XXX from `etc/qa/infection.json5` ##*I*## ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("phpUnit", $$json)) {exit;} unset($$json["phpUnit"]); file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true) -migrations-php-fix-logs-relative-paths-for-infection: #### Fix logs paths in etc/qa/infection.json5 ##*I*## +migrations-php-fix-logs-relative-paths-for-infection: #### Fix logs paths in `etc/qa/infection.json5` ##*I*## ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) {exit;} foreach ($$json["logs"] as $$logsKey => $$logsPath) { if (is_string($$json["logs"][$$logsKey]) && str_starts_with($$json["logs"][$$logsKey], "./var/infection")) { $$json["logs"][$$logsKey] = str_replace("./var/infection", "../../var/infection", $$json["logs"][$$logsKey]); } } file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true) migrations-php-infection-ensure-log-text-has-the-correct-path: #### Ensure infection's log.text has config directive has the correct path ##*I*## @@ -169,37 +185,37 @@ migrations-php-infection-ensure-log-json-has-the-correct-path: #### Ensure infec migrations-php-infection-ensure-log-per-mutator-has-the-correct-path: #### Ensure infection's log.perMutator has config directive has the correct path ##*I*## ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) { $$json["logs"] = []; } $$json["logs"]["perMutator"] = "../../var/infection-per-mutator.md"; file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true) -migrations-php-add-github-true-to-for-infection: #### Ensure we configure infection to emit logs to GitHub in etc/qa/infection.json5 ##*I*## +migrations-php-add-github-true-to-for-infection: #### Ensure we configure infection to emit logs to GitHub in `etc/qa/infection.json5` ##*I*## ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) {exit;} if (array_key_exists("github", $$json["logs"])) {exit;} $$json["logs"]["github"] = true; file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true) -migrations-php-make-paths-compatible-with-infection-0-32: #### We update path to be relative to etc/qa/infection.json5 as of 0.32 ##*I*## +migrations-php-make-paths-compatible-with-infection-0-32: #### We update path to be relative to `etc/qa/infection.json5` as of 0.32 ##*I*## ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("source", $$json)) {exit;} if (!array_key_exists("directories", $$json["source"])) {exit;} foreach ($$json["source"]["directories"] as $$key => $$value) { if (!str_starts_with($$value, "../../")) {$$json["source"]["directories"][$$key] = "../../" . $$value;} } file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true) -migrations-php-set-phpunit-ensure-config-file-exists: #### Make sure we have a PHPUnit config file at etc/qa/phpunit.xml ##*I*## +migrations-php-set-phpunit-ensure-config-file-exists: #### Make sure we have a PHPUnit config file at `etc/qa/phpunit.xml` ##*I*## ($(DOCKER_RUN) php -r '$$phpUnitConfigFIle = "etc/qa/phpunit.xml"; if (file_exists($$phpUnitConfigFIle)) {exit;} file_put_contents($$phpUnitConfigFIle, base64_decode("PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICBib290c3RyYXA9Ii4uLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAiCiAgICBjb2xvcnM9InRydWUiCiAgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iLi4vLi4vdmVuZG9yL3BocHVuaXQvcGhwdW5pdC9waHB1bml0LnhzZCIKICAgIGNhY2hlRGlyZWN0b3J5PSIuLi8uLi92YXIvcGhwdW5pdC9jYWNoZSIKICAgIGRpc3BsYXlEZXRhaWxzT25UZXN0c1RoYXRUcmlnZ2VyRGVwcmVjYXRpb25zPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblRlc3RzVGhhdFRyaWdnZXJFcnJvcnM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlck5vdGljZXM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlcldhcm5pbmdzPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblBocHVuaXREZXByZWNhdGlvbnM9InRydWUiCj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li4vLi4vdGVzdHMvPC9kaXJlY3Rvcnk+CiAgICAgICAgPC90ZXN0c3VpdGU+CiAgICA8L3Rlc3RzdWl0ZXM+CiAgICA8c291cmNlPgogICAgICAgIDxpbmNsdWRlPgogICAgICAgICAgICA8ZGlyZWN0b3J5IHN1ZmZpeD0iLnBocCI+Li4vLi4vc3JjLzwvZGlyZWN0b3J5PgogICAgICAgIDwvaW5jbHVkZT4KICAgIDwvc291cmNlPgogICAgPGV4dGVuc2lvbnM+CiAgICAgICAgPGJvb3RzdHJhcCBjbGFzcz0iRXJnZWJuaXNcUEhQVW5pdFxTbG93VGVzdERldGVjdG9yXEV4dGVuc2lvbiIvPgogICAgPC9leHRlbnNpb25zPgo8L3BocHVuaXQ+Cg=="));' || true) -migrations-php-set-phpunit-xsd-path-to-local: #### Ensure that the PHPUnit XDS referred in etc/qa/phpunit.xml points to vendor/phpunit/phpunit/phpunit.xsd so we don't go over the network ##*I*## +migrations-php-set-phpunit-xsd-path-to-local: #### Ensure that the PHPUnit XDS referred in `etc/qa/phpunit.xml` points to `vendor/phpunit/phpunit/phpunit.xsd` so we don't go over the network ##*I*## ($(DOCKER_RUN) php -r '$$phpUnitConfigFIle = "etc/qa/phpunit.xml"; if (!file_exists($$phpUnitConfigFIle)) {exit;} $$xml = file_get_contents($$phpUnitConfigFIle); if (!is_string($$xml)) {exit;} for ($$major = 0; $$major < 23; $$major++) { for ($$minor = 0; $$minor < 23; $$minor++) { $$xml = str_replace("https://schema.phpunit.de/" . $$major . "." . $$minor . "/phpunit.xsd", "../../vendor/phpunit/phpunit/phpunit.xsd", $$xml); } } file_put_contents($$phpUnitConfigFIle, $$xml);' || true) migrations-php-set-phpunit-make-sure-we-see-all-the-warnings-deprecations-etc-etc-that-will-make-phpunit-do-a-non-happy-exit: #### Make sure we see all the warnings, deprecations, etc etc that will make PHPunit do a non-happy exit ##*I*## - ($(DOCKER_RUN) php -r '$$phpUnitConfigFIle = "etc/qa/phpunit.xml"; if (!file_exists($$phpUnitConfigFIle)) {exit;} $$xml = file_get_contents($$phpUnitConfigFIle); if (!is_string($$xml)) {exit;} $$xml = str_replace(base64_decode("PHBocHVuaXQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgYm9vdHN0cmFwPSIuLi8uLi92ZW5kb3IvYXV0b2xvYWQucGhwIiBjb2xvcnM9InRydWUiIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSIuLi8uLi92ZW5kb3IvcGhwdW5pdC9waHB1bml0L3BocHVuaXQueHNkIiBjYWNoZURpcmVjdG9yeT0iLi4vLi4vdmFyL3BocHVuaXQvY2FjaGUiPg=="), base64_decode("PHBocHVuaXQKICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICBib290c3RyYXA9Ii4uLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAiCiAgICBjb2xvcnM9InRydWUiCiAgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iLi4vLi4vdmVuZG9yL3BocHVuaXQvcGhwdW5pdC9waHB1bml0LnhzZCIKICAgIGNhY2hlRGlyZWN0b3J5PSIuLi8uLi92YXIvcGhwdW5pdC9jYWNoZSIKICAgIGRpc3BsYXlEZXRhaWxzT25UZXN0c1RoYXRUcmlnZ2VyRGVwcmVjYXRpb25zPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblRlc3RzVGhhdFRyaWdnZXJFcnJvcnM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlck5vdGljZXM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlcldhcm5pbmdzPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblBocHVuaXREZXByZWNhdGlvbnM9InRydWUiCj4="), $$xml); file_put_contents($$phpUnitConfigFIle, $$xml);' || true) + ($(DOCKER_RUN) php -r '$$phpUnitConfigFIle = "etc/qa/phpunit.xml"; if (!file_exists($$phpUnitConfigFIle)) {exit;} $$xml = file_get_contents($$phpUnitConfigFIle); if (!is_string($$xml)) {exit;} $$xml = str_replace(base64_decode("PHBocHVuaXQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgYm9vdHN0cmFwPSIuLi8uLi92ZW5kb3IvYXV0b2xvYWQucGhwIiBjb2xvcnM9InRydWUiIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSIuLi8uLi92ZW5kb3IvcGhwdW5pdC9waHB1bml0L3BocHVuaXQueHNkIiBjYWNoZURpcmVjdG9yeT0iLi4vLi4vdmFyL3BocHVuaXQvY2FjaGUiPgo="), base64_decode("PHBocHVuaXQKICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICBib290c3RyYXA9Ii4uLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAiCiAgICBjb2xvcnM9InRydWUiCiAgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iLi4vLi4vdmVuZG9yL3BocHVuaXQvcGhwdW5pdC9waHB1bml0LnhzZCIKICAgIGNhY2hlRGlyZWN0b3J5PSIuLi8uLi92YXIvcGhwdW5pdC9jYWNoZSIKICAgIGRpc3BsYXlEZXRhaWxzT25UZXN0c1RoYXRUcmlnZ2VyRGVwcmVjYXRpb25zPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblRlc3RzVGhhdFRyaWdnZXJFcnJvcnM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlck5vdGljZXM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlcldhcm5pbmdzPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblBocHVuaXREZXByZWNhdGlvbnM9InRydWUiCj4K"), $$xml); file_put_contents($$phpUnitConfigFIle, $$xml);' || true) -migrations-php-move-phpstan: #### Move phpstan.neon to etc/qa/phpstan.neon ##*I*## +migrations-php-move-phpstan: #### Move `phpstan.neon` to `etc/qa/phpstan.neon` ##*I*## ($(DOCKER_RUN) mv phpstan.neon etc/qa/phpstan.neon || true) -migrations-php-set-phpstan-ensure-config-file-exists: #### Make sure we have a PHPStan config file at etc/qa/phpstan.neon ##*I*## +migrations-php-set-phpstan-ensure-config-file-exists: #### Make sure we have a PHPStan config file at `etc/qa/phpstan.neon` ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (file_exists($$phpStanConfigFIle)) {exit;} file_put_contents($$phpStanConfigFIle, "#parameters:");' || true) -migrations-php-set-phpstan-uncomment-parameters: #### Ensure PHPStan config as parameters not commented out in etc/qa/phpstan.neon ##*I*## +migrations-php-set-phpstan-uncomment-parameters: #### Ensure PHPStan config as parameters not commented out in `etc/qa/phpstan.neon` ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (!str_starts_with($$neon, "#parameters:")) {exit;} $$neon = str_replace("#parameters:", "parameters:", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true) -migrations-php-set-phpstan-add-parameters-if-it-isnt-present-in-the-config-file: #### Add parameters to PHPStan config file at etc/qa/phpstan.neon if it's not present ##*I*## +migrations-php-set-phpstan-add-parameters-if-it-isnt-present-in-the-config-file: #### Add parameters to PHPStan config file at `etc/qa/phpstan.neon` if it's not present ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (strpos($$neon, "parameters:") !== false) {exit;} file_put_contents($$phpStanConfigFIle, "parameters:", FILE_APPEND);' || true) -migrations-php-set-phpstan-paths-in-config: #### Ensure PHPStan config has the etc, src, and (optionally) tests paths set in etc/qa/phpstan.neon ##*I*## +migrations-php-set-phpstan-paths-in-config: #### Ensure PHPStan config has the `etc`, `src`, and (optionally) `tests` paths set in `etc/qa/phpstan.neon` ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; $$pathsString = "\n\tpaths:\n\t\t- ../../etc\n\t\t- ../../src\n\t\t- ../../tests"; $$pathsStringWithoutTests = "\n\tpaths:\n\t\t- ../../etc\n\t\t- ../../src"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (strpos($$neon, $$pathsString) !== false || strpos($$neon, $$pathsStringWithoutTests) !== false) {exit;} $$neon = str_replace("parameters:", "parameters:" . $$pathsString, $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true) -migrations-php-set-phpstan-level-max-in-config: #### Ensure PHPStan config has level set to max in etc/qa/phpstan.neon ##*I*## +migrations-php-set-phpstan-level-max-in-config: #### Ensure PHPStan config has level set to max in `etc/qa/phpstan.neon` ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; $$levelString = "\n\tlevel: max"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (strpos($$neon, $$levelString) !== false) {exit;} $$neon = str_replace("parameters:", "parameters:" . $$levelString, $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true) migrations-php-set-phpstan-resolve-ergebnis-noExtends-classesAllowedToBeExtended: #### Ensure PHPStan config uses ergebnis.noExtends.classesAllowedToBeExtended not ergebnis.classesAllowedToBeExtended ##*I*## @@ -208,70 +224,70 @@ migrations-php-set-phpstan-resolve-ergebnis-noExtends-classesAllowedToBeExtended migrations-php-set-phpstan-drop-checkGenericClassInNonGenericObjectType: #### Ensure PHPStan config doesn't contain checkGenericClassInNonGenericObjectType as it's no longer a valid config option ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("\tcheckGenericClassInNonGenericObjectType: false\n", "", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true) -migrations-php-phpstan-add-prefix-for-anything-that-starts-with-vendor-in-a-list: #### PHPStan add ../../ to anything in a list that starts with vendor ##*I*## +migrations-php-phpstan-add-prefix-for-anything-that-starts-with-vendor-in-a-list: #### PHPStan add `../../` to anything in a list that starts with `vendor` ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("- vendor", "- ../../vendor", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true) -migrations-php-set-phpstan-drop-include-test-utilities-rules: #### Ensure PHPStan config doesn't contain include for wyrihaximus/async-utilities/rules.neon as it's now an extension ##*I*## +migrations-php-set-phpstan-drop-include-test-utilities-rules: #### Ensure PHPStan config doesn't contain include for `wyrihaximus/async-utilities/rules.neon` as it's now an extension ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("\nincludes:\n\t- ../../vendor/wyrihaximus/test-utilities/rules.neon\n", "", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true) -migrations-php-set-phpstan-drop-include-async-test-utilities-rules: #### Ensure PHPStan config doesn't contain include for wyrihaximus/async-test-utilities/rules.neon as it's now an extension ##*I*## +migrations-php-set-phpstan-drop-include-async-test-utilities-rules: #### Ensure PHPStan config doesn't contain include for `wyrihaximus/async-test-utilities/rules.neon` as it's now an extension ##*I*## ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("\nincludes:\n\t- ../../vendor/wyrihaximus/async-test-utilities/rules.neon", "", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true) -migrations-php-set-rector-create-config-if-not-exists: #### Create Rector config file if it doesn't exists at etc/qa/rector.php ##*I*## +migrations-php-set-rector-create-config-if-not-exists: #### Create Rector config file if it doesn't exists at `etc/qa/rector.php` ##*I*## ($(DOCKER_RUN) php -r '$$rectorConfigFile = "etc/qa/rector.php"; $$defaultRectorConfig = "", "", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-cache-is-correct-relatively: #### Make sure PHPCS cache path is has ../../var/.phpcs.cache and not .phpcs.cache ##*I*## +migrations-php-phpcs-make-cache-is-correct-relatively: #### Make sure PHPCS cache path is has `../../var/.phpcs.cache` and not `.phpcs.cache` ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("", "", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-etc: #### Make sure PHPCS has ../../ prefixing etc/ to ensure correct relative path ##*I*## +migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-etc: #### Make sure PHPCS has `../../` prefixing `etc/` to ensure correct relative path ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("etc", "../../etc/", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-sure-etc-has-no-trailing-slash: #### Make sure PHPCS has no tailing / on etc ##*I*## +migrations-php-phpcs-make-sure-etc-has-no-trailing-slash: #### Make sure PHPCS has no tailing `/` on `etc` ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("../../etc/", "../../etc", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-src: #### Make sure PHPCS has ../../ prefixing src/ to ensure correct relative path ##*I*## +migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-src: #### Make sure PHPCS has `../../` prefixing `src/` to ensure correct relative path ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("src", "../../src/", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-sure-src-has-no-trailing-slash: #### Make sure PHPCS has no tailing / on src ##*I*## +migrations-php-phpcs-make-sure-src-has-no-trailing-slash: #### Make sure PHPCS has no tailing `/` on src ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("../../src/", "../../src", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-tests: #### Make sure PHPCS has ../../ prefixing tests/ to ensure correct relative path ##*I*## +migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-tests: #### Make sure PHPCS has `../../` prefixing `tests/` to ensure correct relative path ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("tests", "../../tests/", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-sure-tests-has-no-trailing-slash: #### Make sure PHPCS has no tailing / on tests ##*I*## +migrations-php-phpcs-make-sure-tests-has-no-trailing-slash: #### Make sure PHPCS has no tailing `/` on `tests` ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("../../tests/", "../../tests", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-phpcs-make-sure-etc-is-ran-through: #### Make sure PHPCS runs through etc ##*I*## +migrations-php-phpcs-make-sure-etc-is-ran-through: #### Make sure PHPCS runs through `etc` ##*I*## ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} if (strpos($$xml, "../../etc") !== false) {exit;} $$xml = str_replace("../../src", "../../etc\n ../../src", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-phpcs-include-examples-directory-when-present: #### Make sure PHPCS runs through examples when it exists ##*I*## +migrations-phpcs-include-examples-directory-when-present: #### Make sure PHPCS runs through `examples` when it exists ##*I*## ($(DOCKER_RUN) php -r 'if (!file_exists("examples/")) {exit;} $$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} if (strpos($$xml, "../../examples") !== false) {exit;} $$xml = str_replace("../../etc", "../../etc\n ../../examples", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true) -migrations-php-move-composer-require-checker: #### Move composer-require-checker.json to etc/qa/composer-require-checker.json ##*I*## +migrations-php-move-composer-require-checker: #### Move composer-require-checker.json to `etc/qa/composer-require-checker.json` ##*I*## ($(DOCKER_RUN) mv composer-require-checker.json etc/qa/composer-require-checker.json || true) -migrations-php-composer-require-checker-create-config-if-not-exists: #### Create Composer Require Checker config file if it doesn't exists at etc/qa/composer-require-checker.json ##*I*## +migrations-php-composer-require-checker-create-config-if-not-exists: #### Create Composer Require Checker config file if it doesn't exists at `etc/qa/composer-require-checker.json` ##*I*## ($(DOCKER_RUN) php -r '$$composerRequireCheckerConfigFile = "etc/qa/composer-require-checker.json"; $$composerRequireCheckerConfig = base64_decode("ewogICJzeW1ib2wtd2hpdGVsaXN0IiA6IFsKICAgICJudWxsIiwgInRydWUiLCAiZmFsc2UiLAogICAgInN0YXRpYyIsICJzZWxmIiwgInBhcmVudCIsCiAgICAiYXJyYXkiLCAic3RyaW5nIiwgImludCIsICJmbG9hdCIsICJib29sIiwgIml0ZXJhYmxlIiwgImNhbGxhYmxlIiwgInZvaWQiLCAib2JqZWN0IgogIF0sCiAgInBocC1jb3JlLWV4dGVuc2lvbnMiIDogWwogICAgIkNvcmUiLAogICAgImRhdGUiLAogICAgInBjcmUiLAogICAgIlBoYXIiLAogICAgIlJlZmxlY3Rpb24iLAogICAgIlNQTCIsCiAgICAic3RhbmRhcmQiCiAgXSwKICAic2Nhbi1maWxlcyIgOiBbXQp9Cg=="); if (file_exists($$composerRequireCheckerConfigFile)) {exit;} file_put_contents($$composerRequireCheckerConfigFile, $$composerRequireCheckerConfig);' || true) migrations-inline-code-phpstan-remove-line-phpstan-ignore-next-line: #### Remove all lines that contains @phpstan-ignore-next-line ##*I*## @@ -286,6 +302,9 @@ migrations-inline-code-psalm-remove-line-psalm-suppress: #### Remove all lines t migrations-inline-code-remove-line-internal: #### Remove all lines that contain @internal ##*I*## ($(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-inline-code-phpunit-replace-expectexceptionmessage-with-expectexceptionmessageisorcontains: #### Replace self::expectExceptionMessage with self::expectExceptionMessageIsOrContains in all PHPUnit tests ##*I*## + ($(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 = file_get_contents($$i->key()); if (str_contains($$fileContents, "#[Test]") && str_contains($$fileContents, "use PHPUnit\Framework\Attributes\Test;")) { $$fileContents = str_replace("self::expectExceptionMessage(", "self::expectExceptionMessageIsOrContains(", $$fileContents); file_put_contents($$i->key(), $$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", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {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) @@ -304,69 +323,69 @@ migrations-supported-features-php-ensure-no-rector-config-file-is-present-when-c 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", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {exit;} @unlink("etc/qa/phpcs.xml");' || true) -migrations-php-make-sure-github-exists: #### Make sure .github/ exists ##*I*## +migrations-php-make-sure-github-exists: #### Make sure `.github/` exists ##*I*## ($(DOCKER_RUN) mkdir .github || true) -migrations-github-codeowners: #### Ensure a CODEOWNERS file is present, create only if it doesn't exist yet ##*I*## +migrations-github-codeowners: #### Ensure a `CODEOWNERS` file is present, create only if it doesn't exist yet ##*I*## ($(DOCKER_RUN) php -r '$$codeOwnersFile = ".github/CODEOWNERS"; if (file_exists($$codeOwnersFile)) {exit;} file_put_contents($$codeOwnersFile, "* @WyriHaximus" . PHP_EOL);' || true) -migrations-php-make-sure-github-workflows-exists: #### Make sure .github/workflows exists ##*I*## +migrations-php-make-sure-github-workflows-exists: #### Make sure `.github/workflows` exists ##*I*## ($(DOCKER_RUN) mkdir .github/workflows || true) -migrations-github-actions-remove-composer-diff: #### Remove composer-diff.yaml it has been folded into centralized workflows through ci.yaml ##*I*## +migrations-github-actions-remove-composer-diff: #### Remove `composer-diff.yaml` it has been folded into centralized workflows through `ci.yaml` ##*I*## ($(DOCKER_RUN) rm .github/workflows/composer-diff.yaml || true) -migrations-github-actions-remove-markdown-check-links: #### Remove markdown-check-links.yaml it has been folded into centralized workflows through ci.yaml ##*I*## +migrations-github-actions-remove-markdown-check-links: #### Remove `markdown-check-links.yaml` it has been folded into centralized workflows through `ci.yaml` ##*I*## ($(DOCKER_RUN) rm .github/workflows/markdown-check-links.yaml || true) -migrations-github-actions-remove-markdown-craft-release: #### Remove craft-release.yaml it has been folded into centralized workflows through release-management.yaml ##*I*## +migrations-github-actions-remove-markdown-craft-release: #### Remove `craft-release.yaml` it has been folded into centralized workflows through `release-management.yaml` ##*I*## ($(DOCKER_RUN) rm .github/workflows/craft-release.yaml || true) -migrations-github-actions-remove-set-milestone-on-pr: #### Remove set-milestone-on-pr.yaml it has been folded into centralized workflows through release-management.yaml ##*I*## +migrations-github-actions-remove-set-milestone-on-pr: #### Remove `set-milestone-on-pr.yaml` it has been folded into centralized workflows through `release-management.yaml` ##*I*## ($(DOCKER_RUN) rm .github/workflows/set-milestone-on-pr.yaml || true) -migrations-github-actions-move-ci: #### Move .github/workflows/ci.yml to .github/workflows/ci.yaml ##*I*## +migrations-github-actions-move-ci: #### Move `.github/workflows/ci.yml` to `.github/workflows/ci.yaml` ##*I*## ($(DOCKER_RUN) mv .github/workflows/ci.yml .github/workflows/ci.yaml || true) migrations-github-actions-remove-ci-if-its-old-style-php-ci-workflow: #### Remove CI Workflow if its the old style PHP CI Workflow ##*I*## - ($(DOCKER_RUN) php -r '$$ciWorkflowFile = ".github/workflows/ci.yaml"; if (!file_exists($$ciWorkflowFile)) {exit;} $$yaml = file_get_contents($$ciWorkflowFile); if (!is_string($$yaml)) {exit;} if (strpos($$yaml, "composer: [lowest, locked, highest]") !== false || strpos($$yaml, "composer: [lowest, current, highest]") !== false || strpos($$yaml, "- run: make ${{ matrix.check }}") !== false || strpos($$yaml, base64_decode("aWY6IG1hdHJpeC5jaGVjayA9PSAnYmFja3dhcmQtY29tcGF0aWJpbGl0eS1jaGVjayc=")) !== false) { unlink($$ciWorkflowFile); }' || true) + ($(DOCKER_RUN) php -r '$$ciWorkflowFile = ".github/workflows/ci.yaml"; if (!file_exists($$ciWorkflowFile)) {exit;} $$yaml = file_get_contents($$ciWorkflowFile); if (!is_string($$yaml)) {exit;} if (strpos($$yaml, "composer: [lowest, locked, highest]") !== false || strpos($$yaml, "composer: [lowest, current, highest]") !== false || strpos($$yaml, "- run: make ${{ matrix.check }}") !== false || strpos($$yaml, trim(base64_decode("aWY6IG1hdHJpeC5jaGVjayA9PSAnYmFja3dhcmQtY29tcGF0aWJpbGl0eS1jaGVjaycK"))) !== false) { unlink($$ciWorkflowFile); }' || true) -migrations-github-actions-create-ci-if-not-exists: #### Create CI Workflow if it doesn't exists at .github/workflows/ci.yaml ##*I*## +migrations-github-actions-create-ci-if-not-exists: #### Create CI Workflow if it doesn't exists at `.github/workflows/ci.yaml` ##*I*## ($(DOCKER_RUN) php -r '$$ciWorkflowFile = ".github/workflows/ci.yaml"; $$ciWorkflowContents = base64_decode("bmFtZTogQ29udGludW91cyBJbnRlZ3JhdGlvbgpvbjoKICBwdXNoOgogICAgYnJhbmNoZXM6CiAgICAgIC0gJ21haW4nCiAgICAgIC0gJ21hc3RlcicKICAgICAgLSAncmVmcy9oZWFkcy92WzAtOV0rLlswLTldKy5bMC05XSsnCiAgcHVsbF9yZXF1ZXN0OgojIyBUaGlzIHdvcmtmbG93IG5lZWRzIHRoZSBgcHVsbC1yZXF1ZXN0YCBwZXJtaXNzaW9ucyB0byB3b3JrIGZvciB0aGUgcGFja2FnZSBkaWZmaW5nCiMjIFJlZnM6IGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjcGVybWlzc2lvbnMKcGVybWlzc2lvbnM6CiAgcHVsbC1yZXF1ZXN0czogd3JpdGUKICBjb250ZW50czogcmVhZApqb2JzOgogIGNpOgogICAgbmFtZTogQ29udGludW91cyBJbnRlZ3JhdGlvbgogICAgdXNlczogV3lyaUhheGltdXMvZ2l0aHViLXdvcmtmbG93cy8uZ2l0aHViL3dvcmtmbG93cy9wYWNrYWdlLnlhbWxAbWFpbgo="); if (file_exists($$ciWorkflowFile)) {exit;} file_put_contents($$ciWorkflowFile, $$ciWorkflowContents);' || true) -migrations-github-actions-move-release-management: #### Move .github/workflows/release-managment.yaml to .github/workflows/release-management.yaml ##*I*## +migrations-github-actions-move-release-management: #### Move `.github/workflows/release-managment.yaml` to `.github/workflows/release-management.yaml` ##*I*## ($(DOCKER_RUN) mv .github/workflows/release-managment.yaml .github/workflows/release-management.yaml || true) migrations-github-actions-fix-management-in-release-management-referenced-workflow-file: #### Fix management in release-management referenced workflow file ##*I*## ($(DOCKER_RUN) sed -i -e 's/release-managment.yaml/release-management.yaml/g' .github/workflows/release-management.yaml || true) -migrations-github-actions-create-release-management-if-not-exists: #### Create Release Management Workflow if it doesn't exists at .github/workflows/release-management.yaml ##*I*## +migrations-github-actions-create-release-management-if-not-exists: #### Create Release Management Workflow if it doesn't exists at `.github/workflows/release-management.yaml` ##*I*## ($(DOCKER_RUN) php -r '$$releaseManagementWorkflowFile = ".github/workflows/release-management.yaml"; $$releaseManagementWorkflowContents = base64_decode("bmFtZTogUmVsZWFzZSBNYW5hZ2VtZW50Cm9uOgogIHB1bGxfcmVxdWVzdDoKICAgIHR5cGVzOgogICAgICAtIG9wZW5lZAogICAgICAtIGxhYmVsZWQKICAgICAgLSB1bmxhYmVsZWQKICAgICAgLSBzeW5jaHJvbml6ZQogICAgICAtIHJlb3BlbmVkCiAgICAgIC0gbWlsZXN0b25lZAogICAgICAtIGRlbWlsZXN0b25lZAogICAgICAtIHJlYWR5X2Zvcl9yZXZpZXcKICBtaWxlc3RvbmU6CiAgICB0eXBlczoKICAgICAgLSBjbG9zZWQKcGVybWlzc2lvbnM6CiAgY29udGVudHM6IHdyaXRlCiAgaXNzdWVzOiB3cml0ZQogIHB1bGwtcmVxdWVzdHM6IHdyaXRlCmpvYnM6CiAgcmVsZWFzZS1tYW5hZ21lbnQ6CiAgICBuYW1lOiBSZWxlYXNlIE1hbmFnZW1lbnQKICAgIHVzZXM6IFd5cmlIYXhpbXVzL2dpdGh1Yi13b3JrZmxvd3MvLmdpdGh1Yi93b3JrZmxvd3MvcGFja2FnZS1yZWxlYXNlLW1hbmFnZW1lbnQueWFtbEBtYWluCiAgICB3aXRoOgogICAgICBtaWxlc3RvbmU6ICR7eyBnaXRodWIuZXZlbnQubWlsZXN0b25lLnRpdGxlIH19CiAgICAgIGRlc2NyaXB0aW9uOiAke3sgZ2l0aHViLmV2ZW50Lm1pbGVzdG9uZS50aXRsZSB9fQo="); if (file_exists($$releaseManagementWorkflowFile)) {exit;} file_put_contents($$releaseManagementWorkflowFile, $$releaseManagementWorkflowContents);' || true) -migrations-renovate-remove-dependabot-config: #### Make sure we remove .github/dependabot.yml ##*I*## +migrations-renovate-remove-dependabot-config: #### Make sure we remove `.github/dependabot.yml` ##*I*## ($(DOCKER_RUN) rm .github/dependabot.yml || true) ($(DOCKER_RUN) rm .github/dependabot.yaml || true) -migrations-renovate-move-config: #### Move renovate.json to .github/renovate.json ##*I*## +migrations-renovate-move-config: #### Move `renovate.json` to `.github/renovate.json` ##*I*## ($(DOCKER_RUN) mv renovate.json .github/renovate.json || true) -migrations-renovate-create-config-if-not-exists: #### Create Renovate Config if it doesn't exists at .github/renovate.json ##*I*## +migrations-renovate-create-config-if-not-exists: #### Create Renovate Config if it doesn't exists at `.github/renovate.json` ##*I*## ($(DOCKER_RUN) php -r '$$renovateConfigFile = ".github/renovate.json"; $$renovateConfigContents = base64_decode("ewogICIkc2NoZW1hIjogImh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vcmVub3ZhdGUtc2NoZW1hLmpzb24iLAogICJleHRlbmRzIjogWwogICAgImdpdGh1Yj5XeXJpSGF4aW11cy9yZW5vdmF0ZS1jb25maWc6cGhwLXBhY2thZ2UiCiAgXQp9Cg=="); if (file_exists($$renovateConfigFile)) {exit;} file_put_contents($$renovateConfigFile, $$renovateConfigContents);' || true) -migrations-renovate-point-at-correct-config: #### Ensure .github/renovate.json points at github>WyriHaximus/renovate-config:php-package instead of local>WyriHaximus/renovate-config ##*I*## +migrations-renovate-point-at-correct-config: #### Ensure `.github/renovate.json` points at github>WyriHaximus/renovate-config:php-package instead of local>WyriHaximus/renovate-config ##*I*## ($(DOCKER_RUN) php -r '$$renovateFIle = ".github/renovate.json"; if (!file_exists($$renovateFIle)) {exit;} file_put_contents($$renovateFIle, str_replace("local>WyriHaximus/renovate-config", "github>WyriHaximus/renovate-config:php-package", file_get_contents($$renovateFIle)));' || true) -migration-renovate-set-php-constraint: #### Always keep renovate's constraints.php in sync with composer.json's config.platform.php ##*I*## +migrations-renovate-set-php-constraint: #### Always keep renovate's constraints.php in sync with `composer.json`'s `config.platform.php` ##*I*## ($(DOCKER_RUN) php -r '$$composerFIle = "composer.json"; if (!file_exists($$composerFIle)) {exit;} $$json = json_decode(file_get_contents($$composerFIle), true); if (!array_key_exists("config", $$json)) {exit;} if (!array_key_exists("platform", $$json["config"])) {exit;} if (!array_key_exists("php", $$json["config"]["platform"])) {exit;} $$phpVersionConstraint = str_replace(".13", ".x", $$json["config"]["platform"]["php"]); $$renovateFIle = ".github/renovate.json"; if (!file_exists($$renovateFIle)) {exit;} $$json = json_decode(file_get_contents($$renovateFIle), true); if (!is_array($$json)) {exit;} if (!array_key_exists("constraints", $$json)) {$$json["constraints"] = [];} $$json["constraints"]["php"] = $$phpVersionConstraint; file_put_contents($$renovateFIle, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true) -migration-renovate-set-composer-constraint: #### Always keep renovate's constraints.composer at 2.x ##*I*## +migrations-renovate-set-composer-constraint: #### Always keep renovate's `constraints.composer` at `2.x` ##*I*## ($(DOCKER_RUN) php -r '$$renovateFIle = ".github/renovate.json"; if (!file_exists($$renovateFIle)) {exit;} $$json = json_decode(file_get_contents($$renovateFIle), true); if (!is_array($$json)) {exit;} if (!array_key_exists("constraints", $$json)) {$$json["constraints"] = [];} $$json["constraints"]["composer"] = "2.x"; file_put_contents($$renovateFIle, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true) ## 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-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 rector-upgrade cs-fix ## Count: 101 + $(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-docs-enforce-contributing-md-contents 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-remove-old-travis-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-inline-code-phpunit-replace-expectexceptionmessage-with-expectexceptionmessageisorcontains 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 migrations-renovate-set-php-constraint migrations-renovate-set-composer-constraint composer-validate syntax-php composer-normalize rector-upgrade cs-fix ## Count: 104 composer-validate: ## Ensure we don't require any package we don't use in this package directly ##*IC*## $(DOCKER_SHELL) composer validate @@ -374,26 +393,26 @@ composer-validate: ## Ensure we don't require any package we don't use in this p syntax-php: ## Lint PHP syntax ##*ILH*## $(DOCKER_RUN) vendor/bin/parallel-lint --exclude vendor . -composer-normalize: #### Normalize composer.json ##*I*## +composer-normalize: ## Normalize composer.json ##*I*## $(DOCKER_RUN) composer normalize $(MAKE) update-lock rector-upgrade: ## Upgrade any automatically upgradable old code ##*I*##^code-style^## $(DOCKER_RUN) vendor/bin/rector -c ./etc/qa/rector.php -cs-fix: ## Fix any automatically fixable code style issues ##*I*##^code-style^## +cs-fix: ## Fix any automatically fixable code style issues ##*EI*##^code-style^## $(DOCKER_RUN) vendor/bin/phpcbf --parallel=1 --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml || $(MAKE) cs cs-fix-debug: ## Fix any automatically fixable code style issues, but with debugging output ####^code-style^## $(DOCKER_RUN) vendor/bin/phpcbf --parallel=1 --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml -vvvv -cs: ## Check the code for code style issues ##*LCH*##^code-style^## +cs: ## Check the code for code style issues ##*ELCH*##^code-style^## $(DOCKER_SHELL) vendor/bin/phpcs --parallel=1 --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml stan: ## Run static analysis (PHPStan) ##*LCH*##^static-analysis^## $(DOCKER_SHELL) vendor/bin/phpstan analyse --ansi --configuration=./etc/qa/phpstan.neon -unit-testing: ## Run tests ##*A*##^unit-tests^## +unit-testing: ## Run tests ##*AE*##^unit-tests^## $(DOCKER_RUN_WITH_SOCKET) vendor/bin/phpunit --colors=always -c ./etc/qa/phpunit.xml $(shell $(DOCKER_SHELL) php -r 'if (function_exists("xdebug_get_code_coverage")) { echo " --coverage-text --coverage-html ./var/tests-unit-coverage-html --coverage-clover ./var/tests-unit-clover-coverage.xml"; }') unit-testing-raw: ## Run tests ##*D*##^unit-tests^## @@ -408,10 +427,10 @@ mutation-testing: ## Run mutation testing ##*LCH*##^static-analysis|unit-tests^# mutation-testing-raw: ## Run mutation testing ####^static-analysis|unit-tests^## vendor/bin/infection --ansi --log-verbosity=all --ignore-msi-with-no-mutations --configuration=./etc/qa/infection.json5 --static-analysis-tool=phpstan --static-analysis-tool-options="--memory-limit=-1" --threads=$(THREADS) -composer-require-checker: ## Ensure we require every package used in this package directly ##*C*##^composer-dependency-checkers^## +composer-require-checker: ## Ensure we require every package used in this package directly ##*EC*##^composer-dependency-checkers^## $(DOCKER_SHELL) vendor/bin/composer-require-checker --ignore-parse-errors --ansi -vvv --config-file=./etc/qa/composer-require-checker.json -composer-unused: ## Ensure we don't require any package we don't use in this package directly ##*C*##^composer-dependency-checkers^## +composer-unused: ## Ensure we don't require any package we don't use in this package directly ##*EC*##^composer-dependency-checkers^## $(DOCKER_SHELL) vendor/bin/composer-unused --ansi --configuration=./etc/qa/composer-unused.php backward-compatibility-check: ## Check code for backwards incompatible changes ##*C*## @@ -436,7 +455,7 @@ update: ### Update dependencies #### $(DOCKER_SHELL) composer update -W update-lock: ### Update lockfile #### - $(DOCKER_RUN) COMPOSER_DISABLE_NETWORK=1 composer update --lock --no-scripts || $(DOCKER_RUN) composer update --lock --no-scripts + $(DOCKER_RUN_WITHOUT_NETWORK_FOR_COMPOSER) composer update --lock --no-scripts || $(DOCKER_RUN) composer update --lock --no-scripts outdated: ### Show outdated dependencies #### $(DOCKER_SHELL) composer outdated @@ -449,7 +468,15 @@ shell: ## Provides Shell access in the expected environment #### help: ## Show this help #### @printf "\033[33mUsage:\033[0m\n make [target]\n\n\033[33mTargets:\033[0m\n" - @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -v "##U##" | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d '#' + @printf '%b\n' 'all: ## Runs everything\nbackward-compatibility-check: ## Check code for backwards incompatible changes\nbackward-compatibility-check-raw: ## Check code for backwards incompatible changes, doesn'\''t ignore the failure\ncomposer-normalize: ## Normalize composer.json\ncomposer-outdated: ## Show outdated packages\ncomposer-require: ## Require passed dependencies\ncomposer-require-checker: ## Ensure we require every package used in this package directly\ncomposer-show: ## Show dependencies\ncomposer-unused: ## Ensure we don'\''t require any package we don'\''t use in this package directly\ncomposer-validate: ## Ensure we don'\''t require any package we don'\''t use in this package directly\ncomposer-why: ## Show why a specific dependency is loaded\ncontrib: ## Runs a subset of everything (all)\ncs: ## Check the code for code style issues\ncs-fix: ## Fix any automatically fixable code style issues\ncs-fix-debug: ## Fix any automatically fixable code style issues, but with debugging output\nhelp: ## Show this help\nhelp-contrib: ## Show the migrations help\nhelp-migrations: ## Show the migrations help\ninstall: ## Install dependencies\nmutation-testing: ## Run mutation testing\nmutation-testing-raw: ## Run mutation testing\non-install-or-update: ## Tasks, like migrations, that specifically have be run after composer install or update. These will also run by self hosted Renovate\noutdated: ## Show outdated dependencies\nrector-upgrade: ## Upgrade any automatically upgradable old code\nshell: ## Provides Shell access in the expected environment\nstan: ## Run static analysis (PHPStan)\nsupported-features: ## CI: List the features this package supports\nsyntax-php: ## Lint PHP syntax\ntask-list-ci-all: ## CI: Generate a JSON array of jobs to run on all variations\ntask-list-ci-dos: ## CI: Generate a JSON array of jobs to run Directly on the OS variations\ntask-list-ci-high: ## CI: Generate a JSON array of jobs to run against the highest dependencies on the primary threading target\ntask-list-ci-locked: ## CI: Generate a JSON array of jobs to run against the locked dependencies on the primary threading target\ntask-list-ci-low: ## CI: Generate a JSON array of jobs to run against the lowest dependencies on the primary threading target\nunit-testing: ## Run tests\nunit-testing-filter: ## Run tests with specified filter\nunit-testing-raw: ## Run tests\nupdate: ## Update dependencies\nupdate-lock: ## Update lockfile' | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d '#' + +help-migrations: ## Show the migrations help #### + @printf "\033[33mUsage:\033[0m\n make [target]\n\n\033[33mTargets:\033[0m\n" + @printf '%b\n' 'migrations-docs-create-license-when-it-doesnt-exists: ## Create license when it doesn'\''t exists\nmigrations-docs-enforce-contributing-md-contents: ## Enforce CONTRIBUTING.md contents\nmigrations-docs-update-etc-readme-template-copyright-c-year-to-current: ## Update readme template in etc/ copyright year to current\nmigrations-docs-update-etc-readme-template-copyright-year-to-current: ## Update readme template in etc/ copyright year to current\nmigrations-docs-update-license-copyright-c-year-to-current: ## Update license copyright year to current\nmigrations-docs-update-license-copyright-year-to-current: ## Update license copyright year to current\nmigrations-docs-update-readme-copyright-c-year-to-current: ## Update readme copyright year to current\nmigrations-docs-update-readme-copyright-year-to-current: ## Update readme copyright year to current\nmigrations-git-enforce-gitattributes-contents: ## Enforce `.gitattributes` contents\nmigrations-git-make-sure-gitignore-excludes-var-gitkeep: ## Make sure `.gitignore` excludes `var/.gitkeep`\nmigrations-git-make-sure-gitignore-exists: ## Make sure `.gitignore` exists\nmigrations-git-make-sure-gitignore-ignores-var: ## Make sure `.gitignore` ignores `var/*`\nmigrations-github-actions-create-ci-if-not-exists: ## Create CI Workflow if it doesn'\''t exists at `.github/workflows/ci.yaml`\nmigrations-github-actions-create-release-management-if-not-exists: ## Create Release Management Workflow if it doesn'\''t exists at `.github/workflows/release-management.yaml`\nmigrations-github-actions-fix-management-in-release-management-referenced-workflow-file: ## Fix management in release-management referenced workflow file\nmigrations-github-actions-move-ci: ## Move `.github/workflows/ci.yml` to `.github/workflows/ci.yaml`\nmigrations-github-actions-move-release-management: ## Move `.github/workflows/release-managment.yaml` to `.github/workflows/release-management.yaml`\nmigrations-github-actions-remove-ci-if-its-old-style-php-ci-workflow: ## Remove CI Workflow if its the old style PHP CI Workflow\nmigrations-github-actions-remove-composer-diff: ## Remove `composer-diff.yaml` it has been folded into centralized workflows through `ci.yaml`\nmigrations-github-actions-remove-markdown-check-links: ## Remove `markdown-check-links.yaml` it has been folded into centralized workflows through `ci.yaml`\nmigrations-github-actions-remove-markdown-craft-release: ## Remove `craft-release.yaml` it has been folded into centralized workflows through `release-management.yaml`\nmigrations-github-actions-remove-set-milestone-on-pr: ## Remove `set-milestone-on-pr.yaml` it has been folded into centralized workflows through `release-management.yaml`\nmigrations-github-codeowners: ## Ensure a `CODEOWNERS` file is present, create only if it doesn'\''t exist yet\nmigrations-inline-code-phpstan-remove-line-phpstan-ignore-next-line: ## Remove all lines that contains @phpstan-ignore-next-line\nmigrations-inline-code-phpstan-remove-rest-of-line-phpstan-ignore-line: ## Remove rest of line for all lines that contain @phpstan-ignore-line\nmigrations-inline-code-phpunit-replace-expectexceptionmessage-with-expectexceptionmessageisorcontains: ## Replace self::expectExceptionMessage with self::expectExceptionMessageIsOrContains in all PHPUnit tests\nmigrations-inline-code-psalm-remove-line-psalm-suppress: ## Remove all lines that contain @psalm-suppress\nmigrations-inline-code-remove-line-internal: ## Remove all lines that contain @internal\nmigrations-php-add-github-true-to-for-infection: ## Ensure we configure infection to emit logs to GitHub in `etc/qa/infection.json5`\nmigrations-php-composer-require-checker-create-config-if-not-exists: ## Create Composer Require Checker config file if it doesn'\''t exists at `etc/qa/composer-require-checker.json`\nmigrations-php-composer-unused-create-config-if-not-exists: ## Create Composer Unused config file if it doesn'\''t exists at `etc/qa/composer-unused.php`\nmigrations-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\nmigrations-php-ensure-etc-ci-markdown-link-checker-json-exists: ## Make sure we have `etc/ci/markdown-link-checker.json`\nmigrations-php-fix-logs-relative-paths-for-infection: ## Fix logs paths in `etc/qa/infection.json5`\nmigrations-php-infection-create-config-if-not-exists: ## Create Infection config file if it doesn'\''t exists at `etc/qa/infection.json5`\nmigrations-php-infection-ensure-log-json-has-the-correct-path: ## Ensure infection'\''s log.json has config directive has the correct path\nmigrations-php-infection-ensure-log-per-mutator-has-the-correct-path: ## Ensure infection'\''s log.perMutator has config directive has the correct path\nmigrations-php-infection-ensure-log-summary-has-the-correct-path: ## Ensure infection'\''s log.summary has config directive has the correct path\nmigrations-php-infection-ensure-log-text-has-the-correct-path: ## Ensure infection'\''s log.text has config directive has the correct path\nmigrations-php-make-paths-compatible-with-infection-0-32: ## We update path to be relative to `etc/qa/infection.json5` as of 0.32\nmigrations-php-make-sure-etc-ci-exists: ## Make sure `etc/ci/` exists\nmigrations-php-make-sure-etc-exists: ## Make sure `etc/` exists\nmigrations-php-make-sure-etc-qa-exists: ## Make sure `etc/qa/` exists\nmigrations-php-make-sure-github-exists: ## Make sure `.github/` exists\nmigrations-php-make-sure-github-workflows-exists: ## Make sure `.github/workflows` exists\nmigrations-php-make-sure-var-exists: ## Make sure `var/` exists\nmigrations-php-make-sure-var-gitkeep-exists: ## Make sure `var/.gitkeep` exists\nmigrations-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`\nmigrations-php-move-composer-require-checker: ## Move composer-require-checker.json to `etc/qa/composer-require-checker.json`\nmigrations-php-move-infection-config-to-etc: ## Move `infection.json.dist` to `etc/qa/infection.json5`\nmigrations-php-move-phpcs: ## Move `phpcs.xml.dist` to `etc/qa/phpcs.xml`\nmigrations-php-move-phpcs-not-dist: ## Move `phpcs.xml` to `etc/qa/phpcs.xml`\nmigrations-php-move-phpstan: ## Move `phpstan.neon` to `etc/qa/phpstan.neon`\nmigrations-php-move-psalm-xml-config-to-etc: ## Move `psalm.xml` to `etc/qa/psalm.xml`\nmigrations-php-phpcs-make-basepath-is-correct-relatively: ## Make sure PHPCS base path is has `../../` and not `.`\nmigrations-php-phpcs-make-cache-is-correct-relatively: ## Make sure PHPCS cache path is has `../../var/.phpcs.cache` and not `.phpcs.cache`\nmigrations-php-phpcs-make-sure-config-has-correct-relative-path-for-etc: ## Make sure PHPCS has `../../` prefixing `etc/` to ensure correct relative path\nmigrations-php-phpcs-make-sure-config-has-correct-relative-path-for-src: ## Make sure PHPCS has `../../` prefixing `src/` to ensure correct relative path\nmigrations-php-phpcs-make-sure-config-has-correct-relative-path-for-tests: ## Make sure PHPCS has `../../` prefixing `tests/` to ensure correct relative path\nmigrations-php-phpcs-make-sure-etc-has-no-trailing-slash: ## Make sure PHPCS has no tailing `/` on `etc`\nmigrations-php-phpcs-make-sure-etc-is-ran-through: ## Make sure PHPCS runs through `etc`\nmigrations-php-phpcs-make-sure-src-has-no-trailing-slash: ## Make sure PHPCS has no tailing `/` on src\nmigrations-php-phpcs-make-sure-tests-has-no-trailing-slash: ## Make sure PHPCS has no tailing `/` on `tests`\nmigrations-php-phpstan-add-prefix-for-anything-that-starts-with-vendor-in-a-list: ## PHPStan add `../../` to anything in a list that starts with `vendor`\nmigrations-php-remove-old-appveyor-yml-config: ## Make sure we remove `appveyor.yml`\nmigrations-php-remove-old-php-cs-fiver-config: ## Make sure we remove `.php_cs`\nmigrations-php-remove-old-phpunit-xml-config: ## Make sure we remove `phpunit.xml`\nmigrations-php-remove-old-phpunit-xml-dist-config: ## Make sure we remove `phpunit.xml.dist`\nmigrations-php-remove-old-scrutinizer-yml-config: ## Make sure we remove `.scrutinizer.yml`\nmigrations-php-remove-old-travis-yml-config: ## Make sure we remove `.travis.yml`\nmigrations-php-remove-phpunit-config-dir-from-infection: ## Drop XXX from `etc/qa/infection.json5`\nmigrations-php-remove-psalm-xml-config: ## Make sure we remove `etc/qa/psalm.xml`\nmigrations-php-set-phpcs-ensure-config-file-exists: ## Make sure we have a PHPCS config file at `etc/qa/phpcs.xml`\nmigrations-php-set-phpstan-add-parameters-if-it-isnt-present-in-the-config-file: ## Add parameters to PHPStan config file at `etc/qa/phpstan.neon` if it'\''s not present\nmigrations-php-set-phpstan-drop-checkGenericClassInNonGenericObjectType: ## Ensure PHPStan config doesn'\''t contain checkGenericClassInNonGenericObjectType as it'\''s no longer a valid config option\nmigrations-php-set-phpstan-drop-include-async-test-utilities-rules: ## Ensure PHPStan config doesn'\''t contain include for `wyrihaximus/async-test-utilities/rules.neon` as it'\''s now an extension\nmigrations-php-set-phpstan-drop-include-test-utilities-rules: ## Ensure PHPStan config doesn'\''t contain include for `wyrihaximus/async-utilities/rules.neon` as it'\''s now an extension\nmigrations-php-set-phpstan-ensure-config-file-exists: ## Make sure we have a PHPStan config file at `etc/qa/phpstan.neon`\nmigrations-php-set-phpstan-level-max-in-config: ## Ensure PHPStan config has level set to max in `etc/qa/phpstan.neon`\nmigrations-php-set-phpstan-paths-in-config: ## Ensure PHPStan config has the `etc`, `src`, and (optionally) `tests` paths set in `etc/qa/phpstan.neon`\nmigrations-php-set-phpstan-resolve-ergebnis-noExtends-classesAllowedToBeExtended: ## Ensure PHPStan config uses ergebnis.noExtends.classesAllowedToBeExtended not ergebnis.classesAllowedToBeExtended\nmigrations-php-set-phpstan-uncomment-parameters: ## Ensure PHPStan config as parameters not commented out in `etc/qa/phpstan.neon`\nmigrations-php-set-phpunit-ensure-config-file-exists: ## Make sure we have a PHPUnit config file at `etc/qa/phpunit.xml`\nmigrations-php-set-phpunit-make-sure-we-see-all-the-warnings-deprecations-etc-etc-that-will-make-phpunit-do-a-non-happy-exit: ## Make sure we see all the warnings, deprecations, etc etc that will make PHPunit do a non-happy exit\nmigrations-php-set-phpunit-xsd-path-to-local: ## Ensure that the PHPUnit XDS referred in `etc/qa/phpunit.xml` points to `vendor/phpunit/phpunit/phpunit.xsd` so we don'\''t go over the network\nmigrations-php-set-rector-create-config-if-not-exists: ## Create Rector config file if it doesn'\''t exists at `etc/qa/rector.php`\nmigrations-phpcs-include-examples-directory-when-present: ## Make sure PHPCS runs through `examples` when it exists\nmigrations-renovate-create-config-if-not-exists: ## Create Renovate Config if it doesn'\''t exists at `.github/renovate.json`\nmigrations-renovate-move-config: ## Move `renovate.json` to `.github/renovate.json`\nmigrations-renovate-point-at-correct-config: ## Ensure `.github/renovate.json` points at github>WyriHaximus/renovate-config:php-package instead of local>WyriHaximus/renovate-config\nmigrations-renovate-remove-dependabot-config: ## Make sure we remove `.github/dependabot.yml`\nmigrations-renovate-set-composer-constraint: ## Always keep renovate'\''s `constraints.composer` at `2.x`\nmigrations-renovate-set-php-constraint: ## Always keep renovate'\''s constraints.php in sync with `composer.json`'\''s `config.platform.php`\nmigrations-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\nmigrations-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\nmigrations-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\nmigrations-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\nmigrations-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\nmigrations-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' | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d '#' + +help-contrib: ## Show the migrations help #### + @printf "\033[33mUsage:\033[0m\n make [target]\n\n\033[33mTargets:\033[0m\n" + @printf '%b\n' 'composer-require-checker: ## Ensure we require every package used in this package directly\ncomposer-unused: ## Ensure we don'\''t require any package we don'\''t use in this package directly\ncs: ## Check the code for code style issues\ncs-fix: ## Fix any automatically fixable code style issues\nunit-testing: ## Run tests' | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d '#' task-list-ci-all: ## CI: Generate a JSON array of jobs to run on all variations @echo "[\"composer-validate\",\"syntax-php\",\"cs\",\"stan\",\"unit-testing\",\"mutation-testing\",\"composer-require-checker\",\"composer-unused\",\"backward-compatibility-check\"]" ## Count: 9 diff --git a/composer.json b/composer.json index fab43e1..2101b86 100644 --- a/composer.json +++ b/composer.json @@ -19,8 +19,8 @@ "react/promise": "^3.3.0" }, "require-dev": { - "wyrihaximus/async-test-utilities": "^13.3.0", - "wyrihaximus/makefiles": "^0.12.3" + "wyrihaximus/async-test-utilities": "^13.4.1", + "wyrihaximus/makefiles": "^0.13.2" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index daac1b8..910af27 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": "5ff1b41ea230b509e8322fd2f14af06b", + "content-hash": "fb22378a7c6acdd14e2cf41347fb54fd", "packages": [ { "name": "evenement/evenement", @@ -2893,16 +2893,16 @@ }, { "name": "infection/infection", - "version": "0.33.3", + "version": "0.34.0", "source": { "type": "git", "url": "https://github.com/infection/infection.git", - "reference": "cc789bb58df7c649c4533ab860d98283fe270215" + "reference": "373c2ab1689696ac6969013a04bdbccae74d7e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/infection/zipball/cc789bb58df7c649c4533ab860d98283fe270215", - "reference": "cc789bb58df7c649c4533ab860d98283fe270215", + "url": "https://api.github.com/repos/infection/infection/zipball/373c2ab1689696ac6969013a04bdbccae74d7e08", + "reference": "373c2ab1689696ac6969013a04bdbccae74d7e08", "shasum": "" }, "require": { @@ -2927,7 +2927,7 @@ "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", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.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", @@ -3015,7 +3015,7 @@ ], "support": { "issues": "https://github.com/infection/infection/issues", - "source": "https://github.com/infection/infection/tree/0.33.3" + "source": "https://github.com/infection/infection/tree/0.34.0" }, "funding": [ { @@ -3027,7 +3027,7 @@ "type": "open_collective" } ], - "time": "2026-06-18T07:45:54+00:00" + "time": "2026-06-28T12:05:47+00:00" }, { "name": "infection/mutator", @@ -3560,20 +3560,19 @@ }, { "name": "nikic/php-parser", - "version": "v5.7.0", + "version": "v5.8.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-json": "*", "ext-tokenizer": "*", "php": ">=7.4" @@ -3612,9 +3611,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2026-07-04T14:30:18+00:00" }, { "name": "nikolaposa/version", @@ -4195,11 +4194,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.2.2", + "version": "2.2.5", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e5cc34d491a90e79c216d824f60fe21fd4d93bd6", - "reference": "e5cc34d491a90e79c216d824f60fe21fd4d93bd6", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0", + "reference": "909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0", "shasum": "" }, "require": { @@ -4255,7 +4254,7 @@ "type": "github" } ], - "time": "2026-06-05T09:00:01+00:00" + "time": "2026-07-05T06:31:06+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -4358,21 +4357,22 @@ }, { "name": "phpstan/phpstan-phpunit", - "version": "2.0.16", + "version": "2.0.18", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32" + "reference": "f5dc20ff8082d02339b60cab68ec3eb0d859fb30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6ab598e1bc106e6827fd346ae4a12b4a5d634c32", - "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/f5dc20ff8082d02339b60cab68ec3eb0d859fb30", + "reference": "f5dc20ff8082d02339b60cab68ec3eb0d859fb30", "shasum": "" }, "require": { + "phar-io/version": "^3.2", "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.1.32" + "phpstan/phpstan": "^2.2.3" }, "conflict": { "phpunit/phpunit": "<7.0" @@ -4382,7 +4382,8 @@ "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/phpstan-deprecation-rules": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^9.6", + "shipmonk/name-collision-detector": "^2.1" }, "type": "phpstan-extension", "extra": { @@ -4408,9 +4409,9 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.16" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.18" }, - "time": "2026-02-14T09:05:21+00:00" + "time": "2026-07-04T12:16:09+00:00" }, { "name": "phpstan/phpstan-strict-rules", @@ -4465,16 +4466,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "14.2.2", + "version": "14.2.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "10d7da3628a99289cdf4c662dd7f0d73f1baec83" + "reference": "82f6e49ff224e2cde923d74425e583a883910783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/10d7da3628a99289cdf4c662dd7f0d73f1baec83", - "reference": "10d7da3628a99289cdf4c662dd7f0d73f1baec83", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/82f6e49ff224e2cde923d74425e583a883910783", + "reference": "82f6e49ff224e2cde923d74425e583a883910783", "shasum": "" }, "require": { @@ -4482,7 +4483,7 @@ "ext-libxml": "*", "ext-mbstring": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.7.0", + "nikic/php-parser": "^5.8.0", "php": ">=8.4", "phpunit/php-text-template": "^6.0", "sebastian/complexity": "^6.0", @@ -4493,7 +4494,7 @@ "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^13.2.0" + "phpunit/phpunit": "^13.2.2" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -4531,7 +4532,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.2.2" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.2.3" }, "funding": [ { @@ -4551,7 +4552,7 @@ "type": "tidelift" } ], - "time": "2026-06-08T11:50:38+00:00" + "time": "2026-07-06T15:04:02+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4848,39 +4849,40 @@ }, { "name": "phpunit/phpunit", - "version": "13.1.14", + "version": "13.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "cdd419c33c040c6b570e51dba8ecbe81d399da53" + "reference": "8f5180f4627fc1978be2f61d8d9979dbe37e0c10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/cdd419c33c040c6b570e51dba8ecbe81d399da53", - "reference": "cdd419c33c040c6b570e51dba8ecbe81d399da53", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8f5180f4627fc1978be2f61d8d9979dbe37e0c10", + "reference": "8f5180f4627fc1978be2f61d8d9979dbe37e0c10", "shasum": "" }, "require": { "ext-dom": "*", + "ext-filter": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", - "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.4.1", - "phpunit/php-code-coverage": "^14.1.10", + "phpunit/php-code-coverage": "^14.2.3", "phpunit/php-file-iterator": "^7.0.0", "phpunit/php-invoker": "^7.0.0", "phpunit/php-text-template": "^6.0.0", "phpunit/php-timer": "^9.0.0", "sebastian/cli-parser": "^5.0.0", - "sebastian/comparator": "^8.2.1", - "sebastian/diff": "^8.3.0", + "sebastian/comparator": "^8.3.0", + "sebastian/diff": "^9.0", "sebastian/environment": "^9.3.2", "sebastian/exporter": "^8.1.0", + "sebastian/file-filter": "^1.0", "sebastian/git-state": "^1.0", "sebastian/global-state": "^9.0.1", "sebastian/object-enumerator": "^8.0.0", @@ -4895,7 +4897,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "13.1-dev" + "dev-main": "13.2-dev" } }, "autoload": { @@ -4927,7 +4929,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/13.1.14" + "source": "https://github.com/sebastianbergmann/phpunit/tree/13.2.4" }, "funding": [ { @@ -4935,7 +4937,7 @@ "type": "other" } ], - "time": "2026-06-04T06:16:42+00:00" + "time": "2026-07-08T08:36:51+00:00" }, { "name": "psr/clock", @@ -5165,16 +5167,16 @@ }, { "name": "rector/rector", - "version": "2.5.2", + "version": "2.5.7", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "49ff6339174bdbdf50b0b35ecbcff14a05ac9e24" + "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/49ff6339174bdbdf50b0b35ecbcff14a05ac9e24", - "reference": "49ff6339174bdbdf50b0b35ecbcff14a05ac9e24", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/ba22f8c087848278fed6b4910d4cf1108096d8d3", + "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3", "shasum": "" }, "require": { @@ -5213,7 +5215,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.5.2" + "source": "https://github.com/rectorphp/rector/tree/2.5.7" }, "funding": [ { @@ -5221,7 +5223,7 @@ "type": "github" } ], - "time": "2026-06-22T11:39:33+00:00" + "time": "2026-07-13T15:24:18+00:00" }, { "name": "revolt/event-loop", @@ -5783,27 +5785,27 @@ }, { "name": "sebastian/comparator", - "version": "8.2.1", + "version": "8.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "ce999bf08b2c387a5423fe56961c32eed3f88089" + "reference": "c025fc7604afab3f195fab7cdaf72327331af241" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ce999bf08b2c387a5423fe56961c32eed3f88089", - "reference": "ce999bf08b2c387a5423fe56961c32eed3f88089", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c025fc7604afab3f195fab7cdaf72327331af241", + "reference": "c025fc7604afab3f195fab7cdaf72327331af241", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", "php": ">=8.4", - "sebastian/diff": "^8.3", - "sebastian/exporter": "^8.0.3" + "sebastian/diff": "^9.0", + "sebastian/exporter": "^8.1.0" }, "require-dev": { - "phpunit/phpunit": "^13.1.10" + "phpunit/phpunit": "^13.2" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -5811,7 +5813,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "8.2-dev" + "dev-main": "8.3-dev" } }, "autoload": { @@ -5851,7 +5853,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/8.2.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.3.0" }, "funding": [ { @@ -5871,7 +5873,7 @@ "type": "tidelift" } ], - "time": "2026-05-21T04:46:40+00:00" + "time": "2026-06-05T03:06:45+00:00" }, { "name": "sebastian/complexity", @@ -5945,29 +5947,29 @@ }, { "name": "sebastian/diff", - "version": "8.3.0", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47" + "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b36d33b6e796513de7cb7df053afb3f55eefcd47", - "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a3fb6a298a265ff487a91bbea46e03cd01dbb226", + "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0", - "symfony/process": "^7.2" + "phpunit/phpunit": "^13.2", + "symfony/process": "^7.4.13" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.3-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -6000,7 +6002,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/8.3.0" + "source": "https://github.com/sebastianbergmann/diff/tree/9.0.0" }, "funding": [ { @@ -6020,7 +6022,7 @@ "type": "tidelift" } ], - "time": "2026-05-15T04:58:09+00:00" + "time": "2026-06-05T03:04:51+00:00" }, { "name": "sebastian/environment", @@ -6188,6 +6190,75 @@ ], "time": "2026-05-21T11:50:56+00:00" }, + { + "name": "sebastian/file-filter", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/file-filter.git", + "reference": "33a26f394330f6faa7684bb9cc73afb7727aae93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/file-filter/zipball/33a26f394330f6faa7684bb9cc73afb7727aae93", + "reference": "33a26f394330f6faa7684bb9cc73afb7727aae93", + "shasum": "" + }, + "require": { + "php": ">=8.4" + }, + "require-dev": { + "phpunit/phpunit": "^13.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for filtering files", + "homepage": "https://github.com/sebastianbergmann/file-filter", + "support": { + "issues": "https://github.com/sebastianbergmann/file-filter/issues", + "security": "https://github.com/sebastianbergmann/file-filter/security/policy", + "source": "https://github.com/sebastianbergmann/file-filter/tree/1.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/file-filter", + "type": "tidelift" + } + ], + "time": "2026-04-22T07:20:04+00:00" + }, { "name": "sebastian/git-state", "version": "1.0.0", @@ -6925,16 +6996,16 @@ }, { "name": "shipmonk/dead-code-detector", - "version": "1.2.1", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/shipmonk-rnd/dead-code-detector.git", - "reference": "b2f49bbcf6246c2058b2b7c6770bc6db06def5b2" + "reference": "2c376b3cbcb20422c3d46bb67cdb85b68b3137f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shipmonk-rnd/dead-code-detector/zipball/b2f49bbcf6246c2058b2b7c6770bc6db06def5b2", - "reference": "b2f49bbcf6246c2058b2b7c6770bc6db06def5b2", + "url": "https://api.github.com/repos/shipmonk-rnd/dead-code-detector/zipball/2c376b3cbcb20422c3d46bb67cdb85b68b3137f0", + "reference": "2c376b3cbcb20422c3d46bb67cdb85b68b3137f0", "shasum": "" }, "require": { @@ -6955,13 +7026,14 @@ "nette/tester": "^2.4", "nette/utils": "^3.0 || ^4.0", "nikic/php-parser": "^5.4.0", + "phpat/phpat": "^0.12", "phpbench/phpbench": "^1.2", "phpstan/phpstan-phpunit": "^2.0.16", "phpstan/phpstan-strict-rules": "^2.0.10", "phpstan/phpstan-symfony": "^2.0.15", "phpunit/phpcov": "^9.0.2", "phpunit/phpunit": "^10.5.46", - "shipmonk/coding-standard": "^0.2.2", + "shipmonk/coding-standard": "^0.3.0", "shipmonk/composer-dependency-analyser": "^1.8.4", "shipmonk/coverage-guard": "^1.0.2", "shipmonk/name-collision-detector": "^2.1.1", @@ -7007,9 +7079,9 @@ ], "support": { "issues": "https://github.com/shipmonk-rnd/dead-code-detector/issues", - "source": "https://github.com/shipmonk-rnd/dead-code-detector/tree/1.2.1" + "source": "https://github.com/shipmonk-rnd/dead-code-detector/tree/1.3.2" }, - "time": "2026-06-12T07:26:41+00:00" + "time": "2026-07-15T12:28:33+00:00" }, { "name": "shipmonk/phpstan-rules", @@ -9737,34 +9809,34 @@ }, { "name": "wyrihaximus/async-test-utilities", - "version": "13.3.0", + "version": "13.4.1", "source": { "type": "git", "url": "https://github.com/WyriHaximus/php-async-test-utilities.git", - "reference": "4c9f02bf271bc6ff615a6a1b85f2839f811b2274" + "reference": "a0aa6b33a2ef02373937872f34b6175cab745bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/4c9f02bf271bc6ff615a6a1b85f2839f811b2274", - "reference": "4c9f02bf271bc6ff615a6a1b85f2839f811b2274", + "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/a0aa6b33a2ef02373937872f34b6175cab745bf8", + "reference": "a0aa6b33a2ef02373937872f34b6175cab745bf8", "shasum": "" }, "require": { "php": "^8.4", - "phpunit/phpunit": "^13.1.14", + "phpunit/phpunit": "^13.2.4", "react/async": "^4.3.0", "react/event-loop": "^1.6.0", "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.3.0" + "wyrihaximus/test-utilities": "^13.4.0" }, "conflict": { "composer/compoer": "<2.6.0" }, "require-dev": { "react/promise-timer": "^1.11.0", - "wyrihaximus/makefiles": "^0.12.1" + "wyrihaximus/makefiles": "^0.13.1" }, "type": "library", "extra": { @@ -9792,7 +9864,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.3.0" + "source": "https://github.com/WyriHaximus/php-async-test-utilities/tree/13.4.1" }, "funding": [ { @@ -9800,7 +9872,7 @@ "type": "github" } ], - "time": "2026-06-27T22:10:23+00:00" + "time": "2026-07-18T21:49:09+00:00" }, { "name": "wyrihaximus/coding-standard", @@ -9856,16 +9928,16 @@ }, { "name": "wyrihaximus/makefiles", - "version": "0.12.3", + "version": "0.13.2", "source": { "type": "git", "url": "https://github.com/WyriHaximus/Makefiles.git", - "reference": "cbb98ce358e8886a3c5d982b01fc478677ba8ef2" + "reference": "d5fd4c780f685cf5a1290bcb32ac79abea4dfafb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WyriHaximus/Makefiles/zipball/cbb98ce358e8886a3c5d982b01fc478677ba8ef2", - "reference": "cbb98ce358e8886a3c5d982b01fc478677ba8ef2", + "url": "https://api.github.com/repos/WyriHaximus/Makefiles/zipball/d5fd4c780f685cf5a1290bcb32ac79abea4dfafb", + "reference": "d5fd4c780f685cf5a1290bcb32ac79abea4dfafb", "shasum": "" }, "require": { @@ -9877,7 +9949,7 @@ "infection/infection": "<0.32.0" }, "require-dev": { - "wyrihaximus/test-utilities": "^13.3.0" + "wyrihaximus/test-utilities": "^13.4.0" }, "type": "composer-plugin", "extra": { @@ -9906,7 +9978,7 @@ "description": "🧱 Makefile building blocks", "support": { "issues": "https://github.com/WyriHaximus/Makefiles/issues", - "source": "https://github.com/WyriHaximus/Makefiles/tree/0.12.3" + "source": "https://github.com/WyriHaximus/Makefiles/tree/0.13.2" }, "funding": [ { @@ -9914,7 +9986,7 @@ "type": "github" } ], - "time": "2026-07-02T10:01:48+00:00" + "time": "2026-07-20T06:36:04+00:00" }, { "name": "wyrihaximus/phpstan-no-safe", @@ -10026,28 +10098,28 @@ }, { "name": "wyrihaximus/phpstan-rules-wrapper", - "version": "14.0.0", + "version": "14.1.0", "source": { "type": "git", "url": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper.git", - "reference": "a06a7d45b26704dc422db617e696267441e9d69b" + "reference": "f21ed4362dd584589f78c2cd4550f64e8ae8b375" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/a06a7d45b26704dc422db617e696267441e9d69b", - "reference": "a06a7d45b26704dc422db617e696267441e9d69b", + "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/f21ed4362dd584589f78c2cd4550f64e8ae8b375", + "reference": "f21ed4362dd584589f78c2cd4550f64e8ae8b375", "shasum": "" }, "require": { "ergebnis/phpstan-rules": "^2.13.1", "php": "^8.4", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.2.2", + "phpstan/phpstan": "^2.2.5", "phpstan/phpstan-deprecation-rules": "^2.0.4", "phpstan/phpstan-mockery": "^2.0.0", - "phpstan/phpstan-phpunit": "^2.0.16", + "phpstan/phpstan-phpunit": "^2.0.18", "phpstan/phpstan-strict-rules": "^2.0.11", - "shipmonk/dead-code-detector": "^1.2.1", + "shipmonk/dead-code-detector": "^1.3.2", "shipmonk/phpstan-rules": "^4.4.0", "staabm/phpstan-psr3": "^1.0.3", "symplify/phpstan-extensions": "^12.0.2", @@ -10076,7 +10148,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/14.0.0" + "source": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/tree/14.1.0" }, "funding": [ { @@ -10084,7 +10156,7 @@ "type": "github" } ], - "time": "2026-06-19T23:25:20+00:00" + "time": "2026-07-18T17:17:54+00:00" }, { "name": "wyrihaximus/react-phpunit-run-tests-in-fiber", @@ -10145,16 +10217,16 @@ }, { "name": "wyrihaximus/test-utilities", - "version": "13.3.0", + "version": "13.4.0", "source": { "type": "git", "url": "https://github.com/WyriHaximus/php-test-utilities.git", - "reference": "ed71de5364fbf676c30110ee1c9e7e26e24aee03" + "reference": "436d85d15fd94645acc3a33ef85024c86df92227" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/ed71de5364fbf676c30110ee1c9e7e26e24aee03", - "reference": "ed71de5364fbf676c30110ee1c9e7e26e24aee03", + "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/436d85d15fd94645acc3a33ef85024c86df92227", + "reference": "436d85d15fd94645acc3a33ef85024c86df92227", "shasum": "" }, "require": { @@ -10164,27 +10236,29 @@ "ext-hash": "^8.4", "ext-json": "^8.4", "icanhazstring/composer-unused": "^0.9.6", - "infection/infection": "^0.33.3", + "infection/infection": "^0.34.0", "maglnet/composer-require-checker": "^4.20.0", "mockery/mockery": "^1.6.12", "php": "^8.4", "php-parallel-lint/php-console-highlighter": "^1.0.0", "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpstan/phpstan": "^2.2.2", - "phpunit/phpunit": "^13.1.13", - "rector/rector": "^2.5.2", + "phpstan/phpstan": "^2.2.5", + "phpunit/phpunit": "^13.2.4", + "rector/rector": "^2.5.7", "roave/backward-compatibility-check": "^8.19.0", "squizlabs/php_codesniffer": "^4.0.1", "wyrihaximus/coding-standard": "^4.2.0", - "wyrihaximus/phpstan-rules-wrapper": "^14.0.0" + "wyrihaximus/phpstan-rules-wrapper": "^14.1.0" }, "conflict": { "composer-unused/symbol-parser": "<0.3.3", "composer/pcre": "<3.3.2", + "sanmai/di-container": "<0.1.17", + "sanmai/pipeline": "<7.9", "wyrihaximus/makefiles": "<0.5.0" }, "require-dev": { - "wyrihaximus/makefiles": "^0.12.1" + "wyrihaximus/makefiles": "^0.13.1" }, "suggest": { "wyrihaximus/async-test-utilities": "The recommended addition to this package when building ReactPHP packages and projects.", @@ -10217,7 +10291,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.3.0" + "source": "https://github.com/WyriHaximus/php-test-utilities/tree/13.4.0" }, "funding": [ { @@ -10225,7 +10299,7 @@ "type": "github" } ], - "time": "2026-06-27T20:14:37+00:00" + "time": "2026-07-18T17:45:57+00:00" }, { "name": "yamadashy/phpstan-friendly-formatter", diff --git a/tests/SessionMiddlewareTest.php b/tests/SessionMiddlewareTest.php index ebd2944..34bcae3 100644 --- a/tests/SessionMiddlewareTest.php +++ b/tests/SessionMiddlewareTest.php @@ -453,7 +453,7 @@ public function aSessionIdIsAlwaysCheckedForInTheCache(): void public function anErrorFromTheCacheShouldBubbleUp(): void { self::expectException(Throwable::class); - self::expectExceptionMessage('Error on the cache layer'); + self::expectExceptionMessageIsOrContains('Error on the cache layer'); $cache = Mockery::mock(CacheInterface::class); $cache->shouldReceive('get')->with('cookies')->once()->andReturn(reject(new Exception('Error on the cache layer')));