# limitations under the License. #
##############################################################################
-
# declare the variables
-REGISTRY ?= # TBD
-NAME ?= akraino_validation
+REGISTRY ?= akraino
+NAME ?= validation
TAG_PRE ?= $(notdir $(CURDIR))
TAG_VER ?= latest
DOCKERFILE ?= Dockerfile
+WORK_DIR ?= $(CURDIR)
MTOOL ?= $(dir $(realpath $(lastword $(MAKEFILE_LIST))))/manifest-tool
+# git submodule & patch locations for upstream patching before build
+GIT_ROOT := $(shell git rev-parse --show-toplevel)
+GIT_DIR := $(shell git rev-parse --git-dir)
+PATCH_DIR := $(shell pwd)/patches
+AKRAINO_TAG := akraino-validation
+SHELL = /bin/sh
+PATCHES = $(shell find $(PATCH_DIR) $(PATCH_DIR)/$$(uname -m) \
+ -maxdepth 1 -name '*.patch' 2> /dev/null)
+
+export GIT_COMMITTER_NAME?=Akraino Validation
+export GIT_COMMITTER_EMAIL?=validation@akraino.org
+
# get the architecture of the host
HOST_ARCH = amd64
ifeq ($(shell uname -m), aarch64)
sudo chmod +x $@
.PHONY: .build
-.build:
+.build::
+ cd $(WORK_DIR) && \
docker build \
-t $(REGISTRY)/$(NAME):$(TAG_PRE)-$(HOST_ARCH)-$(TAG_VER) \
-f $(DOCKERFILE) \
.PHONY: .push_manifest
.push_manifest: $(MTOOL)
$(MTOOL) push from-args \
+ --ignore-missing \
--platforms linux/amd64,linux/arm64 \
--template $(REGISTRY)/$(NAME):$(TAG_PRE)-ARCH-$(TAG_VER) \
--target $(REGISTRY)/$(NAME):$(TAG_PRE)-$(TAG_VER)
+
+.submodules_init:
+ cd $(GIT_ROOT) && git submodule update --init 2>/dev/null; \
+ touch $@
+
+.submodules_patched: .submodules_init $(PATCHES)
+ $(MAKE) .submodules_clean
+ @cd $(GIT_ROOT) && git submodule -q foreach ' \
+ if [ $$name = $$(basename $(TAG_PRE)) ] && [ -n "$(PATCHES)" ]; then \
+ git tag $(AKRAINO_TAG)-upstream && \
+ git checkout -q -b akraino-validation && \
+ echo "`tput setaf 2`-- patching $$name`tput sgr0`";\
+ git am -3 --ignore-whitespace --patch-format=mbox \
+ --committer-date-is-author-date $(PATCHES) && \
+ git tag $(AKRAINO_TAG) || exit 1; \
+ fi'; \
+ touch $@
+
+.PHONY: .submodules_clean
+.submodules_clean:
+ @cd $(GIT_ROOT) && git submodule -q foreach ' \
+ git am -q --abort > /dev/null 2>&1; \
+ git checkout -q -f $(AKRAINO_TAG)-upstream > /dev/null 2>&1; \
+ git branch -q -D akraino-validation > /dev/null 2>&1; \
+ git tag | grep $(AKRAINO_TAG) | xargs git tag -d > /dev/null 2>&1; \
+ git reset -q --hard HEAD; \
+ git clean -xdff'
+ @rm -f .submodules_patched