# =====CONFIG===== # Source directory SRC=frank # Directory name of the venv # Don't put spaces in the VENV name, make does not like spaces # Run make clean first if you change this after already having created a venv VENV=venv # Docs directory DOCS=docs # Tests directory TESTS=tests # Interpreter to create venv with INTERPRETER=python3.8 all: run # Re-create venv when needed $(VENV)/bin/activate: requirements.txt requirements-dev.txt @ echo "Rebuilding venv..." @ [ ! -e "$(VENV)" ] || rm -rf "$(VENV)" @ "$(INTERPRETER)" -m venv "$(VENV)" @ "$(VENV)/bin/pip" install -r requirements.txt -r requirements-dev.txt build-venv: $(VENV)/bin/activate # =====CLEANING===== clean: clean-venv clean-cache clean-docs # Remove venv clean-venv: @ echo "Removing venv..." @ [ ! -e "$(VENV)" ] || rm -rf "$(VENV)" # Remove cache clean-cache: @ echo "Removing .pyc files..." @ find . -type f -name "*.pyc" -delete @ echo "Removing caches..." @ find . -type d \( -name "__pycache__" -o -name ".pytest_cache" \) -exec rm -r "{}" + clean-docs: @ echo "Removing documentation build..." @ [ ! -e "$(DOCS)/build" ] || rm -r "$(DOCS)/build" clean-setup: @ echo 'Removing build artifacts...' @ [ ! -e "build" ] || rm -rf build @ find . -maxdepth 1 -type d -name '*.egg-info' -exec rm -rf "{}" \; # =====DOCS===== $(VENV)/bin/sphinx-build: build-venv @ echo "Installing sphinx..." @ "$(VENV)/bin/pip" install --quiet sphinx docs: $(VENV)/bin/sphinx-build @ "$(VENV)/bin/sphinx-apidoc" -o "$(DOCS)/source" "$(SRC)" @ "$(VENV)/bin/sphinx-build" "$(DOCS)/source" "$(DOCS)/build" # =====TESTS===== $(VENV)/bin/pytest: build-venv @ echo "Installing pytest..." @ "$(VENV)/bin/pip" install --quiet pytest test: pytest.ini $(VENV)/bin/pytest @ "$(VENV)/bin/pytest" --color=yes # =====PACKAGING===== package: README.md LICENSE setup.py test clean-setup @ echo "Removing build..." @ [ ! -e "dist" ] || rm -r "dist" @ echo "Running setup.py..." @ "$(VENV)/bin/python" setup.py sdist bdist_wheel publish: package @ echo 'Installing twine...' @ $(VENV)/bin/pip install --quiet --upgrade twine @ [ git symbolic-ref HEAD --short = master ] && { \ echo 'Publishing to PyPi Testing...'; \ $(VENV)/bin/python -m twine upload dist/* ; \ } || { \ echo 'Publishing to PyPi Testing...'; \ $(VENV)/bin/python -m twine upload --repository testpypi dist/* ; \ } # Publish will also come here someday .PHONY: all clean clean-venv clean-cache clean-docs test package docs \ build-venv run-venv clean-setup