]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - Makefile
namespacing: \Shaarli\Http\Base64Url
[github/shaarli/Shaarli.git] / Makefile
CommitLineData
2d97aa77 1# The personal, minimalist, super-fast, database free, bookmarking service.
559315ba 2# Makefile for PHP code analysis & testing, documentation and release generation
f3e89f50 3
00f98bda 4BIN = vendor/bin
00f98bda 5
fc17813b 6all: static_analysis_summary check_permissions test
00f98bda 7
d6916040
V
8##
9# Docker test adapter
10#
11# Shaarli sources and vendored libraries are copied from a shared volume
12# to a user-owned directory to enable running tests as a non-root user.
13##
14docker_%:
15 rsync -az /shaarli/ ~/shaarli/
16 cd ~/shaarli && make $*
17
00f98bda
V
18##
19# PHP_CodeSniffer
00f98bda 20# Detects PHP syntax errors
00f98bda
V
21# Documentation (usage, output formatting):
22# - http://pear.php.net/manual/en/package.php.php-codesniffer.usage.php
23# - http://pear.php.net/manual/en/package.php.php-codesniffer.reporting.php
24##
04ec8fed
V
25PHPCS := $(BIN)/phpcs
26
27code_sniffer:
28 @$(PHPCS)
00f98bda 29
3e25f245
V
30### - errors filtered by coding standard: PEAR, PSR1, PSR2, Zend...
31PHPCS_%:
04ec8fed 32 @$(PHPCS) --report-full --report-width=200 --standard=$*
3e25f245 33
f3e89f50 34### - errors by Git author
00f98bda 35code_sniffer_blame:
04ec8fed 36 @$(PHPCS) --report-gitblame
00f98bda 37
f3e89f50 38### - all errors/warnings
00f98bda 39code_sniffer_full:
04ec8fed 40 @$(PHPCS) --report-full --report-width=200
00f98bda 41
f3e89f50 42### - errors grouped by kind
00f98bda 43code_sniffer_source:
04ec8fed 44 @$(PHPCS) --report-source || exit 0
00f98bda 45
fc17813b
V
46##
47# Checks source file & script permissions
48##
49check_permissions:
50 @echo "----------------------"
51 @echo "Check file permissions"
52 @echo "----------------------"
1a216fae 53 @for file in `git ls-files | grep -v docker`; do \
fc17813b
V
54 if [ -x $$file ]; then \
55 errors=true; \
56 echo "$${file} is executable"; \
57 fi \
58 done; [ -z $$errors ] || false
59
ca74886f
V
60##
61# PHPUnit
62# Runs unitary and functional tests
63# Generates an HTML coverage report if Xdebug is enabled
64#
65# See phpunit.xml for configuration
66# https://phpunit.de/manual/current/en/appendixes.configuration.html
67##
d6379763 68test: translate
ca74886f
V
69 @echo "-------"
70 @echo "PHPUNIT"
71 @echo "-------"
6c7d6864 72 @mkdir -p sandbox coverage
12266213 73 @$(BIN)/phpunit --coverage-php coverage/main.cov --bootstrap tests/bootstrap.php --testsuite unit-tests
6c7d6864
A
74
75locale_test_%:
76 @UT_LOCALE=$*.utf8 \
77 $(BIN)/phpunit \
78 --coverage-php coverage/$(firstword $(subst _, ,$*)).cov \
79 --bootstrap tests/languages/bootstrap.php \
80 --testsuite language-$(firstword $(subst _, ,$*))
81
82all_tests: test locale_test_de_DE locale_test_en_US locale_test_fr_FR
83 @$(BIN)/phpcov merge --html coverage coverage
84 @# --text doesn't work with phpunit 4.* (v5 requires PHP 5.6)
85 @#$(BIN)/phpcov merge --text coverage/txt coverage
ca74886f 86
559315ba
V
87##
88# Custom release archive generation
89#
90# For each tagged revision, GitHub provides tar and zip archives that correspond
91# to the output of git-archive
92#
93# These targets produce similar archives, featuring 3rd-party dependencies
94# to ease deployment on shared hosting.
95##
96ARCHIVE_VERSION := shaarli-$$(git describe)-full
ca0ed5ca 97ARCHIVE_PREFIX=Shaarli/
559315ba
V
98
99release_archive: release_tar release_zip
100
101### download 3rd-party PHP libraries
102composer_dependencies: clean
eaed9ce8 103 composer install --no-dev --prefer-dist
559315ba
V
104 find vendor/ -name ".git" -type d -exec rm -rf {} +
105
47978e87
A
106### download 3rd-party frontend libraries
107frontend_dependencies:
108 yarn install
109
110### Build frontend dependencies
111build_frontend: frontend_dependencies
112 yarn run build
113
d6379763 114### generate a release tarball and include 3rd-party dependencies and translations
47978e87 115release_tar: composer_dependencies htmldoc translate build_frontend
ca0ed5ca
V
116 git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).tar HEAD
117 tar rvf $(ARCHIVE_VERSION).tar --transform "s|^vendor|$(ARCHIVE_PREFIX)vendor|" vendor/
29712e90 118 tar rvf $(ARCHIVE_VERSION).tar --transform "s|^doc/html|$(ARCHIVE_PREFIX)doc/html|" doc/html/
a136a427 119 tar rvf $(ARCHIVE_VERSION).tar --transform "s|^tpl|$(ARCHIVE_PREFIX)tpl|" tpl/
ca0ed5ca 120 gzip $(ARCHIVE_VERSION).tar
559315ba 121
d6379763 122### generate a release zip and include 3rd-party dependencies and translations
47978e87 123release_zip: composer_dependencies htmldoc translate build_frontend
ca0ed5ca 124 git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).zip -9 HEAD
29712e90
V
125 mkdir -p $(ARCHIVE_PREFIX)/{doc,vendor}
126 rsync -a doc/html/ $(ARCHIVE_PREFIX)doc/html/
127 zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)doc/
ca0ed5ca
V
128 rsync -a vendor/ $(ARCHIVE_PREFIX)vendor/
129 zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)vendor/
a136a427
A
130 rsync -a tpl/ $(ARCHIVE_PREFIX)tpl/
131 zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)tpl/
ca0ed5ca 132 rm -rf $(ARCHIVE_PREFIX)
559315ba 133
1acc87ee 134##
135# Targets for repository and documentation maintenance
f3e89f50 136##
137
138### remove all unversioned files
1acc87ee 139clean:
d0ce99e5 140 @git clean -df
4bf35ba5 141 @rm -rf sandbox
1acc87ee 142
3ee5c697
V
143### generate the AUTHORS file from Git commit information
144authors:
145 @cp .github/mailmap .mailmap
146 @git shortlog -sne > AUTHORS
147 @rm .mailmap
148
05af6f53
V
149### generate Doxygen documentation
150doxygen: clean
151 @rm -rf doxygen
ba2cff15 152 @doxygen Doxyfile
05af6f53 153
dc37a482
V
154### generate HTML documentation from Markdown pages with MkDocs
155htmldoc:
53ed6d7d 156 python3 -m venv venv/
157 bash -c 'source venv/bin/activate; \
158 pip install mkdocs; \
fd2e8fad 159 mkdocs build --clean'
53ed6d7d 160 find doc/html/ -type f -exec chmod a-x '{}' \;
161 rm -r venv
d6379763
A
162
163
164### Generate Shaarli's translation compiled file (.mo)
165translate:
ba2cff15 166 @find inc/languages/ -name shaarli.po -execdir msgfmt shaarli.po -o shaarli.mo \;
47978e87
A
167
168### Run ESLint check against Shaarli's JS files
169eslint:
03b483aa
A
170 @yarn run eslint -c .dev/.eslintrc.js assets/vintage/js/
171 @yarn run eslint -c .dev/.eslintrc.js assets/default/js/
172
173### Run CSSLint check against Shaarli's SCSS files
174sasslint:
175 @yarn run sass-lint -c .dev/.sasslintrc 'assets/default/scss/*.scss' -v -q