X-Git-Url: https://git.immae.eu/?p=github%2Fshaarli%2FShaarli.git;a=blobdiff_plain;f=Makefile;h=286d2c904f711d2a04c9e15da59d1067b6ca0b4a;hp=f2db7d96b2081ad3964e6cb08441e18a87713085;hb=HEAD;hpb=f09e1e318e0b1c72aa659c20b715be508009175f diff --git a/Makefile b/Makefile index f2db7d96..181b61c4 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,19 @@ # The personal, minimalist, super-fast, database free, bookmarking service. # Makefile for PHP code analysis & testing, documentation and release generation -# Prerequisites: -# - install Composer, either: -# - from your distro's package manager; -# - from the official website (https://getcomposer.org/download/); -# - install/update test dependencies: -# $ composer install # 1st setup -# $ composer update -# - install Xdebug for PHPUnit code coverage reports: -# - see http://xdebug.org/docs/install -# - enable in php.ini - BIN = vendor/bin -PHP_SOURCE = index.php application tests plugins -PHP_COMMA_SOURCE = index.php,application,tests,plugins -all: static_analysis_summary check_permissions test +all: check_permissions test ## -# Concise status of the project -# These targets are non-blocking: || exit 0 +# Docker test adapter +# +# Shaarli sources and vendored libraries are copied from a shared volume +# to a user-owned directory to enable running tests as a non-root user. ## - -static_analysis_summary: code_sniffer_source copy_paste mess_detector_summary - @echo +docker_%: + rsync -az /shaarli/ ~/shaarli/ + cd ~/shaarli && make $* ## # PHP_CodeSniffer @@ -33,70 +22,22 @@ static_analysis_summary: code_sniffer_source copy_paste mess_detector_summary # - http://pear.php.net/manual/en/package.php.php-codesniffer.usage.php # - http://pear.php.net/manual/en/package.php.php-codesniffer.reporting.php ## +PHPCS := $(BIN)/phpcs -code_sniffer: code_sniffer_full - -### - errors filtered by coding standard: PEAR, PSR1, PSR2, Zend... -PHPCS_%: - @$(BIN)/phpcs $(PHP_SOURCE) --report-full --report-width=200 --standard=$* +code_sniffer: + @$(PHPCS) ### - errors by Git author code_sniffer_blame: - @$(BIN)/phpcs $(PHP_SOURCE) --report-gitblame + @$(PHPCS) --report-gitblame ### - all errors/warnings code_sniffer_full: - @$(BIN)/phpcs $(PHP_SOURCE) --report-full --report-width=200 + @$(PHPCS) --report-full --report-width=200 ### - errors grouped by kind code_sniffer_source: - @$(BIN)/phpcs $(PHP_SOURCE) --report-source || exit 0 - -## -# PHP Copy/Paste Detector -# Detects code redundancy -# Documentation: https://github.com/sebastianbergmann/phpcpd -## - -copy_paste: - @echo "-----------------------" - @echo "PHP COPY/PASTE DETECTOR" - @echo "-----------------------" - @$(BIN)/phpcpd $(PHP_SOURCE) || exit 0 - @echo - -## -# PHP Mess Detector -# Detects PHP syntax errors, sorted by category -# Rules documentation: http://phpmd.org/rules/index.html -## -MESS_DETECTOR_RULES = cleancode,codesize,controversial,design,naming,unusedcode - -mess_title: - @echo "-----------------" - @echo "PHP MESS DETECTOR" - @echo "-----------------" - -### - all warnings -mess_detector: mess_title - @$(BIN)/phpmd $(PHP_COMMA_SOURCE) text $(MESS_DETECTOR_RULES) | sed 's_.*\/__' - -### - all warnings + HTML output contains links to PHPMD's documentation -mess_detector_html: - @$(BIN)/phpmd $(PHP_COMMA_SOURCE) html $(MESS_DETECTOR_RULES) \ - --reportfile phpmd.html || exit 0 - -### - warnings grouped by message, sorted by descending frequency order -mess_detector_grouped: mess_title - @$(BIN)/phpmd $(PHP_SOURCE) text $(MESS_DETECTOR_RULES) \ - | cut -f 2 | sort | uniq -c | sort -nr - -### - summary: number of warnings by rule set -mess_detector_summary: mess_title - @for rule in $$(echo $(MESS_DETECTOR_RULES) | tr ',' ' '); do \ - warnings=$$($(BIN)/phpmd $(PHP_COMMA_SOURCE) text $$rule | wc -l); \ - printf "$$warnings\t$$rule\n"; \ - done; + @$(PHPCS) --report-source || exit 0 ## # Checks source file & script permissions @@ -105,7 +46,7 @@ check_permissions: @echo "----------------------" @echo "Check file permissions" @echo "----------------------" - @for file in `git ls-files`; do \ + @for file in `git ls-files | grep -v docker`; do \ if [ -x $$file ]; then \ errors=true; \ echo "$${file} is executable"; \ @@ -120,12 +61,12 @@ check_permissions: # See phpunit.xml for configuration # https://phpunit.de/manual/current/en/appendixes.configuration.html ## -test: +test: translate @echo "-------" @echo "PHPUNIT" @echo "-------" @mkdir -p sandbox coverage - @$(BIN)/phpunit --coverage-php coverage/main.cov --testsuite unit-tests + @$(BIN)/phpunit --coverage-php coverage/main.cov --bootstrap tests/bootstrap.php --testsuite unit-tests locale_test_%: @UT_LOCALE=$*.utf8 \ @@ -135,10 +76,15 @@ locale_test_%: --testsuite language-$(firstword $(subst _, ,$*)) all_tests: test locale_test_de_DE locale_test_en_US locale_test_fr_FR - @$(BIN)/phpcov merge --html coverage coverage + @# --The current version is not compatible with PHP 7.2 + @#$(BIN)/phpcov merge --html coverage coverage @# --text doesn't work with phpunit 4.* (v5 requires PHP 5.6) @#$(BIN)/phpcov merge --text coverage/txt coverage +### download 3rd-party PHP libraries, including dev dependencies +composer_dependencies_dev: clean + composer install --prefer-dist + ## # Custom release archive generation # @@ -158,18 +104,33 @@ composer_dependencies: clean composer install --no-dev --prefer-dist find vendor/ -name ".git" -type d -exec rm -rf {} + -### generate a release tarball and include 3rd-party dependencies -release_tar: composer_dependencies +### download 3rd-party frontend libraries +frontend_dependencies: + yarn install + +### Build frontend dependencies +build_frontend: frontend_dependencies + yarn run build + +### generate a release tarball and include 3rd-party dependencies and translations +release_tar: composer_dependencies htmldoc translate build_frontend git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).tar HEAD tar rvf $(ARCHIVE_VERSION).tar --transform "s|^vendor|$(ARCHIVE_PREFIX)vendor|" vendor/ + tar rvf $(ARCHIVE_VERSION).tar --transform "s|^doc/html|$(ARCHIVE_PREFIX)doc/html|" doc/html/ + tar rvf $(ARCHIVE_VERSION).tar --transform "s|^tpl|$(ARCHIVE_PREFIX)tpl|" tpl/ gzip $(ARCHIVE_VERSION).tar -### generate a release zip and include 3rd-party dependencies -release_zip: composer_dependencies +### generate a release zip and include 3rd-party dependencies and translations +release_zip: composer_dependencies htmldoc translate build_frontend git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).zip -9 HEAD - mkdir $(ARCHIVE_PREFIX) + mkdir -p $(ARCHIVE_PREFIX)/doc + mkdir -p $(ARCHIVE_PREFIX)/vendor + rsync -a doc/html/ $(ARCHIVE_PREFIX)doc/html/ + zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)doc/ rsync -a vendor/ $(ARCHIVE_PREFIX)vendor/ zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)vendor/ + rsync -a tpl/ $(ARCHIVE_PREFIX)tpl/ + zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)tpl/ rm -rf $(ARCHIVE_PREFIX) ## @@ -187,23 +148,31 @@ authors: @git shortlog -sne > AUTHORS @rm .mailmap -### generate Doxygen documentation -doxygen: clean - @rm -rf doxygen - @( cat Doxyfile ; echo "PROJECT_NUMBER=`git describe`" ) | doxygen - +### generate phpDocumentor documentation +phpdoc: clean + @docker run --rm -v $(PWD):/data -u `id -u`:`id -g` phpdoc/phpdoc -### Convert local markdown documentation to HTML -# -# For all pages: -# - convert GitHub-flavoured relative links to standard Markdown -# - generate html documentation with mkdocs -htmlpages: +### generate HTML documentation from Markdown pages with MkDocs +htmldoc: python3 -m venv venv/ bash -c 'source venv/bin/activate; \ + pip install wheel; \ pip install mkdocs; \ - mkdocs build' + mkdocs build --clean' find doc/html/ -type f -exec chmod a-x '{}' \; rm -r venv -doc_html: authors htmlpages +### Generate Shaarli's translation compiled file (.mo) +translate: + @find inc/languages/ -name shaarli.po -execdir msgfmt shaarli.po -o shaarli.mo \; + +### Run ESLint check against Shaarli's JS files +eslint: + @yarn run eslint -c .dev/.eslintrc.js assets/vintage/js/ + @yarn run eslint -c .dev/.eslintrc.js assets/default/js/ + @yarn run eslint -c .dev/.eslintrc.js assets/common/js/ + +### Run CSSLint check against Shaarli's SCSS files +sasslint: + @yarn run stylelint --config .dev/.stylelintrc.js 'assets/default/scss/*.scss'