Skip to content
Snippets Groups Projects
Makefile 3.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • DJANGO_PORT = 9001
    
    JS_VENDOR_DIR = ./hypha/static_src/src/javascript/vendor
    CSS_VENDOR_DIR = ./hypha/static_src/src/javascript/vendor
    
    JS_ESM_DIR = ./hypha/static_src/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