| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- .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 \
- -it \
- --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: lint
- lint: bin/phpcs ## Run the linter on PHP files
- $(PHP) bin/phpcs . -p -s
- .PHONY: lint-fix
- lint-fix: bin/phpcbf ## Fix the errors detected by the linter
- $(PHP) bin/phpcbf . -p -s
- .PHONY: test
- test: bin/phpunit ## Run the PHP test suite
- $(PHP) bin/phpunit --bootstrap ./tests/bootstrap.php ./tests
- bin/composer:
- mkdir -p bin/
- wget 'https://raw.githubusercontent.com/composer/getcomposer.org/a5abae68b349213793dca4a1afcaada0ad11143b/web/installer' -O - -q | php -- --quiet --install-dir='./bin/' --filename='composer'
- # building any of these builds them all
- vendor/bin/phpunit vendor/bin/phpcs vendor/bin/phpcbf vendor/bin/phpstan &: bin/composer
- bin/composer install --prefer-dist --no-progress
- # Any of these depend on the vendor/ target, and then symlink the vendor/bin/ to the bin/.
- # use -sf so if the symlink already exists it won't error out. Running this from a container often won't properly detect it already exists
- bin/phpunit bin/phpcs bin/phpcbf bin/phpstan : % : vendor/%
- ln -sf $< $@
- bin/typos:
- mkdir -p bin/
- cd bin ; \
- wget -q 'https://github.com/crate-ci/typos/releases/download/v1.29.9/typos-v1.29.9-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
- # TODO: Add composer install
- .PHONY: composer-test
- composer-test: bin/phpstan bin/composer
- bin/composer run-script test
- .PHONY: composer-fix
- composer-fix: bin/composer
- 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 ## Run all tests
- .PHONY: fix-all
- fix-all: composer-fix npm-fix ## Run all fixes
- ##@ I18n
- .PHONY: i18n-add-file
- i18n-add-file: ## Add a new translation file to all supported languages
- ifndef key
- $(error To add a new file, you need to provide one in the "key" variable)
- endif
- @$(PHP) ./cli/manipulate.translation.php --action add --key $(key)
- @echo File 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 --action add --key $(key) --value "$(value)"
- @echo Key added.
- .PHONY: i18n-move-key
- i18n-move-key: ## Move an existing key into a new location
- ifndef key
- $(error To move a key, you need to provide one in the "key" variable)
- endif
- ifndef new-key
- $(error To specify a location to move the key to, you need to provide it in the "new-key" variable)
- endif
- @$(PHP) ./cli/manipulate.translation.php --action move --key $(key) --new-key "$(new-key)"
- @echo Key moved.
- .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 --action add --language $(lang) --origin-language $(ref)
- @echo Language added.
- .PHONY: i18n-format
- i18n-format: ## Format I18N files
- @$(PHP) ./cli/manipulate.translation.php --action format
- @echo Files formatted.
- .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 --action ignore --key $(key) --language $(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 --action ignore_unmodified --language $(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 --action exist --key $(key)
- .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 --action delete --key $(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 --action add --key $(key) --value "$(value)" --language en
- @echo Key updated.
- ##@ Tools
- .PHONY: pot
- pot: ## Generate POT templates for docs
- cd docs && ../cli/translation-update.sh
- .PHONY: readme
- readme: ## Generate translation progress in README file
- @$(PHP) ./cli/check.translation.php --generate-readme
- .PHONY: refresh
- refresh: ## Refresh feeds by fetching new messages
- @$(PHP) ./app/actualize_script.php
- .PHONY: rtl
- rtl: node_modules/.bin/rtlcss ## Generate RTL CSS files
- npm run-script rtlcss
- ##@ Help
- .PHONY: help
- help: ## Display this help
- @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-30s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
|