Skip to content

Commit 9d69b10

Browse files
committed
Update common Prometheus files
Signed-off-by: prombot <prometheus-team@googlegroups.com>
1 parent 578c750 commit 9d69b10

1 file changed

Lines changed: 86 additions & 11 deletions

File tree

Makefile.common

Lines changed: 86 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,32 @@ endif
8282
PREFIX ?= $(shell pwd)
8383
BIN_DIR ?= $(shell pwd)
8484
DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
85-
DOCKERFILE_PATH ?= ./Dockerfile
8685
DOCKERBUILD_CONTEXT ?= ./
8786
DOCKER_REPO ?= prom
8887

88+
# Check if deprecated DOCKERFILE_PATH is set
89+
ifdef DOCKERFILE_PATH
90+
$(error DOCKERFILE_PATH is deprecated. Use DOCKERFILE_VARIANTS ?= $(DOCKERFILE_PATH) in the Makefile)
91+
endif
92+
8993
DOCKER_ARCHS ?= amd64
94+
DOCKERFILE_VARIANTS ?= Dockerfile $(wildcard Dockerfile.*)
95+
96+
# Function to extract variant from Dockerfile label.
97+
# Returns the variant name from io.prometheus.image.variant label, or "default" if not found.
98+
define dockerfile_variant
99+
$(strip $(or $(shell sed -n 's/.*io\.prometheus\.image\.variant="\([^"]*\)".*/\1/p' $(1)),default))
100+
endef
101+
102+
# Check for duplicate variant names (including default for Dockerfiles without labels).
103+
DOCKERFILE_VARIANT_NAMES := $(foreach df,$(DOCKERFILE_VARIANTS),$(call dockerfile_variant,$(df)))
104+
DOCKERFILE_VARIANT_NAMES_SORTED := $(sort $(DOCKERFILE_VARIANT_NAMES))
105+
ifneq ($(words $(DOCKERFILE_VARIANT_NAMES)),$(words $(DOCKERFILE_VARIANT_NAMES_SORTED)))
106+
$(error Duplicate variant names found. Each Dockerfile must have a unique io.prometheus.image.variant label, and only one can be without a label (default))
107+
endif
108+
109+
# Build variant:dockerfile pairs for shell iteration.
110+
DOCKERFILE_VARIANTS_WITH_NAMES := $(foreach df,$(DOCKERFILE_VARIANTS),$(call dockerfile_variant,$(df)):$(df))
90111

91112
BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS))
92113
PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS))
@@ -226,28 +247,82 @@ common-docker-repo-name:
226247
.PHONY: common-docker $(BUILD_DOCKER_ARCHS)
227248
common-docker: $(BUILD_DOCKER_ARCHS)
228249
$(BUILD_DOCKER_ARCHS): common-docker-%:
229-
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
230-
-f $(DOCKERFILE_PATH) \
231-
--build-arg ARCH="$*" \
232-
--build-arg OS="linux" \
233-
$(DOCKERBUILD_CONTEXT)
250+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
251+
dockerfile=$${variant#*:}; \
252+
variant_name=$${variant%%:*}; \
253+
if [ "$$dockerfile" = "Dockerfile" ]; then \
254+
echo "Building default variant ($$variant_name) for linux-$* using $$dockerfile"; \
255+
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
256+
-f $$dockerfile \
257+
--build-arg ARCH="$*" \
258+
--build-arg OS="linux" \
259+
$(DOCKERBUILD_CONTEXT); \
260+
if [ "$$variant_name" != "default" ]; then \
261+
echo "Tagging default variant with $$variant_name suffix"; \
262+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
263+
"$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
264+
fi; \
265+
else \
266+
echo "Building $$variant_name variant for linux-$* using $$dockerfile"; \
267+
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" \
268+
-f $$dockerfile \
269+
--build-arg ARCH="$*" \
270+
--build-arg OS="linux" \
271+
$(DOCKERBUILD_CONTEXT); \
272+
fi; \
273+
done
234274

235275
.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS)
236276
common-docker-publish: $(PUBLISH_DOCKER_ARCHS)
237277
$(PUBLISH_DOCKER_ARCHS): common-docker-publish-%:
238-
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)"
278+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
279+
dockerfile=$${variant#*:}; \
280+
variant_name=$${variant%%:*}; \
281+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
282+
echo "Pushing $$variant_name variant for linux-$*"; \
283+
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
284+
fi; \
285+
if [ "$$dockerfile" = "Dockerfile" ]; then \
286+
echo "Pushing default variant ($$variant_name) for linux-$*"; \
287+
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)"; \
288+
fi; \
289+
done
239290

240291
DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION)))
241292
.PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS)
242293
common-docker-tag-latest: $(TAG_DOCKER_ARCHS)
243294
$(TAG_DOCKER_ARCHS): common-docker-tag-latest-%:
244-
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"
245-
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"
295+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
296+
dockerfile=$${variant#*:}; \
297+
variant_name=$${variant%%:*}; \
298+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
299+
echo "Tagging $$variant_name variant for linux-$* as latest"; \
300+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest-$$variant_name"; \
301+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name"; \
302+
fi; \
303+
if [ "$$dockerfile" = "Dockerfile" ]; then \
304+
echo "Tagging default variant ($$variant_name) for linux-$* as latest"; \
305+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"; \
306+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"; \
307+
fi; \
308+
done
246309

247310
.PHONY: common-docker-manifest
248311
common-docker-manifest:
249-
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(SANITIZED_DOCKER_IMAGE_TAG))
250-
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)"
312+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
313+
dockerfile=$${variant#*:}; \
314+
variant_name=$${variant%%:*}; \
315+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
316+
echo "Creating manifest for $$variant_name variant"; \
317+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name); \
318+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
319+
fi; \
320+
if [ "$$dockerfile" = "Dockerfile" ]; then \
321+
echo "Creating default variant ($$variant_name) manifest"; \
322+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(SANITIZED_DOCKER_IMAGE_TAG)); \
323+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)"; \
324+
fi; \
325+
done
251326

252327
.PHONY: promu
253328
promu: $(PROMU)

0 commit comments

Comments
 (0)