.PHONY: pip_dev dev lint test test_unit pip_test_integration test_integration clean clean_test_integration \
        ci_unit_lint ci_unit_lint_clean ci_test_integration

env pip_dev:
	python3.11 -m venv env
	env/bin/pip3.11 install --upgrade pip
	env/bin/pip3.11 install -r requirements.txt
	env/bin/pip3.11 install -r requirements-dev.txt

dev: env
	env/bin/python3.11 dev.py

lint: env
	env/bin/flake8 asset_file_details/ tests/ dev.py

test: env
	env/bin/py.test tests/unit/

test_unit: env
	env/bin/py.test \
		--cov asset_file_details tests/unit/ \
		--cov-report xml \
		--junitxml=pyunit.xml

tests/integration/env pip_test_integration:
	python3.11 -m venv tests/integration/env
	tests/integration/env/bin/pip3.11 install --upgrade pip
	tests/integration/env/bin/pip3.11 install -r tests/integration/requirements.txt
	
test_integration: tests/integration/env
	tests/integration/env/bin/py.test tests/integration

clean:
	rm -rf env

clean_test_integration:
	rm -rf tests/integration/env

docker_unit_lint:
	docker compose up \
		--build \
		--exit-code-from unit-lint \
		--abort-on-container-exit \
		--remove-orphans \
		unit-lint

down_unit_lint:
	docker compose down unit-lint --remove-orphans

docker_up:
	docker-compose up --build -d

docker_down:
	docker-compose down --remove-orphans

docker_test:
	docker compose up \
		--exit-code-from test-integration \
		--abort-on-container-exit \
		--build test-integration

ci_unit_lint: ci_unit_lint_clean
	mkdir -p build
	chmod a+w build
	make docker_unit_lint

ci_unit_lint_clean: down_unit_lint
	rm -rf build

ci_test_integration: docker_test
