DOCKER_REGISTRY           = registry.cn-shanghai.aliyuncs.com
DOCKER_ORG                = modelscope
DOCKER_IMAGE              = modelscope
DOCKER_FULL_NAME          = $(DOCKER_REGISTRY)/$(DOCKER_ORG)/$(DOCKER_IMAGE)

# CUDA_VERSION              = 11.3
# CUDNN_VERSION             = 8
BASE_RUNTIME              = reg.docker.alibaba-inc.com/pai-dlc/pytorch-training:1.10PAI-gpu-py36-cu113-ubuntu18.04
# BASE_DEVEL                = reg.docker.alibaba-inc.com/pai-dlc/pytorch-training:1.10PAI-gpu-py36-cu113-ubuntu18.04
BASE_DEVEL                = pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel


MODELSCOPE_VERSION           = $(shell git describe --tags --always)

# Can be either official / dev
BUILD_TYPE                = dev
BUILD_PROGRESS            = auto
BUILD_ARGS                = --build-arg BASE_IMAGE=$(BASE_IMAGE)

EXTRA_DOCKER_BUILD_FLAGS ?= --network=host
# DOCKER_BUILD              = DOCKER_BUILDKIT=1 \
# 							docker build \
# 								--progress=$(BUILD_PROGRESS) \
# 								$(EXTRA_DOCKER_BUILD_FLAGS) \
# 								--target $(BUILD_TYPE) \
# 								-t $(DOCKER_FULL_NAME):$(DOCKER_TAG) \
# 								$(BUILD_ARGS) \
#								-f docker/pytorch.dockerfile .
DOCKER_BUILD              = DOCKER_BUILDKIT=1 \
							docker build \
								$(EXTRA_DOCKER_BUILD_FLAGS) \
								-t $(DOCKER_FULL_NAME):$(DOCKER_TAG) \
								$(BUILD_ARGS)  \
								-f docker/pytorch.dockerfile .
DOCKER_PUSH               = docker push $(DOCKER_FULL_NAME):$(DOCKER_TAG)

.PHONY: all
all: devel-image

.PHONY: devel-image
devel-image: BASE_IMAGE := $(BASE_DEVEL)
devel-image: DOCKER_TAG := $(MODELSCOPE_VERSION)-devel
devel-image:
	$(DOCKER_BUILD)

.PHONY: devel-push
devel-push: BASE_IMAGE := $(BASE_DEVEL)
devel-push: DOCKER_TAG := $(MODELSCOPE_VERSION)-devel
devel-push:
	$(DOCKER_PUSH)

.PHONY: runtime-image
runtime-image: BASE_IMAGE := $(BASE_RUNTIME)
runtime-image: DOCKER_TAG := $(MODELSCOPE_VERSION)-runtime
runtime-image:
	$(DOCKER_BUILD)
	docker tag $(DOCKER_FULL_NAME):$(DOCKER_TAG) $(DOCKER_FULL_NAME):latest

.PHONY: runtime-push
runtime-push: BASE_IMAGE := $(BASE_RUNTIME)
runtime-push: DOCKER_TAG := $(MODELSCOPE_VERSION)-runtime
runtime-push:
	$(DOCKER_PUSH)

.PHONY: clean
clean:
	-docker rmi -f $(shell docker images -q $(DOCKER_FULL_NAME))
