libretime/tools/python.mk

90 lines
1.8 KiB
Makefile
Raw Normal View History

2022-12-07 11:14:40 +01:00
.DEFAULT_GOAL := install
SHELL := bash
CPU_CORES := $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N )))
2021-09-13 14:22:20 +02:00
# PIP_INSTALL = --editable .
# PYLINT_ARG =
# MYPY_ARG =
# BANDIT_ARG =
2021-09-13 14:22:20 +02:00
# PYTEST_ARG =
2021-09-13 14:22:48 +02:00
SHARED_DEV_REQUIREMENTS = \
bandit \
2021-09-13 14:22:48 +02:00
black \
flake8 \
2021-09-13 14:22:48 +02:00
isort \
mypy \
pylint \
pytest \
pytest-cov \
pytest-xdist
VENV = .venv
$(VENV):
python3 -m venv $(VENV)
$(MAKE) install
# SETUPTOOLS_ENABLE_FEATURES=legacy-editable is required to work
# around https://github.com/PyCQA/pylint/issues/7306
install: $(VENV)
$(VENV)/bin/pip install --upgrade pip setuptools wheel
$(VENV)/bin/pip install $(SHARED_DEV_REQUIREMENTS)
[[ -z "$(PIP_INSTALL)" ]] || SETUPTOOLS_ENABLE_FEATURES=legacy-editable $(VENV)/bin/pip install $(PIP_INSTALL)
2021-09-13 14:21:19 +02:00
.PHONY: .format
.format: $(VENV)
$(VENV)/bin/black .
$(VENV)/bin/isort . --combine-as --profile black
.PHONY: .format-check
.format-check: $(VENV)
$(VENV)/bin/black . --check
$(VENV)/bin/isort . --combine-as --profile black --check
2021-09-13 14:21:19 +02:00
.PHONY: .pylint
.pylint: $(VENV)
$(VENV)/bin/pylint --jobs=$(CPU_CORES) --output-format=colorized --recursive=true $(PYLINT_ARG)
2021-09-10 14:41:51 +02:00
.PHONY: .mypy
.mypy: $(VENV)
$(VENV)/bin/mypy $(MYPY_ARG)
2021-09-10 14:41:51 +02:00
.PHONY: .bandit
.bandit: $(VENV)
$(VENV)/bin/bandit -r $(BANDIT_ARG)
.PHONY: .pytest
.pytest: $(VENV)
2022-12-07 11:42:16 +01:00
$(VENV)/bin/pytest \
2022-06-29 14:40:37 +02:00
--numprocesses=$(CPU_CORES) \
2022-12-07 11:42:16 +01:00
--color=yes
.PHONY: .coverage
.coverage: $(VENV)
$(VENV)/bin/pytest \
--numprocesses=$(CPU_CORES) \
--cov \
2022-06-29 14:40:37 +02:00
--cov-config=pyproject.toml \
--cov-report=term \
2022-12-07 11:42:16 +01:00
--cov-report=xml
.PHONY: .clean
.clean:
rm -Rf $(VENV)
DISTRO ?= bullseye
DOCKER_RUN = docker run -it --rm \
--user $$(id -u):$$(id -g) \
--env HOME=/src/.docker/$(DISTRO) \
--volume $$(pwd)/..:/src \
--workdir /src/$(APP) \
ghcr.io/libretime/libretime-dev:$(DISTRO)
docker-dev:
$(MAKE) clean
$(DOCKER_RUN) bash
docker-test:
$(MAKE) clean
$(DOCKER_RUN) make test