# Copyright 2016 The Rook Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

include ../image.mk

# the final base image
IMAGE = $(BUILD_REGISTRY)/base-$(GOARCH)

# tini's version
TINI_VERSION = v0.16.1

# the full OS image from which we generate a smaller rootfs
ROOTFS_BUILDER_IMAGE := $(BUILD_REGISTRY)/rootfs-builder-$(GOARCH)

# the smaller rootfs that will be cached in docker as an image. we use
# the image id of the builder in the image name to chain them, and ensure
# that when the rootfs builder images that this one is invalidated.
ROOTFS_IMAGE := $(BUILD_REGISTRY)/rootfs-$(GOARCH)-$$(docker images -q $(ROOTFS_BUILDER_IMAGE))

IMAGES = $(IMAGE) $(ROOTFS_BUILDER_IMAGE) $(ROOTFS_IMAGE)
CACHE_IMAGES = $(IMAGES)

TEMP := $(shell mktemp -d)

rootfs-build:
	@echo === docker build $(ROOTFS_BUILDER_IMAGE)
	@cp Dockerfile.rootfs-builder $(TEMP)/Dockerfile
	@cd $(TEMP) && $(SED_CMD) 's|BASEIMAGE|$(OSBASEIMAGE)|g' Dockerfile
	@docker build $(BUILD_BASE_ARGS) -t $(ROOTFS_BUILDER_IMAGE) $(TEMP)
#	lookup the rootfs image from the cache or make it if its not there
	@$(MAKE) cache.lookup LOOKUP_IMAGE=$(ROOTFS_IMAGE) MISS_TARGET=rootfs

rootfs:
	@echo === docker build $(ROOTFS_IMAGE)
	@CID=`docker create $(ROOTFS_BUILDER_IMAGE) /bin/bash` &&\
	  docker export $$CID > $(TEMP)/rootfs.tar &&\
	  docker rm -f $$CID
	@cp Dockerfile.rootfs $(TEMP)/Dockerfile
	@docker build $(BUILD_ARGS) -t $(ROOTFS_IMAGE) $(TEMP)
	@rm -fr $(TEMP)

do.build: rootfs-build
	@echo === docker build $(IMAGE)
	@cp Dockerfile $(TEMP)
	@cd $(TEMP) && $(SED_CMD) "s|BASEIMAGE|$(ROOTFS_IMAGE)|g" Dockerfile
	@docker build $(BUILD_ARGS) \
		--build-arg ARCH=$(DEBIAN_ARCH) \
		--build-arg TINI_VERSION=$(TINI_VERSION) \
		-t $(IMAGE) \
		$(TEMP)
	@rm -fr $(TEMP)
