SHELL := /bin/bash
PYTHON_VERSION := 3.10
VENV_NAME := frostfs-testlib
VENV_DIR := venv.${VENV_NAME}

current_dir := $(shell pwd)
DIRECTORIES := $(sort $(dir $(wildcard ../frostfs-testlib-plugin-*/ ../*-testcases/)))
FROM_VENV := . ${VENV_DIR}/bin/activate &&

venv: create requirements paths precommit
	@echo Ready

precommit:
	@echo Isntalling pre-commit hooks
	. ${VENV_DIR}/bin/activate && pre-commit install

paths:
	@echo Append paths for project
	@echo Virtual environment: ${current_dir}/${VENV_DIR}
	@rm -rf ${VENV_DIR}/lib/python${PYTHON_VERSION}/site-packages/_paths.pth
	@touch ${VENV_DIR}/lib/python${PYTHON_VERSION}/site-packages/_paths.pth
	@echo ${current_dir}/src | tee ${VENV_DIR}/lib/python${PYTHON_VERSION}/site-packages/_paths.pth

create: ${VENV_DIR}

${VENV_DIR}:
	@echo Create virtual environment ${current_dir}/${VENV_DIR}
	virtualenv --python=python${PYTHON_VERSION} --prompt=${VENV_NAME} ${VENV_DIR}

requirements:
	@echo Isntalling pip requirements
	. ${VENV_DIR}/bin/activate && pip install -Ur requirements.txt


#### VALIDATION SECTION ####
lint: create requirements
	${FROM_VENV} pylint --disable R,C,W ./src

unit_test:
	@echo Starting unit tests
	${FROM_VENV} python -m pytest tests

.PHONY: lint_dependent $(DIRECTORIES)
lint_dependent: $(DIRECTORIES)

$(DIRECTORIES):
	@echo checking dependent repo $@
	$(MAKE) validation -C $@

validation: lint unit_test lint_dependent