.PHONY: clean pip_dev
.PHONY: lint test test_unit test_integration
.PHONY: ci_unit_lint ci_unit_lint_clean ci_test_integration

clean:
	rm -rf env \
		build \
		dist \
		*.egg-info \
		.coverage .pytest_cache \
		.cache \
		coverage.xml \
		pyunit.xml
	find . | grep -E '__pycache__|\.pyc|\.pyo$\' | xargs rm -rf

env:
	python3 -m venv env
	env/bin/pip install -q -U pip setuptools wheel

pip_dev: env requirements-dev.txt
	if [ ! -f env/bin/py.test ]; then env/bin/pip install -q -I -r requirements-dev.txt; fi

env_integration: | env
	env/bin/pip install --pre -i https://pypi.theorchard.io/pypi/ kafka-utils[avro,json] owslogger~=3.0 "urllib3~=2.3"

lint: pip_dev kafka_utils tests setup.py
	env/bin/python -m flake8 kafka_utils/ tests/ examples/ *.py

test: pip_dev
	env/bin/python -m pytest -v \
		tests/unit \
		-s \
		--cov-config=.coveragerc \
		--cov kafka_utils \
		--cov-report term-missing

test_unit: pip_dev tests
	env/bin/python -m pytest tests/unit -v \
		--cov-config=.coveragerc \
		--cov kafka_utils \
		--cov-report xml \
		--junitxml=pyunit.xml

test_integration: | env_integration
	sh ./integration_tests.sh

ci_unit_lint:
	docker compose run \
		--build \
		--name python-kafka-utils-unit-lint \
		lint-and-test
	docker cp python-kafka-utils-unit-lint:/var/app/pyunit.xml ./pyunit.xml
	docker cp python-kafka-utils-unit-lint:/var/app/coverage.xml ./coverage.xml
	sed -i.bak "s?<source>/var/app/kafka_utils</source>?<source>$$(pwd)/kafka_utils</source>?g" coverage.xml
	docker rm -f python-kafka-utils-unit-lint

ci_unit_lint_clean: clean
	docker rm -f python-kafka-utils-unit-lint
	docker compose down --remove-orphans

ci_test_integration:
	docker compose run \
		--rm \
		--build \
		--remove-orphans \
		test-integration
