dev:
	echo 'No op'

lint:
	ant -buildfile build/build.xml phpcs

test:
	echo 'No op'

test_unit:
	ant -buildfile build/build.xml phpunit

unit_lint:
	ant -buildfile build/build.xml unit_lint

# Shared setup for the integration targets: (re)create the venv and install
# deps. Both test_integration and test_integration_safe depend on this, so a
# single `make test_integration_safe test_integration` bootstraps once.
_integration_venv:
	cd tests/Integration;\
		rm -fR env;\
		python -m venv env;\
		. env/bin/activate;\
		pip install --upgrade pip;\
		pip install -r requirements.txt

test_integration: _integration_venv
	cd tests/Integration; . env/bin/activate; py.test

# Runs every integration test EXCEPT the data-mutating write lifecycle tests
# (marker: write). Safe to run against shared environments such as QA.
test_integration_safe: _integration_venv
	cd tests/Integration; . env/bin/activate; py.test -m "not write"

docker_unit_lint:
	docker compose run --build --rm --remove-orphans unit-lint

down_unit_lint:
	docker compose down --remove-orphans

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

ci_unit_lint_clean: down_unit_lint

docker_test_integration:
	docker compose up \
		--build \
		--exit-code-from test-integration \
		--abort-on-container-exit \
		--remove-orphans \
		test-integration

ci_test_integration: docker_test_integration

ci_integration_clean:
	docker compose down test-integration --remove-orphans
