# =====CONFIG===== PYTHON := python3 # This can't contain spaces (I think) VENV := .venv # Minimum % coverage for tests to succeed MIN_COV := 50 # Directory name for the frontend WEB_DIR := web # =====GENERAL===== ## By default, create the venv all: venv .PHONY: all ## Remove any temporary files clean: @ rm -rf '$(VENV)' '$(WEB_DIR)'/node_modules .PHONY: clean # =====BACKEND===== ## VENV ### Create the venv $(VENV)/bin/activate: setup.py setup.cfg @ '$(PYTHON)' -m venv '$(VENV)' @ '$(VENV)'/bin/pip install -e .[develop] ### Convenient alias for the venv venv: $(VENV)/bin/activate .PHONY: venv ## Formatting & linting ### Format the codebase using black format: venv @ '$(VENV)'/bin/black setup.py app .PHONY: format ### Lint using black & flake8 lint: venv @ '$(VENV)'/bin/flake8 setup.py app @ '$(VENV)'/bin/black --check setup.py app .PHONY: lint ## Testing test: venv @ '$(VENV)'/bin/pytest --cov=app --cov-fail-under='$(MIN_COV)' tests/ .PHONY: test ## Starting the server ### Run the Quart server run: venv @ QUART_ENV=development '$(VENV)'/bin/python app .PHONY: run # =====BACKEND===== ## node_modules ### Install dependencies $(WEB_DIR)/node_modules: $(WEB_DIR)/package.json $(WEB_DIR)/yarn.lock @ yarn --cwd '$(WEB_DIR)' install # Convenient alias node_modules: | $(WEB_DIR)/node_modules .PHONY: node_modules ## Formatting & linting flint: node_modules @ yarn --cwd '$(WEB_DIR)' run lint .PHONY: flint fformat: node_modules @ yarn --cwd '$(WEB_DIR)' run format .PHONY: fformat ## Testing ftest: node_modules @ yarn --cwd '$(WEB_DIR)' test .PHONY: ftest ## Building fbuild: node_modules @ yarn --cwd '$(WEB_DIR)' build .PHONY: fbuild # =====DOCKER===== ## Build image dbuild: @ DOCKER_BUILDKIT=1 docker build -t chewingbever/jos:dev . .PHONY: image ## Run image drun: dbuild @ docker run --rm -it -p 5000:5000 chewingbever/jos:dev .PHONY: drun