56 lines
1.9 KiB
Makefile
Executable File
56 lines
1.9 KiB
Makefile
Executable File
TARGETS := $(patsubst ./%/,%,$(dir $(shell find -L . -maxdepth 2 -mindepth 2 -type f -and -name Makefile)))
|
|
.PHONY: all
|
|
all: login $(TARGETS)
|
|
|
|
include config.mk
|
|
$(foreach target,$(TARGETS),$(eval include $(target)/Makefile))
|
|
|
|
container_image_name = $(REGISTRY_DOMAIN)/$(REGISTRY_USER)/$(CONTAINER_NAME_PREFIX)$(target)
|
|
app_version = $(shell head -n 1 $(target)/version)
|
|
remove_last_version_part = $(shell a="$(1)"; [ "$(1)" = "$${a%.*}" ] && echo "" || echo "$${a%.*}")
|
|
all_versions = $(if $(1),$(1) $(call all_versions,$(call remove_last_version_part,$(1))))
|
|
tag_alpine_version_parts := alpine $(addprefix alpine,$(call all_versions,$(ALPINE_VERSION)))
|
|
tag_app_version_parts = $(call all_versions,$(app_version))
|
|
tags = $(tag_app_version_parts) $(tag_alpine_version_parts)\
|
|
$(foreach app_part,$(tag_app_version_parts),$(addprefix $(app_part)-,$(tag_alpine_version_parts)))
|
|
docker_context = $(if $(DOCKER_CONTEXT_$(target)),$(DOCKER_CONTEXT_$(target)),$(target))
|
|
|
|
define build_rule =
|
|
.PHONY: build_$(target)
|
|
build_$(target):
|
|
podman build \
|
|
-t $(container_image_name):latest \
|
|
--build-arg "ALPINE_VERSION=$(ALPINE_VERSION)" \
|
|
--build-arg "VERSION=$(app_version)" \
|
|
$(docker_context)
|
|
endef
|
|
|
|
define tag_rule =
|
|
.PHONY: tag_$(target)
|
|
tag_$(target):
|
|
podman tag $(container_image_name):latest $(addprefix $(container_image_name):,$(tags))
|
|
endef
|
|
|
|
define push_rule =
|
|
.PHONY: push_$(target)
|
|
push_$(target): login
|
|
podman push "$(container_image_name):latest"
|
|
$(foreach tag,$(tags),podman push $(container_image_name):$(tag);)
|
|
endef
|
|
|
|
define target_rule =
|
|
.PHONY: $(target)
|
|
$(target): prepare_$(target) build_$(target) tag_$(target) push_$(target)
|
|
endef
|
|
|
|
.PHONY: login
|
|
login:
|
|
podman login $(REGISTRY_DOMAIN)
|
|
|
|
$(foreach target,$(TARGETS),$(eval $(target_rule)))
|
|
$(foreach target,$(TARGETS),$(eval $(build_rule)))
|
|
$(foreach target,$(TARGETS),$(eval $(tag_rule)))
|
|
$(foreach target,$(TARGETS),$(eval $(push_rule)))
|
|
|
|
clean: $(foreach target,$(TARGETS),clean_$(target))
|