IMAGE_NAME:=organic-test
# REMOTE_REPO:=harbor.fizz.buzz/private

.PHONY: all
all: build push

.PHONY: build
build:
	docker build -t $(IMAGE_NAME) -f Dockerfile --target tester .

.PHONY: build_foreign_document_test
build_foreign_document_test:
	docker build -t $(IMAGE_NAME)-foreign-document -f Dockerfile --target foreign-document-test .

.PHONY: push
push:
ifdef REMOTE_REPO
	docker tag $(IMAGE_NAME) $(REMOTE_REPO)/$(IMAGE_NAME)
	docker push $(REMOTE_REPO)/$(IMAGE_NAME)
else
	@echo "REMOTE_REPO not defined, not pushing to a remote repo."
endif

.PHONY: clean
clean:
	docker rmi $(IMAGE_NAME)
ifdef REMOTE_REPO
	docker rmi $(REMOTE_REPO)/$(IMAGE_NAME)
else
	@echo "REMOTE_REPO not defined, not removing from remote repo."
endif
	docker volume rm rust-cache cargo-cache

.PHONY: run
run: build
	docker run --rm --init --read-only --mount type=tmpfs,destination=/tmp -v "$$(readlink -f ../../):/source:ro" --workdir=/source --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target $(IMAGE_NAME) --no-default-features --features compare --no-fail-fast --lib --test test_loader

.PHONY: shell
shell: build
	docker run --rm -i -t --entrypoint /bin/sh --mount type=tmpfs,destination=/tmp -v "$$(readlink -f ../../):/source:ro" --workdir=/source --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target $(IMAGE_NAME)

.PHONY: run_foreign_document_test
run_foreign_document_test: build_foreign_document_test
	docker run --rm --init --read-only --mount type=tmpfs,destination=/tmp -v "$$(readlink -f ../../):/source:ro" --workdir=/source --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target $(IMAGE_NAME)-foreign-document