]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - Makefile
Merge pull request #1698 from ArthurHoaro/feature/plugins-search-filter
[github/shaarli/Shaarli.git] / Makefile
index 40badb1d916bfaa50c58ff08d3af2159872726d3..181b61c4c476c1f3f16b5bfeb39789b9ea090bcd 100644 (file)
--- 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,21 +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 htmldoc
+### 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 htmldoc
+### 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 -p $(ARCHIVE_PREFIX)/{doc,vendor}
+       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)
 
 ##
@@ -190,16 +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
 
 ### 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
+
+
+### 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'