#
#   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

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 LWUI_VERSION==$(shell cat $(MKBUILD)/.dep_lightui) \
                   --build-arg NGUI_VERSION==$(shell cat $(MKBUILD)/.dep_ngui) \
                   --build-arg TESTS_VERSION==$(shell cat $(MKBUILD)/.dep_tests) \
                   $(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)
