Skip to content
Snippets Groups Projects
Makefile 3.33 KiB
Newer Older
DJANGO_PORT = 9001
JS_VENDOR_DIR = ./hypha/static_src/javascript/vendor
CSS_VENDOR_DIR = ./hypha/static_src/javascript/vendor
JS_ESM_DIR = ./hypha/static_src/javascript/esm
help:
	@echo "Usage:"
	@echo "  make help               prints this help."
	@echo "  make build              build js and css resources for development"
	@echo "  make cov-html           generate html coverage report"
	@echo "  make lint               run css, js and python linting."
	@echo "  make fmt                run code formatters on all code."
	@echo "  make lint-fix           try fixing plausible python linting issues."
	@echo "  make py-test            run all python tests and display coverage"
	@echo "  make test               run linting and test and generate html coverage report"
	@echo "  make serve-docs         run documentation development server"
	@echo "  make serve-django       run Django development server on port 9001."
	@echo "  make serve              run Django and docs preview server, also watch and compile frontend changes"
	@echo "  make watch              watch js and css resources for development"
	@echo "  make download-esm-modules  download esm modules from npm and copy to static_src"
.PHONY: serve
serve:
	$(MAKE) -j3 watch serve-django serve-docs

.PHONY: build
build:
	@echo "Build js and css resources for development."
	npm run dev:build
.PHONY: fmt
fmt:
	@echo "run code formatters on all code."
	python -m ruff check --fix .
	python -m ruff format .
.PHONY: cov-html
cov-html:
ifneq ("$(wildcard .coverage)","")
	@rm -rf htmlcov
	@echo "Generate html coverage report…"
	coverage html
	@echo "Open 'htmlcov/index.html' in your browser to see the report."
else
	$(error Unable to generate html coverage report, please run 'make test' or 'make py-test')
endif

.PHONY: lint
lint:
	@echo "Checking python code style with ruff"
	ruff format --check .
	@echo "Checking html file indendation."
	djhtml hypha/ --check
	@echo "Checking js and css code style."
	npm run lint

.PHONY: lint-fix
lint-fix:
	@echo "Try fixing plausible python linting issues."
	ruff check --fix .
.PHONY: py-test
py-test:
	@echo "Running python tests"
	pytest --reuse-db --cov --cov-report term:skip-covered

.PHONY: serve-django
serve-django:
	python manage.py runserver 0.0.0.0:$(DJANGO_PORT) --settings=hypha.settings.dev

.PHONY: test
test: lint py-test cov-html
.PHONY: serve-docs
serve-docs:
	@echo "Serve and watch documentation locally:"
	mkdocs serve

.PHONY: watch
watch:
	@echo "Watch js and css resources for development."
	npm run watch

.PHONY: download-esm-modules
download-esm-modules:
	pip install download-esm
	download-esm @github/relative-time-element $(JS_ESM_DIR)
	download-esm @github/filter-input-element $(JS_ESM_DIR)
	download-esm choices.js $(JS_ESM_DIR)

.PHONY: copy-npm-scripts
copy-npm-scripts:
	# Used by "npm install"
	cp node_modules/htmx.org/dist/htmx.min.js $(JS_VENDOR_DIR)/htmx.min.js
	cp node_modules/htmx.org/dist/ext/multi-swap.js $(JS_VENDOR_DIR)/htmx-ext-multi-swap.min.js
	cp node_modules/alpinejs/dist/cdn.min.js $(JS_VENDOR_DIR)/alpine.min.js
	cp node_modules/@alpinejs/focus/dist/cdn.min.js $(JS_VENDOR_DIR)/alpine-focus.min.js
	cp node_modules/daterangepicker/moment.min.js $(JS_VENDOR_DIR)/moment.min.js
	cp node_modules/daterangepicker/daterangepicker.js $(JS_VENDOR_DIR)/daterangepicker.min.js