#
# SPDX-FileCopyrightText: 2022-present Intel Corporation
# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
# SPDX-License-Identifier: Apache-2.0
#
define PROJECT_HELP_MSG
Usage:
    make help                   show this message
    make clean                  remove intermediate files
	make test					
endef
export PROJECT_HELP_MSG

SHELL = bash -eu -o pipefail

VERSION ?= $(shell cat ./VERSION)
CONTAINER_NAME ?= $(notdir $(abspath .))

DOCKER_REGISTRY          ?=
DOCKER_REPOSITORY        ?=
DOCKER_BUILD_ARGS        ?= --rm --force-rm
DOCKER_TAG               ?= ${VERSION}
DOCKER_IMAGENAME         := ${DOCKER_REGISTRY}${DOCKER_REPOSITORY}${CONTAINER_NAME}:${DOCKER_TAG}

DOCKER_LABEL_VCS_URL     ?= $(shell git remote get-url $(shell git remote))
DOCKER_LABEL_VCS_REF     ?= $(shell git diff-index --quiet HEAD -- && git rev-parse HEAD || echo "unknown")
DOCKER_LABEL_COMMIT_DATE ?= $(shell git diff-index --quiet HEAD -- && git show -s --format=%cd --date=iso-strict HEAD || echo "unknown" )
DOCKER_LABEL_BUILD_DATE  ?= $(shell date -u "+%Y-%m-%dT%H:%M:%SZ")

VENV = venv
PYTHON = $(VENV)/bin/python3
PIP = $(VENV)/bin/pip

all: test

help:
	echo "$$PROJECT_HELP_MSG" | less

$(VENV): $(VENV)/touchfile

$(VENV)/touchfile: requirements.txt
	test -d $(VENV) || python3 -m venv $(VENV)
	. $(VENV)/bin/activate; pip install -Ur requirements.txt
	touch $(VENV)/touchfile

$(VENV)/bin/activate: requirements.txt
	python3 -m venv $(VENV)
	$(PIP) install -r requirements.txt

freeze:
	pip3 freeze | grep -v "pkg-resources" > requirements.txt

docker-build: $(VENV)
	docker build $(DOCKER_BUILD_ARGS) \
		-t $(DOCKER_IMAGENAME) \
		--build-arg org_label_schema_version="${VERSION}" \
    	--build-arg org_label_schema_vcs_url="${DOCKER_LABEL_VCS_URL}" \
    	--build-arg org_label_schema_vcs_ref="${DOCKER_LABEL_VCS_REF}" \
    	--build-arg org_label_schema_build_date="${DOCKER_LABEL_BUILD_DATE}" \
    	--build-arg org_opencord_vcs_commit_date="${DOCKER_LABEL_COMMIT_DATE}" \
		-f docker/Dockerfile .

docker-push:
	docker push $(DOCKER_IMAGENAME)

docker-run:
	docker run \
		--name $(CONTAINER_NAME) \
		--rm \
		$(DOCKER_IMAGENAME) \
		--user="abc" --password="xyz"

lint:
	flake8 --exclude=.tox network_diag

test: docker-build


CLEANUP = *.pyc $(VENV)
clean:
	rm -rf ${CLEANUP}

.PHONY: run clean

