forked from FreshRSS/FreshRSS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
232 lines (193 loc) · 6.09 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
.DEFAULT_GOAL := help
ifndef TAG
TAG=alpine
endif
PORT ?= 8080
NETWORK ?= freshrss-network
ifdef NO_DOCKER
PHP = $(shell which php)
else
PHP = docker run \
--rm \
--volume $(shell pwd):/var/www/FreshRSS:z \
--env FRESHRSS_ENV=development \
--name freshrss-php-cli \
freshrss/freshrss:$(TAG) \
php
endif
ifeq ($(findstring alpine,$(TAG)),alpine)
DOCKERFILE=Dockerfile-Alpine
else
DOCKERFILE=Dockerfile
endif
############
## Docker ##
############
.PHONY: build
build: ## Build a Docker image
docker build \
--pull \
--tag freshrss/freshrss:$(TAG) \
--file Docker/$(DOCKERFILE) .
.PHONY: start
start: ## Start the development environment (use Docker)
docker network create --driver bridge $(NETWORK) || true
$(foreach extension,$(extensions),$(eval volumes=$(volumes) --volume $(extension):/var/www/FreshRSS/extensions/$(notdir $(extension)):z))
docker run \
--rm \
--volume $(shell pwd):/var/www/FreshRSS:z \
$(volumes) \
--publish $(PORT):80 \
--env FRESHRSS_ENV=development \
--name freshrss-dev \
--network $(NETWORK) \
freshrss/freshrss:$(TAG)
.PHONY: stop
stop: ## Stop FreshRSS container if any
docker stop freshrss-dev || true
docker network rm $(NETWORK) || true
######################
## Tests and linter ##
######################
.PHONY: test
test: vendor/bin/phpunit ## Run the test suite
$(PHP) vendor/bin/phpunit --bootstrap ./tests/bootstrap.php ./tests
.PHONY: lint
lint: vendor/bin/phpcs ## Run the linter on the PHP files
$(PHP) vendor/bin/phpcs . -p -s
.PHONY: lint-fix
lint-fix: vendor/bin/phpcbf ## Fix the errors detected by the linter
$(PHP) vendor/bin/phpcbf . -p -s
bin/composer:
mkdir -p bin/
wget 'https://raw.githubusercontent.com/composer/getcomposer.org/8af47a6fd4910073ea7580378d6252c708f83a06/web/installer' -O - -q | php -- --quiet --install-dir='./bin/' --filename='composer'
vendor/bin/phpunit: bin/composer
bin/composer install --prefer-dist --no-progress
ln -s ../vendor/bin/phpunit bin/phpunit
vendor/bin/phpcs: bin/composer
bin/composer install --prefer-dist --no-progress
ln -s ../vendor/bin/phpcs bin/phpcs
vendor/bin/phpcbf: bin/composer
bin/composer install --prefer-dist --no-progress
ln -s ../vendor/bin/phpcbf bin/phpcbf
bin/typos:
mkdir -p bin/
cd bin ; \
wget -q 'https://github.com/crate-ci/typos/releases/download/v1.17.0/typos-v1.17.0-x86_64-unknown-linux-musl.tar.gz' && \
tar -xvf *.tar.gz './typos' && \
chmod +x typos && \
rm *.tar.gz ; \
cd ..
node_modules/.bin/eslint:
npm install
node_modules/.bin/rtlcss:
npm install
vendor/bin/phpstan: bin/composer
bin/composer install --prefer-dist --no-progress
##########
## I18N ##
##########
.PHONY: i18n-format
i18n-format: ## Format I18N files
@$(PHP) ./cli/manipulate.translation.php -a format
@echo Files formatted.
.PHONY: i18n-add-language
i18n-add-language: ## Add a new supported language
ifndef lang
$(error To add a new language, you need to provide one in the "lang" variable)
endif
$(PHP) ./cli/manipulate.translation.php -a add -l $(lang) -o $(ref)
@echo Language added.
.PHONY: i18n-add-key
i18n-add-key: ## Add a translation key to all supported languages
ifndef key
$(error To add a key, you need to provide one in the "key" variable)
endif
ifndef value
$(error To add a key, you need to provide its value in the "value" variable)
endif
@$(PHP) ./cli/manipulate.translation.php -a add -k $(key) -v "$(value)"
@echo Key added.
.PHONY: i18n-remove-key
i18n-remove-key: ## Remove a translation key from all supported languages
ifndef key
$(error To remove a key, you need to provide one in the "key" variable)
endif
@$(PHP) ./cli/manipulate.translation.php -a delete -k $(key)
@echo Key removed.
.PHONY: i18n-update-key
i18n-update-key: ## Update a translation key in all supported languages
ifndef key
$(error To update a key, you need to provide one in the "key" variable)
endif
ifndef value
$(error To update a key, you need to provide its value in the "value" variable)
endif
@$(PHP) ./cli/manipulate.translation.php -a add -k $(key) -v "$(value)" -l en
@echo Key updated.
.PHONY: i18n-ignore-key
i18n-ignore-key: ## Ignore a translation key for the selected language
ifndef lang
$(error To ignore a key, you need to provide a language in the "lang" variable)
endif
ifndef key
$(error To ignore a key, you need to provide one in the "key" variable)
endif
@$(PHP) ./cli/manipulate.translation.php -a ignore -k $(key) -l $(lang)
@echo Key ignored.
.PHONY: i18n-ignore-unmodified-keys
i18n-ignore-unmodified-keys: ## Ignore all unmodified translation keys for the selected language
ifndef lang
$(error To ignore unmodified keys, you need to provide a language in the "lang" variable)
endif
@$(PHP) ./cli/manipulate.translation.php -a ignore_unmodified -l $(lang)
@echo Unmodified keys ignored.
.PHONY: i18n-key-exists
i18n-key-exists: ## Check if a translation key exists
ifndef key
$(error To check if a key exists, you need to provide one in the "key" variable)
endif
@$(PHP) ./cli/manipulate.translation.php -a exist -k $(key)
###########
## TOOLS ##
###########
.PHONY: rtl
rtl: node_modules/.bin/rtlcss ## Generate RTL CSS files
npm run-script rtlcss
.PHONY: pot
pot: ## Generate POT templates for docs
cd docs && ../cli/translation-update.sh
.PHONY: refresh
refresh: ## Refresh feeds by fetching new messages
@$(PHP) ./app/actualize_script.php
###############################
## New commands aligned on CI #
## Work in progress #
###############################
# TODO: Add composer install
.PHONY: composer-test
composer-test: vendor/bin/phpstan
bin/composer run-script test
.PHONY: composer-fix
composer-fix:
bin/composer run-script fix
.PHONY: npm-test
npm-test: node_modules/.bin/eslint
npm test
.PHONY: npm-fix
npm-fix: node_modules/.bin/eslint
npm run fix
.PHONY: typos-test
typos-test: bin/typos
bin/typos
# TODO: Add shellcheck, shfmt, hadolint
.PHONY: test-all
test-all: composer-test npm-test typos-test
.PHONY: fix-all
fix-all: composer-fix npm-fix
##########
## HELP ##
##########
.PHONY: help
help:
@grep --extended-regexp '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'