Skip to content

Commit acc0837

Browse files
authored
Update common Prometheus files (#3521)
Signed-off-by: prombot <prometheus-team@googlegroups.com>
1 parent ecb200e commit acc0837

3 files changed

Lines changed: 129 additions & 20 deletions

File tree

.github/workflows/container_description.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
if: github.repository_owner == 'prometheus' || github.repository_owner == 'prometheus-community' # Don't run this workflow on forks.
1919
steps:
2020
- name: git checkout
21-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
21+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2222
with:
2323
persist-credentials: false
2424
- name: Set docker hub repo name
@@ -42,7 +42,7 @@ jobs:
4242
if: github.repository_owner == 'prometheus' || github.repository_owner == 'prometheus-community' # Don't run this workflow on forks.
4343
steps:
4444
- name: git checkout
45-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
45+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
4646
with:
4747
persist-credentials: false
4848
- name: Set quay.io org name

.github/workflows/golangci-lint.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ jobs:
2424
runs-on: ubuntu-latest
2525
steps:
2626
- name: Checkout repository
27-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
27+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2828
with:
2929
persist-credentials: false
3030
- name: Install Go
31-
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
31+
uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
3232
with:
3333
go-version: 1.25.x
3434
- name: Install snmp_exporter/generator dependencies
@@ -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@4afd733a84b1f43292c63897423277bb7f4313a9 # v8.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: 124 additions & 15 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.0
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))
@@ -112,7 +133,7 @@ common-all: precheck style check_license lint yamllint unused build test
112133
.PHONY: common-style
113134
common-style:
114135
@echo ">> checking code style"
115-
@fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \
136+
@fmtRes=$$($(GOFMT) -d $$(git ls-files '*.go' ':!:vendor/*' || find . -path ./vendor -prune -o -name '*.go' -print)); \
116137
if [ -n "$${fmtRes}" ]; then \
117138
echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \
118139
echo "Please ensure you are using $$($(GO) version) for formatting code."; \
@@ -122,13 +143,19 @@ common-style:
122143
.PHONY: common-check_license
123144
common-check_license:
124145
@echo ">> checking license header"
125-
@licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \
146+
@licRes=$$(for file in $$(git ls-files '*.go' ':!:vendor/*' || find . -path ./vendor -prune -o -type f -iname '*.go' -print) ; do \
126147
awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \
127148
done); \
128149
if [ -n "$${licRes}" ]; then \
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,110 @@ 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+
if [ "$(DOCKER_IMAGE_TAG)" = "latest" ]; then \
296+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
297+
echo "Pushing $$variant_name variant version tags for linux-$*"; \
298+
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name"; \
299+
fi; \
300+
if [ "$$dockerfile" = "Dockerfile" ]; then \
301+
echo "Pushing default variant version tag for linux-$*"; \
302+
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"; \
303+
fi; \
304+
fi; \
305+
done
233306

234307
DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION)))
235308
.PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS)
236309
common-docker-tag-latest: $(TAG_DOCKER_ARCHS)
237310
$(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)"
311+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
312+
dockerfile=$${variant#*:}; \
313+
variant_name=$${variant%%:*}; \
314+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
315+
echo "Tagging $$variant_name variant for linux-$* as latest"; \
316+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest-$$variant_name"; \
317+
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"; \
318+
fi; \
319+
if [ "$$dockerfile" = "Dockerfile" ]; then \
320+
echo "Tagging default variant ($$variant_name) for linux-$* as latest"; \
321+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"; \
322+
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"; \
323+
fi; \
324+
done
240325

241326
.PHONY: common-docker-manifest
242327
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)"
328+
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
329+
dockerfile=$${variant#*:}; \
330+
variant_name=$${variant%%:*}; \
331+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
332+
echo "Creating manifest for $$variant_name variant"; \
333+
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); \
334+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
335+
fi; \
336+
if [ "$$dockerfile" = "Dockerfile" ]; then \
337+
echo "Creating default variant ($$variant_name) manifest"; \
338+
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)); \
339+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)"; \
340+
fi; \
341+
if [ "$(DOCKER_IMAGE_TAG)" = "latest" ]; then \
342+
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
343+
echo "Creating manifest for $$variant_name variant version tag"; \
344+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name); \
345+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name"; \
346+
fi; \
347+
if [ "$$dockerfile" = "Dockerfile" ]; then \
348+
echo "Creating default variant version tag manifest"; \
349+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):v$(DOCKER_MAJOR_VERSION_TAG)); \
350+
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)"; \
351+
fi; \
352+
fi; \
353+
done
245354

246355
.PHONY: promu
247356
promu: $(PROMU)

0 commit comments

Comments
 (0)