122 lines
3.1 KiB
Makefile
122 lines
3.1 KiB
Makefile
# See https://tech.davis-hansson.com/p/make/
|
|
MAKEFLAGS += --warn-undefined-variables
|
|
MAKEFLAGS += --no-builtin-rules
|
|
|
|
# General variables
|
|
TOUCH = bash .makefile/touch.sh
|
|
|
|
# PHP variables
|
|
COMPOSER=composer
|
|
COVERAGE_DIR = dist/coverage
|
|
INFECTION_BIN = tools/infection
|
|
INFECTION = php -d zend.enable_gc=0 $(INFECTION_BIN) --skip-initial-tests --coverage=$(COVERAGE_DIR) --only-covered --threads=4 --min-msi=100 --min-covered-msi=100 --ansi
|
|
PHPUNIT_BIN = vendor/bin/phpunit
|
|
PHPUNIT = php -d zend.enable_gc=0 $(PHPUNIT_BIN)
|
|
PHPUNIT_COVERAGE = XDEBUG_MODE=coverage $(PHPUNIT) --group default --coverage-xml=$(COVERAGE_DIR)/coverage-xml --log-junit=$(COVERAGE_DIR)/phpunit.junit.xml
|
|
PHPSTAN_BIN = vendor/bin/phpstan
|
|
PHPSTAN = $(PHPSTAN_BIN) analyse --level=5 src tests
|
|
PHP_CS_FIXER_BIN = tools/php-cs-fixer
|
|
PHP_CS_FIXER = $(PHP_CS_FIXER_BIN) fix --ansi --verbose --config=.php-cs-fixer.php
|
|
COMPOSER_NORMALIZE_BIN=tools/composer-normalize
|
|
COMPOSER_NORMALIZE = ./$(COMPOSER_NORMALIZE_BIN)
|
|
|
|
|
|
.DEFAULT_GOAL := default
|
|
|
|
|
|
#
|
|
# Command
|
|
#---------------------------------------------------------------------------
|
|
|
|
.PHONY: help
|
|
help: ## Shows the help
|
|
help:
|
|
@printf "\033[33mUsage:\033[0m\n make TARGET\n\n\033[32m#\n# Commands\n#---------------------------------------------------------------------------\033[0m\n"
|
|
@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##//' | awk 'BEGIN {FS = ":"}; {printf "\033[33m%s:\033[0m%s\n", $$1, $$2}'
|
|
|
|
|
|
.PHONY: default
|
|
default: ## Runs the default task: CS fix and all the tests
|
|
default: cs test
|
|
|
|
|
|
.PHONY: cs
|
|
cs: ## Runs PHP-CS-Fixer
|
|
cs: $(PHP_CS_FIXER_BIN) $(COMPOSER_NORMALIZE_BIN)
|
|
$(PHP_CS_FIXER)
|
|
$(COMPOSER_NORMALIZE)
|
|
|
|
|
|
.PHONY: phpstan
|
|
phpstan: ## Runs PHPStan
|
|
phpstan:
|
|
$(PHPSTAN)
|
|
|
|
|
|
.PHONY: infection
|
|
infection: ## Runs infection
|
|
infection: $(INFECTION_BIN) $(COVERAGE_DIR) vendor
|
|
if [ -d $(COVERAGE_DIR)/coverage-xml ]; then $(INFECTION); fi
|
|
|
|
|
|
.PHONY: test
|
|
test: ## Runs all the tests
|
|
test: validate-package phpstan $(COVERAGE_DIR) e2e #infection include infection later
|
|
|
|
|
|
.PHONY: validate-package
|
|
validate-package: ## Validates the Composer package
|
|
validate-package: vendor
|
|
$(COMPOSER) validate --strict
|
|
|
|
|
|
.PHONY: coverage
|
|
coverage: ## Runs PHPUnit with code coverage
|
|
coverage: $(PHPUNIT_BIN) vendor
|
|
$(PHPUNIT_COVERAGE)
|
|
|
|
|
|
.PHONY: unit-test
|
|
unit-test: ## Runs PHPUnit (default group)
|
|
unit-test: $(PHPUNIT_BIN) vendor
|
|
$(PHPUNIT) --group default
|
|
|
|
|
|
.PHONY: e2e
|
|
e2e: ## Runs PHPUnit end-to-end tests
|
|
e2e: $(PHPUNIT_BIN) vendor
|
|
$(PHPUNIT) --group e2e
|
|
|
|
|
|
#
|
|
# Rules
|
|
#---------------------------------------------------------------------------
|
|
|
|
# Vendor does not depend on the composer.lock since the later is not tracked
|
|
# or committed.
|
|
vendor: composer.json
|
|
$(COMPOSER) update
|
|
$(TOUCH) "$@"
|
|
|
|
$(PHPUNIT_BIN): vendor
|
|
$(TOUCH) "$@"
|
|
|
|
$(INFECTION_BIN): ./.phive/phars.xml
|
|
phive install infection
|
|
$(TOUCH) "$@"
|
|
|
|
$(COMPOSER_NORMALIZE_BIN): ./.phive/phars.xml
|
|
phive install composer-normalize
|
|
$(TOUCH) "$@"
|
|
|
|
$(COVERAGE_DIR): $(PHPUNIT_BIN) src tests phpunit.xml.dist
|
|
$(PHPUNIT_COVERAGE)
|
|
$(TOUCH) "$@"
|
|
|
|
$(PHP_CS_FIXER_BIN): vendor
|
|
phive install php-cs-fixer
|
|
$(TOUCH) "$@"
|
|
|
|
$(PHPSTAN_BIN): vendor
|
|
$(TOUCH) "$@"
|