TRACKING_SERVER_DIR=mlflow-tracking-server
COMPUTE_BACKEND_DIR=mantik-compute-backend
TOKENS_DIR=tokens
MFLOW_DEFAULT_VERSION=2.11.3

install:
	# Install curl, which is a dependency of pyfirecrest
	sudo apt-get update
	sudo apt-get install -y ca-certificates curl
	poetry install -E s3 -E unicore

# Go into all package dirs to write the lock file
# The order has to be according to the dependency
# of the packages (see `CONTRIBUTING.md`).
lock:
	poetry lock
	cd $(TOKENS_DIR)
	poetry lock
	cd $(TRACKING_SERVER_DIR)
	poetry lock
	cd $(COMPUTE_BACKEND_DIR)
	poetry lock
	cd ..
	poetry lock

lock-no-update:
	poetry lock --no-update
	cd $(TOKENS_DIR)
	poetry lock --no-update
	cd $(TRACKING_SERVER_DIR)
	poetry lock --no-update
	cd $(COMPUTE_BACKEND_DIR)
	poetry lock --no-update
	cd ..
	poetry lock --no-update

bump-version:
	poetry version $(version)
	cd $(TOKENS_DIR)
	poetry version $(version)
	cd $(TRACKING_SERVER_DIR)
	poetry version $(version)
	cd $(COMPUTE_BACKEND_DIR)
	poetry version $(version)
	cd ..

bump-mlflow-version:
	cd $(COMPUTE_BACKEND_DIR)
	poetry add mlflow==$(version)
	cd $(TRACKING_SERVER_DIR)
	poetry add mlflow==$(version)
	cd ..
	poetry add --group mlflow mlflow-skinny==$(version)
	$(MAKE) lock-no-update

up-integration:
	docker compose -f docker/docker-compose.integration-tests.yaml up -d

down-integration:
	docker compose -f docker/docker-compose.integration-tests.yaml down

build-mantik-compute-backend:
	docker build -f docker/mantik-compute-backend.Dockerfile .

build-mlflow-tracking-server:
	docker build -f docker/mlflow-tracking-server.Dockerfile .

build-docker: build-mantik-compute-backend build-mlflow-tracking-server

# test step for building a forked mlflow
build-forked-mlflow-server:
	$(eval VERSION := $(or $(VERSION),$(MFLOW_DEFAULT_VERSION)))
	docker build --build-arg VERSION=$(VERSION) -f docker/mlflow.Dockerfile . \
	-t registry.gitlab.com/mantik-ai/mantik/mantik_mlflow:$(VERSION)
