]>
Commit | Line | Data |
---|---|---|
1 | # The personal, minimalist, super-fast, database free, bookmarking service. | |
2 | # Makefile for PHP code analysis & testing, documentation and release generation | |
3 | ||
4 | BIN = vendor/bin | |
5 | ||
6 | all: check_permissions test | |
7 | ||
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 | ## | |
14 | docker_%: | |
15 | rsync -az /shaarli/ ~/shaarli/ | |
16 | cd ~/shaarli && make $* | |
17 | ||
18 | ## | |
19 | # PHP_CodeSniffer | |
20 | # Detects PHP syntax errors | |
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 | ## | |
25 | PHPCS := $(BIN)/phpcs | |
26 | ||
27 | code_sniffer: | |
28 | @$(PHPCS) | |
29 | ||
30 | ### - errors by Git author | |
31 | code_sniffer_blame: | |
32 | @$(PHPCS) --report-gitblame | |
33 | ||
34 | ### - all errors/warnings | |
35 | code_sniffer_full: | |
36 | @$(PHPCS) --report-full --report-width=200 | |
37 | ||
38 | ### - errors grouped by kind | |
39 | code_sniffer_source: | |
40 | @$(PHPCS) --report-source || exit 0 | |
41 | ||
42 | ## | |
43 | # Checks source file & script permissions | |
44 | ## | |
45 | check_permissions: | |
46 | @echo "----------------------" | |
47 | @echo "Check file permissions" | |
48 | @echo "----------------------" | |
49 | @for file in `git ls-files | grep -v docker`; do \ | |
50 | if [ -x $$file ]; then \ | |
51 | errors=true; \ | |
52 | echo "$${file} is executable"; \ | |
53 | fi \ | |
54 | done; [ -z $$errors ] || false | |
55 | ||
56 | ## | |
57 | # PHPUnit | |
58 | # Runs unitary and functional tests | |
59 | # Generates an HTML coverage report if Xdebug is enabled | |
60 | # | |
61 | # See phpunit.xml for configuration | |
62 | # https://phpunit.de/manual/current/en/appendixes.configuration.html | |
63 | ## | |
64 | test: translate | |
65 | @echo "-------" | |
66 | @echo "PHPUNIT" | |
67 | @echo "-------" | |
68 | @mkdir -p sandbox coverage | |
69 | @$(BIN)/phpunit --coverage-php coverage/main.cov --bootstrap tests/bootstrap.php --testsuite unit-tests | |
70 | ||
71 | locale_test_%: | |
72 | @UT_LOCALE=$*.utf8 \ | |
73 | $(BIN)/phpunit \ | |
74 | --coverage-php coverage/$(firstword $(subst _, ,$*)).cov \ | |
75 | --bootstrap tests/languages/bootstrap.php \ | |
76 | --testsuite language-$(firstword $(subst _, ,$*)) | |
77 | ||
78 | all_tests: test locale_test_de_DE locale_test_en_US locale_test_fr_FR | |
79 | @# --The current version is not compatible with PHP 7.2 | |
80 | @#$(BIN)/phpcov merge --html coverage coverage | |
81 | @# --text doesn't work with phpunit 4.* (v5 requires PHP 5.6) | |
82 | @#$(BIN)/phpcov merge --text coverage/txt coverage | |
83 | ||
84 | ### download 3rd-party PHP libraries, including dev dependencies | |
85 | composer_dependencies_dev: clean | |
86 | composer install --prefer-dist | |
87 | ||
88 | ## | |
89 | # Custom release archive generation | |
90 | # | |
91 | # For each tagged revision, GitHub provides tar and zip archives that correspond | |
92 | # to the output of git-archive | |
93 | # | |
94 | # These targets produce similar archives, featuring 3rd-party dependencies | |
95 | # to ease deployment on shared hosting. | |
96 | ## | |
97 | ARCHIVE_VERSION := shaarli-$$(git describe)-full | |
98 | ARCHIVE_PREFIX=Shaarli/ | |
99 | ||
100 | release_archive: release_tar release_zip | |
101 | ||
102 | ### download 3rd-party PHP libraries | |
103 | composer_dependencies: clean | |
104 | composer install --no-dev --prefer-dist | |
105 | find vendor/ -name ".git" -type d -exec rm -rf {} + | |
106 | ||
107 | ### download 3rd-party frontend libraries | |
108 | frontend_dependencies: | |
109 | yarn install | |
110 | ||
111 | ### Build frontend dependencies | |
112 | build_frontend: frontend_dependencies | |
113 | yarn run build | |
114 | ||
115 | ### generate a release tarball and include 3rd-party dependencies and translations | |
116 | release_tar: composer_dependencies htmldoc translate build_frontend | |
117 | git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).tar HEAD | |
118 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^vendor|$(ARCHIVE_PREFIX)vendor|" vendor/ | |
119 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^doc/html|$(ARCHIVE_PREFIX)doc/html|" doc/html/ | |
120 | tar rvf $(ARCHIVE_VERSION).tar --transform "s|^tpl|$(ARCHIVE_PREFIX)tpl|" tpl/ | |
121 | gzip $(ARCHIVE_VERSION).tar | |
122 | ||
123 | ### generate a release zip and include 3rd-party dependencies and translations | |
124 | release_zip: composer_dependencies htmldoc translate build_frontend | |
125 | git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).zip -9 HEAD | |
126 | mkdir -p $(ARCHIVE_PREFIX)/doc | |
127 | mkdir -p $(ARCHIVE_PREFIX)/vendor | |
128 | rsync -a doc/html/ $(ARCHIVE_PREFIX)doc/html/ | |
129 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)doc/ | |
130 | rsync -a vendor/ $(ARCHIVE_PREFIX)vendor/ | |
131 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)vendor/ | |
132 | rsync -a tpl/ $(ARCHIVE_PREFIX)tpl/ | |
133 | zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)tpl/ | |
134 | rm -rf $(ARCHIVE_PREFIX) | |
135 | ||
136 | ## | |
137 | # Targets for repository and documentation maintenance | |
138 | ## | |
139 | ||
140 | ### remove all unversioned files | |
141 | clean: | |
142 | @git clean -df | |
143 | @rm -rf sandbox | |
144 | ||
145 | ### generate the AUTHORS file from Git commit information | |
146 | authors: | |
147 | @cp .github/mailmap .mailmap | |
148 | @git shortlog -sne > AUTHORS | |
149 | @rm .mailmap | |
150 | ||
151 | ### generate phpDocumentor documentation | |
152 | phpdoc: clean | |
153 | @docker run --rm -v $(PWD):/data -u `id -u`:`id -g` phpdoc/phpdoc | |
154 | ||
155 | ### generate HTML documentation from Markdown pages with MkDocs | |
156 | htmldoc: | |
157 | python3 -m venv venv/ | |
158 | bash -c 'source venv/bin/activate; \ | |
159 | pip install wheel; \ | |
160 | pip install mkdocs; \ | |
161 | mkdocs build --clean' | |
162 | find doc/html/ -type f -exec chmod a-x '{}' \; | |
163 | rm -r venv | |
164 | ||
165 | ||
166 | ### Generate Shaarli's translation compiled file (.mo) | |
167 | translate: | |
168 | @find inc/languages/ -name shaarli.po -execdir msgfmt shaarli.po -o shaarli.mo \; | |
169 | ||
170 | ### Run ESLint check against Shaarli's JS files | |
171 | eslint: | |
172 | @yarn run eslint -c .dev/.eslintrc.js assets/vintage/js/ | |
173 | @yarn run eslint -c .dev/.eslintrc.js assets/default/js/ | |
174 | @yarn run eslint -c .dev/.eslintrc.js assets/common/js/ | |
175 | ||
176 | ### Run CSSLint check against Shaarli's SCSS files | |
177 | sasslint: | |
178 | @yarn run stylelint --config .dev/.stylelintrc.js 'assets/default/scss/*.scss' |