@@ -3,43 +3,68 @@ SHELL=bash
3
3
4
4
.PHONY : *
5
5
6
+ DOCKER_CGROUP: =$(shell cat /proc/1/cgroup | grep docker | wc -l)
7
+ COMPOSER_CACHE_DIR: =$(shell composer config --global cache-dir -q || echo ${HOME}/.composer/cache)
8
+
6
9
ifneq ("$(wildcard /.dockerenv) ","")
7
- DOCKER_RUN =
10
+ IN_DOCKER: =TRUE
11
+ else ifneq ("$(DOCKER_CGROUP)","0")
12
+ IN_DOCKER:=TRUE
8
13
else
9
- DOCKER_RUN=docker run --rm -it \
10
- -v `pwd`:`pwd` \
11
- -w `pwd` \
12
- "wyrihaximusnet/php:7.4-zts-alpine3.11-dev"
14
+ IN_DOCKER: =FALSE
13
15
endif
14
16
15
- all : lint cs-fix cs stan psalm unit infection composer-require-checker composer-unused
17
+ ifeq ("$(IN_DOCKER ) ","TRUE")
18
+ DOCKER_RUN:=
19
+ else
20
+ PHP_VERSION:=$(shell docker run --rm -v "`pwd`:`pwd`" jess/jq jq -r -c '.config.platform.php' "`pwd`/composer.json" | php -r "echo str_replace('|', '.', explode('.', implode('|', explode('.', stream_get_contents(STDIN), 2)), 2)[0]);")
21
+ DOCKER_RUN:=docker run --rm -it \
22
+ -v "`pwd`:`pwd`" \
23
+ -v "${COMPOSER_CACHE_DIR}:/home/app/.composer/cache" \
24
+ -w "`pwd`" \
25
+ "ghcr.io/wyrihaximusnet/php:${PHP_VERSION}-zts-alpine3.12-dev"
26
+ endif
16
27
17
- lint :
18
- $( DOCKER_RUN ) vendor/bin/parallel-lint --exclude vendor .
28
+ all : # # Runs everything ###
29
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$ ' $( MAKEFILE_LIST ) | grep -v " ### " | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1} ' | xargs --open-tty $( MAKE )
19
30
20
- cs :
21
- $(DOCKER_RUN ) vendor/bin/phpcs --parallel= $( nproc )
31
+ syntax-php : # # Lint PHP syntax
32
+ $(DOCKER_RUN ) vendor/bin/parallel-lint --exclude vendor .
22
33
23
- cs-fix :
24
- $(DOCKER_RUN ) vendor/bin/phpcbf --parallel=$(nproc )
34
+ cs-fix : # # Fix any automatically fixable code style issues
35
+ $(DOCKER_RUN ) vendor/bin/phpcbf --parallel=$(shell nproc) --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml || $( DOCKER_RUN ) vendor/bin/phpcbf --parallel= $( shell nproc) --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml || $( DOCKER_RUN ) vendor/bin/phpcbf --parallel= $( shell nproc) --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml -vvvv
25
36
26
- stan :
27
- $(DOCKER_RUN ) vendor/bin/phpstan analyse src tests --level max --ansi -c phpstan.neon
37
+ cs : # # Check the code for code style issues
38
+ $(DOCKER_RUN ) vendor/bin/phpcs --parallel= $( shell nproc) --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml
28
39
29
- psalm :
30
- $(DOCKER_RUN ) vendor/bin/psalm --threads= $( nproc ) --shepherd --stats
40
+ stan : # # Run static analysis (PHPStan)
41
+ $(DOCKER_RUN ) vendor/bin/phpstan analyse src tests --level max --ansi -c ./etc/qa/phpstan.neon
31
42
32
- unit :
33
- $(DOCKER_RUN ) vendor/bin/phpunit --colors=always -c phpunit.xml.dist --coverage-text --coverage-html covHtml --coverage-clover ./build/logs/clover .xml
43
+ psalm : # # Run static analysis (Psalm)
44
+ $(DOCKER_RUN ) vendor/bin/psalm --threads= $( shell nproc) --shepherd --stats --config=./psalm .xml
34
45
35
- unit-ci : unit
36
- if [ -f ./build/logs/clover.xml ]; then sleep 3; fi
46
+ unit-testing : # # Run tests
47
+ $(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
48
+ $(DOCKER_RUN ) test -n " $( COVERALLS_REPO_TOKEN) " && test -n " $( COVERALLS_RUN_LOCALLY) " && test -f ./var/tests-unit-clover-coverage.xml && vendor/bin/php-coveralls -v --coverage_clover ./build/logs/clover.xml --json_path ./var/tests-unit-clover-coverage-upload.json || true
37
49
38
- infection :
39
- $(DOCKER_RUN ) vendor/bin/infection --ansi --min-msi=100 --min-covered-msi=100 --threads=$(nproc )
50
+ mutation-testing : # # Run mutation testing
51
+ $(DOCKER_RUN ) vendor/bin/roave- infection-static-analysis-plugin --ansi --min-msi=100 --min-covered-msi=100 --threads=$(shell nproc) --ignore-msi-with-no-mutations
40
52
41
- composer-require-checker :
42
- $(DOCKER_RUN ) vendor/bin/composer-require-checker --ignore-parse-errors --ansi -vvv --config-file=composer-require-checker.json
53
+ composer-require-checker : # # Ensure we require every package used in this package directly
54
+ $(DOCKER_RUN ) vendor/bin/composer-require-checker --ignore-parse-errors --ansi -vvv --config-file=./etc/qa/ composer-require-checker.json
43
55
44
- composer-unused :
56
+ composer-unused : # # Ensure we don't require any package we don't use in this package directly
45
57
$(DOCKER_RUN ) composer unused --ansi
58
+
59
+ backward-compatibility-check : # # Check code for backwards incompatible changes
60
+ $(DOCKER_RUN ) vendor/bin/roave-backward-compatibility-check || true
61
+
62
+ shell : # # Provides Shell access in the expected environment ###
63
+ $(DOCKER_RUN ) ash
64
+
65
+ task-list-ci : # # CI: Generate a JSON array of jobs to run, matches the commands run when running `make (|all)` ###
66
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | grep -v " ###" | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c ' split("\n")| .[0:-1]'
67
+
68
+ help : # # Show this help ###
69
+ @printf " \033[33mUsage:\033[0m\n make [target]\n\n\033[33mTargets:\033[0m\n"
70
+ @grep -E ' ^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | sort | awk ' BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d ' #'
0 commit comments