43
43
endif
44
44
45
45
all : # # Runs everything ####
46
- @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -v " ##*I*##" | grep -v " ####" | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | xargs -o $(MAKE )
46
+ $(DOCKER_RUN ) make all-raw
47
+ all-raw : # # The real runs everything, but due to sponge it has to be ran inside DOCKER_RUN ##U##
48
+ (( command - v sponge >/ dev/ null 2 >& 1 ) && (sh - c '$(shell printf "% s % s" $(MAKE) $(shell cat $(MAKEFILE_LIST) | grep - E '^[a- zA- Z0 - 9 _- ]+: .*? ## .* $$ ' | grep - v "##* I* ##" | grep - v "####" | grep - v "##U##" | awk 'BEGIN {FS = ": .*? ## "}; {printf "% s\n", $$ 1 }' | sponge | tr '\r\n' '_') | tr '_' ' ')') || (grep - E '^[a- zA- Z0 - 9 _- ]+: .*? ## .* $$ ' $(MAKEFILE_LIST) | grep - v "##* I* ##" | grep - v "####" | grep - v "##U##" | awk 'BEGIN {FS = ": .*? ## "}; {printf "% s\n", $$ 1 }' | xargs - o $(MAKE)) )
47
49
48
50
on-install-or-update : # # Runs everything ####
49
- @ grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $( MAKEFILE_LIST ) | grep -E " ##\*(I|ILH)\*##" | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | xargs -o $(MAKE )
51
+ (( command - v sponge >/ dev / null 2 >& 1 ) && (sh - c '$(shell printf " % s % s" $(MAKE) $(shell cat $(MAKEFILE_LIST) | grep - E '^[a- zA- Z0 - 9 _- ]+: .*? ## .* $$ ' | grep - E "##\ * (I | ILH)\ * ##" | awk 'BEGIN {FS = " : . *? ## "}; {printf " % s\n" , $$ 1 }' | sponge | tr '\r\n' '_') | tr '_' ' ')') || (grep - E '^[a - zA - Z 0 - 9 _ - ] +: . *? ## . * $$ ' $( MAKEFILE_LIST) | grep - E "##\* (I| ILH)\* ##" | awk 'BEGIN {FS = ": .*? ## "}; {printf "% s\n", $$ 1 }' | xargs - o $(MAKE)) )
50
52
51
53
syntax-php : # # Lint PHP syntax ##*ILH*##
52
54
$(DOCKER_RUN ) vendor/bin/parallel-lint --exclude vendor .
53
55
54
56
composer-normalize : # ## Normalize composer.json ##*I*##
55
57
$(DOCKER_RUN ) composer normalize
56
- $(DOCKER_RUN ) composer update --lock --no-scripts
58
+ $(DOCKER_RUN ) COMPOSER_DISABLE_NETWORK=1 composer update --lock --no-scripts
57
59
58
60
rector-upgrade : # # Upgrade any automatically upgradable old code ##*I*##
59
61
$(DOCKER_RUN ) vendor/bin/rector -c ./etc/qa/rector.php
@@ -65,7 +67,7 @@ cs: ## Check the code for code style issues ##*LCH*##
65
67
$(DOCKER_RUN ) vendor/bin/phpcs --parallel=1 --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml
66
68
67
69
stan : # # Run static analysis (PHPStan) ##*LCH*##
68
- $(DOCKER_RUN ) vendor/bin/phpstan analyse etc src tests --level max -- ansi -c ./etc/qa/phpstan.neon
70
+ $(DOCKER_RUN ) vendor/bin/phpstan analyse -- ansi --configuration= ./etc/qa/phpstan.neon
69
71
70
72
unit-testing : # # Run tests ##*A*##
71
73
$(DOCKER_RUN ) vendor/bin/phpunit --colors=always -c ./etc/qa/phpunit.xml --coverage-text --coverage-html ./var/tests-unit-coverage-html --coverage-clover ./var/tests-unit-clover-coverage.xml
@@ -74,10 +76,10 @@ unit-testing-raw: ## Run tests ##*D*## ####
74
76
php vendor/phpunit/phpunit/phpunit --colors=always -c ./etc/qa/phpunit.xml --coverage-text --coverage-html ./var/tests-unit-coverage-html --coverage-clover ./var/tests-unit-clover-coverage.xml
75
77
76
78
mutation-testing : # # Run mutation testing ##*LCH*##
77
- $(DOCKER_RUN ) vendor/bin/infection --ansi --log-verbosity=all --ignore-msi-with-no-mutations --configuration=./etc/qa/infection.json5 --threads=$(THREADS ) || (cat ./var/infection.log && false)
79
+ $(DOCKER_RUN ) 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 ) || (cat ./var/infection.log && false)
78
80
79
81
mutation-testing-raw : # # Run mutation testing ####
80
- vendor/bin/infection --ansi --log-verbosity=all --ignore-msi-with-no-mutations --configuration=./etc/qa/infection.json5 --threads=$(THREADS ) || (cat ./var/infection.log && false)
82
+ 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 ) || (cat ./var/infection.log && false)
81
83
82
84
composer-require-checker : # # Ensure we require every package used in this package directly ##*C*##
83
85
$(DOCKER_RUN ) vendor/bin/composer-require-checker --ignore-parse-errors --ansi -vvv --config-file=./etc/qa/composer-require-checker.json
@@ -106,31 +108,61 @@ shell: ## Provides Shell access in the expected environment ####
106
108
107
109
help : # # Show this help ####
108
110
@printf " \033[33mUsage:\033[0m\n make [target]\n\n\033[33mTargets:\033[0m\n"
109
- @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | sort | awk ' BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d ' #'
111
+ @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 ' #'
110
112
111
113
task-list-ci-all : # # CI: Generate a JSON array of jobs to run on all variations
112
- @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*A\*##" | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
114
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*A\*##" | grep -v " ##U## " | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
113
115
114
116
task-list-ci-dos : # # CI: Generate a JSON array of jobs to run Directly on the OS variations
115
- @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*D\*##" | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
117
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*D\*##" | grep -v " ##U## " | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
116
118
117
119
task-list-ci-low : # # CI: Generate a JSON array of jobs to run against the lowest dependencies on the primary threading target
118
- @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*(L|LC|LCH|LH)\*##" | grep -v " ###" | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
120
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*(L|LC|LCH|LH)\*##" | grep -v " ###" | grep -v " ##U## " | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
119
121
120
122
task-list-ci-locked : # # CI: Generate a JSON array of jobs to run against the locked dependencies on the primary threading target
121
- @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*(C|LC|LCH|CH)\*##" | grep -v " ###" | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
123
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*(C|LC|LCH|CH)\*##" | grep -v " ###" | grep -v " ##U## " | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
122
124
123
125
task-list-ci-high : # # CI: Generate a JSON array of jobs to run against the highest dependencies on the primary threading target
124
- @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*(H|LH|LCH|LC)\*##" | grep -v " ###" | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
126
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -E " ##\*(H|LH|LCH|LC)\*##" | grep -v " ###" | grep -v " ##U## " | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
125
127
126
128
127
129
# # Temporary set of migrations to get all my repos in shape
128
- php-migrations-move-infection : # ### Move infection.json.dist to etc/qa/infection.json5 ##*I*##
130
+ migrations-php-remove-psalm-xml-config : # ### Make sure we remove etc/qa/psalm.xml ##*I*##
131
+ ($( DOCKER_RUN) rm etc/qa/psalm.xml || true)
132
+
133
+ migrations-php-move-infection : # ### Move infection.json.dist to etc/qa/infection.json5 ##*I*##
129
134
($( DOCKER_RUN) mv infection.json.dist etc/qa/infection.json5 || true)
130
135
131
- php- migrations-remove-phpunit-config-dir-from-infection : # ### Drop XXX from etc/qa/infection.json5 ##*I*##
136
+ migrations-php -remove-phpunit-config-dir-from-infection : # ### Drop XXX from etc/qa/infection.json5 ##*I*##
132
137
($( 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)
133
138
134
- php- migrations-fix-logs-relative-paths-for-infection : # ### Fix logs paths in etc/qa/infection.json5 ##*I*##
139
+ migrations-php -fix-logs-relative-paths-for-infection : # ### Fix logs paths in etc/qa/infection.json5 ##*I*##
135
140
($( 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)
136
141
142
+ migrations-php-add-github-true-to-for-infection : # ### Ensure we configure infection to emit logs to GitHub in etc/qa/infection.json5 ##*I*##
143
+ ($( 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)
144
+
145
+ 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*##
146
+ ($( 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)
147
+
148
+ migrations-php-set-phpstan-paths-in-config : # ### Ensure PHPStan config has the etc, src, and tests paths set in etc/qa/phpstan.neon ##*I*##
149
+ ($( DOCKER_RUN) php -r ' $$phpStanConfigFIle = "etc/qa/phpstan.neon"; $$pathsString = "\n\tpaths:\n\t\t- ../../etc\n\t\t- ../../src\n\t\t- ../../tests"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (strpos($$neon, $$pathsString) !== false) {exit;} $$neon = str_replace("parameters:", "parameters:" . $$pathsString, $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
150
+
151
+ migrations-php-set-phpstan-level-max-in-config : # ### Ensure PHPStan config has level set to max in etc/qa/phpstan.neon ##*I*##
152
+ ($( 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)
153
+
154
+ migrations-github-codeowners : # ### Ensure a CODEOWNERS file is present, create only if it doesn't exist yet ##*I*##
155
+ ($( DOCKER_RUN) php -r ' $$codeOwnersFile = ".github/CODEOWNERS"; if (file_exists($$codeOwnersFile)) {exit;} file_put_contents($$codeOwnersFile, "* @WyriHaximus" . PHP_EOL);' || true)
156
+
157
+ migrations-github-actions-move-release-management : # ### Move .github/workflows/release-managment.yaml to .github/workflows/release-management.yaml ##*I*##
158
+ ($( DOCKER_RUN) mv .github/workflows/release-managment.yaml .github/workflows/release-management.yaml || true)
159
+
160
+ migrations-github-actions-fix-management-in-release-management-referenced-workflow-file : # ### Fix management in release-management referenced workflow file ##*I*##
161
+ ($( DOCKER_RUN) sed -i -e ' s/release-managment.yaml/release-management.yaml/g' .github/workflows/release-management.yaml || true)
162
+
163
+ migrations-renovate-move-config : # ### Move renovate.json to .github/renovate.json ##*I*##
164
+ ($( DOCKER_RUN) mv renovate.json .github/renovate.json || true)
165
+
166
+ 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*##
167
+ ($( 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)
168
+
0 commit comments