105 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Makefile
		
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Makefile
		
	
	
# =====CONFIG=====
 | 
						|
PYTHON  := python3
 | 
						|
# This can't contain spaces (I think)
 | 
						|
VENV    := .venv
 | 
						|
# Minimum % coverage for tests to succeed
 | 
						|
MIN_COV := 0
 | 
						|
# 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
 | 
						|
	@ '$(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
 |