#
#   Copyright 2020 ETSI
#
#   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.
#
TOPDIR=$(shell readlink -f .|sed -e 's/\/docker\/.*//')
MKINCLUDE=$(TOPDIR)/docker/mk
MKBUILD=$(TOPDIR)/docker/build

all: build

TAG ?= 6

REPOSITORY_BASE ?= http://osm-download.etsi.org/repository/osm/debian
RELEASE         ?= ReleaseNINE-daily
REPOSITORY_KEY  ?= OSM%20ETSI%20Release%20Key.gpg
REPOSITORY      ?= testing
NO_CACHE        ?= --no-cache
DOCKER_REGISTRY     ?= ""

LOWER_MDG = $(shell echo $(MDG) | tr '[:upper:]' '[:lower:]')

CONTAINER_NAME ?= $(LOWER_MDG)

CMD_DOCKER_ARGS ?= -q
DOCKER_ARGS     = $(CMD_DOCKER_ARGS)

DEPS := MON IM LCM RO common osmclient devops NBI policy-module Keystone N2VC lightui ngui PLA tests Prometheus

DEPS_TARGETS = $(addprefix $(MKBUILD)/.dep_, $(DEPS))

Q=@

$(MKBUILD):
	$Qmkdir -p $(MKBUILD)

$(MKBUILD)/.dep_policy-module:
	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m POL -p policy-module > $@

$(MKBUILD)/.dep_lightui:
	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m LW-UI -p lightui > $@

$(MKBUILD)/.dep_ngui:
	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m NG-UI -p ngui > $@

$(MKBUILD)/.dep_%:
	$Q$(MKINCLUDE)/get_version.sh -r $(REPOSITORY) -R $(RELEASE) -k $(REPOSITORY_KEY) -u $(REPOSITORY_BASE) -m $* > $@

build: $(MKBUILD) $(DEPS_TARGETS)
	$Qdocker build -t opensourcemano/$(LOWER_MDG):$(TAG) \
                   --build-arg RELEASE=$(RELEASE) \
                   --build-arg REPOSITORY=$(REPOSITORY) \
                   --build-arg REPOSITORY_KEY=$(REPOSITORY_KEY) \
                   --build-arg REPOSITORY_BASE=$(REPOSITORY_BASE) \
                   --build-arg MON_VERSION==$(shell cat $(MKBUILD)/.dep_MON) \
                   --build-arg IM_VERSION==$(shell cat $(MKBUILD)/.dep_IM) \
                   --build-arg RO_VERSION==$(shell cat $(MKBUILD)/.dep_RO) \
                   --build-arg LCM_VERSION==$(shell cat $(MKBUILD)/.dep_LCM) \
                   --build-arg COMMON_VERSION==$(shell cat $(MKBUILD)/.dep_common) \
                   --build-arg OSMCLIENT_VERSION==$(shell cat $(MKBUILD)/.dep_osmclient) \
                   --build-arg NBI_VERSION==$(shell cat $(MKBUILD)/.dep_NBI) \
                   --build-arg POL_VERSION==$(shell cat $(MKBUILD)/.dep_policy-module) \
                   --build-arg PLA_VERSION==$(shell cat $(MKBUILD)/.dep_PLA) \
                   --build-arg DEVOPS_VERSION==$(shell cat $(MKBUILD)/.dep_devops) \
                   --build-arg N2VC_VERSION==$(shell cat $(MKBUILD)/.dep_N2VC) \
                   --build-arg NGUI_VERSION==$(shell cat $(MKBUILD)/.dep_ngui) \
                   --build-arg NGSA_VERSION==$(shell cat $(MKBUILD)/.dep_ngsa) \
                   --build-arg TESTS_VERSION==$(shell cat $(MKBUILD)/.dep_tests) \
                   --build-arg CACHE_DATE==$(shell date -uI) \
                   $(DOCKER_ARGS) .

clean:
	rm -f $(MKBUILD)/.dep*

tag:
	docker tag opensourcemano/$(CONTAINER_NAME):$(INPUT_TAG) $(DOCKER_REGISTRY)opensourcemano/$(LOWER_MDG):$(TAG)

push: tag
	docker push $(DOCKER_REGISTRY)opensourcemano/$(LOWER_MDG):$(TAG)
