Skip to content

Commit 5c09c1b

Browse files
authored
Merge pull request #789 from prometheus/repo_sync
Synchronize common files from prometheus/prometheus
2 parents 14a6f70 + 35cc56b commit 5c09c1b

File tree

2 files changed

+101
-14
lines changed

2 files changed

+101
-14
lines changed

.github/workflows/golangci-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
id: golangci-lint-version
3939
run: echo "version=$(make print-golangci-lint-version)" >> $GITHUB_OUTPUT
4040
- name: Lint
41-
uses: golangci/golangci-lint-action@0a35821d5c230e903fcfe077583637dea1b27b47 # v9.0.0
41+
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
4242
with:
4343
args: --verbose
4444
version: ${{ steps.golangci-lint-version.outputs.version }}

Makefile.common

Lines changed: 100 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright 2018 The Prometheus Authors
1+
# Copyright The Prometheus Authors
22
# Licensed under the Apache License, Version 2.0 (the "License");
33
# you may not use this file except in compliance with the License.
44
# You may obtain a copy of the License at
@@ -61,7 +61,7 @@ PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_
6161
SKIP_GOLANGCI_LINT :=
6262
GOLANGCI_LINT :=
6363
GOLANGCI_LINT_OPTS ?=
64-
GOLANGCI_LINT_VERSION ?= v2.6.2
64+
GOLANGCI_LINT_VERSION ?= v2.7.2
6565
GOLANGCI_FMT_OPTS ?=
6666
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64.
6767
# windows isn't included here because of the path separator being different.
@@ -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))
@@ -129,6 +150,12 @@ common-check_license:
129150
echo "license header checking failed:"; echo "$${licRes}"; \
130151
exit 1; \
131152
fi
153+
@echo ">> checking for copyright years 2026 or later"
154+
@futureYearRes=$$(git grep -E 'Copyright (202[6-9]|20[3-9][0-9])' -- '*.go' ':!:vendor/*' || true); \
155+
if [ -n "$${futureYearRes}" ]; then \
156+
echo "Files with copyright year 2026 or later found (should use 'Copyright The Prometheus Authors'):"; echo "$${futureYearRes}"; \
157+
exit 1; \
158+
fi
132159

133160
.PHONY: common-deps
134161
common-deps:
@@ -220,28 +247,88 @@ common-docker-repo-name:
220247
.PHONY: common-docker $(BUILD_DOCKER_ARCHS)
221248
common-docker: $(BUILD_DOCKER_ARCHS)
222249
$(BUILD_DOCKER_ARCHS): common-docker-%:
223-
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
224-
-f $(DOCKERFILE_PATH) \
225-
--build-arg ARCH="$*" \
226-
--build-arg OS="linux" \
227-
$(DOCKERBUILD_CONTEXT)
250+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
251+
dockerfile=$${variant#*:}; \
252+
variant_name=$${variant%%:*}; \
253+
distroless_arch="$*"; \
254+
if [ "$*" = "armv7" ]; then \
255+
distroless_arch="arm"; \
256+
fi; \
257+
if [ "$$dockerfile" = "Dockerfile" ]; then \
258+
echo "Building default variant ($$variant_name) for linux-$* using $$dockerfile"; \
259+
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
260+
-f $$dockerfile \
261+
--build-arg ARCH="$*" \
262+
--build-arg OS="linux" \
263+
--build-arg DISTROLESS_ARCH="$$distroless_arch" \
264+
$(DOCKERBUILD_CONTEXT); \
265+
if [ "$$variant_name" != "default" ]; then \
266+
echo "Tagging default variant with $$variant_name suffix"; \
267+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
268+
"$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
269+
fi; \
270+
else \
271+
echo "Building $$variant_name variant for linux-$* using $$dockerfile"; \
272+
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" \
273+
-f $$dockerfile \
274+
--build-arg ARCH="$*" \
275+
--build-arg OS="linux" \
276+
--build-arg DISTROLESS_ARCH="$$distroless_arch" \
277+
$(DOCKERBUILD_CONTEXT); \
278+
fi; \
279+
done
228280

229281
.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS)
230282
common-docker-publish: $(PUBLISH_DOCKER_ARCHS)
231283
$(PUBLISH_DOCKER_ARCHS): common-docker-publish-%:
232-
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)"
284+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
285+
dockerfile=$${variant#*:}; \
286+
variant_name=$${variant%%:*}; \
287+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
288+
echo "Pushing $$variant_name variant for linux-$*"; \
289+
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
290+
fi; \
291+
if [ "$$dockerfile" = "Dockerfile" ]; then \
292+
echo "Pushing default variant ($$variant_name) for linux-$*"; \
293+
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)"; \
294+
fi; \
295+
done
233296

234297
DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION)))
235298
.PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS)
236299
common-docker-tag-latest: $(TAG_DOCKER_ARCHS)
237300
$(TAG_DOCKER_ARCHS): common-docker-tag-latest-%:
238-
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"
239-
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"
301+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
302+
dockerfile=$${variant#*:}; \
303+
variant_name=$${variant%%:*}; \
304+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
305+
echo "Tagging $$variant_name variant for linux-$* as latest"; \
306+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest-$$variant_name"; \
307+
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"; \
308+
fi; \
309+
if [ "$$dockerfile" = "Dockerfile" ]; then \
310+
echo "Tagging default variant ($$variant_name) for linux-$* as latest"; \
311+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"; \
312+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"; \
313+
fi; \
314+
done
240315

241316
.PHONY: common-docker-manifest
242317
common-docker-manifest:
243-
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))
244-
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)"
318+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
319+
dockerfile=$${variant#*:}; \
320+
variant_name=$${variant%%:*}; \
321+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
322+
echo "Creating manifest for $$variant_name variant"; \
323+
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); \
324+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
325+
fi; \
326+
if [ "$$dockerfile" = "Dockerfile" ]; then \
327+
echo "Creating default variant ($$variant_name) manifest"; \
328+
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)); \
329+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)"; \
330+
fi; \
331+
done
245332

246333
.PHONY: promu
247334
promu: $(PROMU)

0 commit comments

Comments
 (0)