mirror of
https://github.com/prometheus-operator/prometheus-operator.git
synced 2025-04-15 16:56:24 +00:00
Afaiu the spec is unclear whether to quote this or not. In this case here is certainly not requires and works fine without. Additionally, there is some tooling which does not treat quotes values correctly and generates image links like `quay.io/prometheus/golang-builder:\"1.23\"-base`. Signed-off-by: Jan Fajerski <jfajersk@redhat.com>
455 lines
21 KiB
Makefile
455 lines
21 KiB
Makefile
SHELL=/usr/bin/env bash -o pipefail
|
|
|
|
GOOS?=$(shell go env GOOS)
|
|
GOARCH?=$(shell go env GOARCH)
|
|
ifeq ($(GOARCH),arm)
|
|
ARCH=armv7
|
|
else
|
|
ARCH=$(GOARCH)
|
|
endif
|
|
# TODO remove GODEBUG=gotypesalias=0
|
|
# fixed: https://tip.golang.org/doc/go1.23#gotypespkggotypes
|
|
GODEBUG := gotypesalias=0
|
|
|
|
CONTAINER_CLI ?= docker
|
|
|
|
GO_PKG=github.com/prometheus-operator/prometheus-operator
|
|
IMAGE_OPERATOR?=quay.io/prometheus-operator/prometheus-operator
|
|
IMAGE_RELOADER?=quay.io/prometheus-operator/prometheus-config-reloader
|
|
IMAGE_WEBHOOK?=quay.io/prometheus-operator/admission-webhook
|
|
TAG?=$(shell git rev-parse --short HEAD)
|
|
VERSION?=$(shell cat VERSION | tr -d " \t\n\r")
|
|
GO_VERSION?=$(shell grep golang-version .github/env | sed "s/golang-version=//")
|
|
|
|
KIND_CONTEXT ?= e2e
|
|
|
|
TYPES_V1_TARGET := pkg/apis/monitoring/v1/types.go
|
|
TYPES_V1_TARGET += pkg/apis/monitoring/v1/alertmanager_types.go
|
|
TYPES_V1_TARGET += pkg/apis/monitoring/v1/podmonitor_types.go
|
|
TYPES_V1_TARGET += pkg/apis/monitoring/v1/probe_types.go
|
|
TYPES_V1_TARGET += pkg/apis/monitoring/v1/prometheus_types.go
|
|
TYPES_V1_TARGET += pkg/apis/monitoring/v1/servicemonitor_types.go
|
|
TYPES_V1_TARGET += pkg/apis/monitoring/v1/thanos_types.go
|
|
|
|
TYPES_V1ALPHA1_TARGET := pkg/apis/monitoring/v1alpha1/alertmanager_config_types.go
|
|
TYPES_V1ALPHA1_TARGET += pkg/apis/monitoring/v1alpha1/prometheusagent_types.go
|
|
TYPES_V1ALPHA1_TARGET += pkg/apis/monitoring/v1alpha1/scrapeconfig_types.go
|
|
TYPES_V1BETA1_TARGET := pkg/apis/monitoring/v1beta1/alertmanager_config_types.go
|
|
|
|
TOOLS_BIN_DIR ?= $(shell pwd)/tmp/bin
|
|
export PATH := $(TOOLS_BIN_DIR):$(PATH)
|
|
|
|
CONTROLLER_GEN_BINARY := $(TOOLS_BIN_DIR)/controller-gen
|
|
JB_BINARY=$(TOOLS_BIN_DIR)/jb
|
|
GOJSONTOYAML_BINARY=$(TOOLS_BIN_DIR)/gojsontoyaml
|
|
JSONNET_BINARY=$(TOOLS_BIN_DIR)/jsonnet
|
|
JSONNETFMT_BINARY=$(TOOLS_BIN_DIR)/jsonnetfmt
|
|
SHELLCHECK_BINARY=$(TOOLS_BIN_DIR)/shellcheck
|
|
PROMLINTER_BINARY=$(TOOLS_BIN_DIR)/promlinter
|
|
GOLANGCILINTER_BINARY=$(TOOLS_BIN_DIR)/golangci-lint
|
|
MDOX_BINARY=$(TOOLS_BIN_DIR)/mdox
|
|
API_DOC_GEN_BINARY=$(TOOLS_BIN_DIR)/gen-crd-api-reference-docs
|
|
TOOLING=$(CONTROLLER_GEN_BINARY) $(GOBINDATA_BINARY) $(JB_BINARY) $(GOJSONTOYAML_BINARY) $(JSONNET_BINARY) $(JSONNETFMT_BINARY) $(SHELLCHECK_BINARY) $(PROMLINTER_BINARY) $(GOLANGCILINTER_BINARY) $(MDOX_BINARY) $(API_DOC_GEN_BINARY)
|
|
|
|
K8S_GEN_BINARIES:=informer-gen lister-gen client-gen applyconfiguration-gen
|
|
K8S_GEN_ARGS:=--go-header-file $(shell pwd)/.header --v=1 --logtostderr
|
|
|
|
K8S_GEN_DEPS:=.header
|
|
K8S_GEN_DEPS+=$(TYPES_V1_TARGET)
|
|
K8S_GEN_DEPS+=$(TYPES_V1ALPHA1_TARGET)
|
|
K8S_GEN_DEPS+=$(TYPES_V1BETA1_TARGET)
|
|
K8S_GEN_DEPS+=$(foreach bin,$(K8S_GEN_BINARIES),$(TOOLS_BIN_DIR)/$(bin))
|
|
|
|
BUILD_DATE=$(shell date +"%Y%m%d-%T")
|
|
# source: https://docs.github.com/en/free-pro-team@latest/actions/reference/environment-variables#default-environment-variables
|
|
ifndef GITHUB_ACTIONS
|
|
BUILD_USER?=$(USER)
|
|
BUILD_BRANCH?=$(shell git branch --show-current)
|
|
BUILD_REVISION?=$(shell git rev-parse --short HEAD)
|
|
else
|
|
BUILD_USER=Action-Run-ID-$(GITHUB_RUN_ID)
|
|
BUILD_BRANCH=$(GITHUB_REF:refs/heads/%=%)
|
|
BUILD_REVISION=$(GITHUB_SHA)
|
|
endif
|
|
GITHUB_TOKEN?=
|
|
|
|
# The Prometheus common library import path
|
|
PROMETHEUS_COMMON_PKG=github.com/prometheus/common
|
|
|
|
# The ldflags for the go build process to set the version related data.
|
|
GO_BUILD_LDFLAGS=\
|
|
-s \
|
|
-X $(PROMETHEUS_COMMON_PKG)/version.Revision=$(BUILD_REVISION) \
|
|
-X $(PROMETHEUS_COMMON_PKG)/version.BuildUser=$(BUILD_USER) \
|
|
-X $(PROMETHEUS_COMMON_PKG)/version.BuildDate=$(BUILD_DATE) \
|
|
-X $(PROMETHEUS_COMMON_PKG)/version.Branch=$(BUILD_BRANCH) \
|
|
-X $(PROMETHEUS_COMMON_PKG)/version.Version=$(VERSION)
|
|
|
|
GO_BUILD_RECIPE=\
|
|
GOOS=$(GOOS) \
|
|
GOARCH=$(GOARCH) \
|
|
CGO_ENABLED=0 \
|
|
go build -ldflags="$(GO_BUILD_LDFLAGS)"
|
|
|
|
pkgs = $(shell go list ./... | grep -v /test/ | grep -v /contrib/)
|
|
pkgs += $(shell go list $(GO_PKG)/pkg/apis/monitoring...)
|
|
pkgs += $(shell go list $(GO_PKG)/pkg/client...)
|
|
|
|
.PHONY: all
|
|
all: format generate build test
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
# Remove all files and directories ignored by git.
|
|
git clean -Xfd .
|
|
|
|
############
|
|
# Building #
|
|
############
|
|
|
|
.PHONY: build
|
|
build: operator prometheus-config-reloader admission-webhook k8s-gen
|
|
|
|
.PHONY: operator
|
|
operator:
|
|
$(GO_BUILD_RECIPE) -o $@ cmd/operator/main.go
|
|
|
|
.PHONY: prometheus-config-reloader
|
|
prometheus-config-reloader:
|
|
$(GO_BUILD_RECIPE) -o $@ cmd/$@/main.go
|
|
|
|
.PHONY: admission-webhook
|
|
admission-webhook:
|
|
$(GO_BUILD_RECIPE) -o $@ cmd/$@/main.go
|
|
|
|
|
|
DEEPCOPY_TARGETS := pkg/apis/monitoring/v1/zz_generated.deepcopy.go pkg/apis/monitoring/v1alpha1/zz_generated.deepcopy.go pkg/apis/monitoring/v1beta1/zz_generated.deepcopy.go
|
|
$(DEEPCOPY_TARGETS): $(CONTROLLER_GEN_BINARY)
|
|
cd ./pkg/apis/monitoring/v1 && $(CONTROLLER_GEN_BINARY) object:headerFile=$(CURDIR)/.header \
|
|
paths=.
|
|
cd ./pkg/apis/monitoring/v1alpha1 && $(CONTROLLER_GEN_BINARY) object:headerFile=$(CURDIR)/.header \
|
|
paths=.
|
|
cd ./pkg/apis/monitoring/v1beta1 && $(CONTROLLER_GEN_BINARY) object:headerFile=$(CURDIR)/.header \
|
|
paths=.
|
|
|
|
.PHONY: k8s-client-gen
|
|
k8s-client-gen: $(K8S_GEN_DEPS)
|
|
rm -rf pkg/client/{versioned,informers,listers,applyconfiguration}
|
|
|
|
@echo ">> generating pkg/client/applyconfiguration..."
|
|
GODEBUG=$(GODEBUG) $(APPLYCONFIGURATION_GEN_BINARY) \
|
|
$(K8S_GEN_ARGS) \
|
|
--output-pkg "$(GO_PKG)/pkg/client/applyconfiguration" \
|
|
--output-dir "pkg/client/applyconfiguration" \
|
|
"$(GO_PKG)/pkg/apis/monitoring/v1" "$(GO_PKG)/pkg/apis/monitoring/v1alpha1" "$(GO_PKG)/pkg/apis/monitoring/v1beta1"
|
|
|
|
@echo ">> generating pkg/client/versioned..."
|
|
GODEBUG=$(GODEBUG) $(CLIENT_GEN_BINARY) \
|
|
$(K8S_GEN_ARGS) \
|
|
--apply-configuration-package "$(GO_PKG)/pkg/client/applyconfiguration" \
|
|
--input-base "$(GO_PKG)/pkg/apis" \
|
|
--clientset-name "versioned" \
|
|
--output-pkg "$(GO_PKG)/pkg/client" \
|
|
--output-dir "pkg/client" \
|
|
--input monitoring/v1 \
|
|
--input monitoring/v1beta1 \
|
|
--input monitoring/v1alpha1
|
|
|
|
@echo ">> generating pkg/client/listers..."
|
|
GODEBUG=$(GODEBUG) $(LISTER_GEN_BINARY) \
|
|
$(K8S_GEN_ARGS) \
|
|
--output-pkg "$(GO_PKG)/pkg/client/listers" \
|
|
--output-dir "pkg/client/listers" \
|
|
"$(GO_PKG)/pkg/apis/monitoring/v1" "$(GO_PKG)/pkg/apis/monitoring/v1alpha1" "$(GO_PKG)/pkg/apis/monitoring/v1beta1"
|
|
|
|
@echo ">> generating pkg/client/informers..."
|
|
GODEBUG=$(GODEBUG) $(INFORMER_GEN_BINARY) \
|
|
$(K8S_GEN_ARGS) \
|
|
--versioned-clientset-package "$(GO_PKG)/pkg/client/versioned" \
|
|
--listers-package "$(GO_PKG)/pkg/client/listers" \
|
|
--output-pkg "$(GO_PKG)/pkg/client/informers" \
|
|
--output-dir "pkg/client/informers" \
|
|
"$(GO_PKG)/pkg/apis/monitoring/v1" "$(GO_PKG)/pkg/apis/monitoring/v1alpha1" "$(GO_PKG)/pkg/apis/monitoring/v1beta1"
|
|
|
|
.PHONY: k8s-gen
|
|
k8s-gen: $(DEEPCOPY_TARGETS) k8s-client-gen
|
|
|
|
image-builder-version: .github/env
|
|
@echo $(GO_VERSION)
|
|
sed -i.bak "s/ARG GOLANG_BUILDER=.*/ARG GOLANG_BUILDER=$(GO_VERSION)/" \
|
|
Dockerfile && rm Dockerfile.bak
|
|
sed -i.bak "s/ARG GOLANG_BUILDER=.*/ARG GOLANG_BUILDER=$(GO_VERSION)/" \
|
|
cmd/prometheus-config-reloader/Dockerfile && rm cmd/prometheus-config-reloader/Dockerfile.bak
|
|
sed -i.bak "s/ARG GOLANG_BUILDER=.*/ARG GOLANG_BUILDER=$(GO_VERSION)/" \
|
|
cmd/admission-webhook/Dockerfile && rm cmd/admission-webhook/Dockerfile.bak
|
|
|
|
.PHONY: image
|
|
image: GOOS := linux # Overriding GOOS value for docker image build
|
|
image: .hack-operator-image .hack-prometheus-config-reloader-image .hack-admission-webhook-image
|
|
|
|
.hack-operator-image: Dockerfile
|
|
# Create empty target file, for the sole purpose of recording when this target
|
|
# was last executed via the last-modification timestamp on the file. See
|
|
# https://www.gnu.org/software/make/manual/make.html#Empty-Targets
|
|
$(CONTAINER_CLI) build --build-arg ARCH=$(ARCH) --build-arg OS=$(GOOS) -t $(IMAGE_OPERATOR):$(TAG) .
|
|
touch $@
|
|
|
|
.hack-prometheus-config-reloader-image: cmd/prometheus-config-reloader/Dockerfile
|
|
# Create empty target file, for the sole purpose of recording when this target
|
|
# was last executed via the last-modification timestamp on the file. See
|
|
# https://www.gnu.org/software/make/manual/make.html#Empty-Targets
|
|
$(CONTAINER_CLI) build --build-arg ARCH=$(ARCH) --build-arg OS=$(GOOS) -t $(IMAGE_RELOADER):$(TAG) -f cmd/prometheus-config-reloader/Dockerfile .
|
|
touch $@
|
|
|
|
.hack-admission-webhook-image: cmd/admission-webhook/Dockerfile
|
|
# Create empty target file, for the sole purpose of recording when this target
|
|
# was last executed via the last-modification timestamp on the file. See
|
|
# https://www.gnu.org/software/make/manual/make.html#Empty-Targets
|
|
$(CONTAINER_CLI) build --build-arg ARCH=$(ARCH) --build-arg OS=$(GOOS) -t $(IMAGE_WEBHOOK):$(TAG) -f cmd/admission-webhook/Dockerfile .
|
|
touch $@
|
|
|
|
.PHONY: update-go-deps
|
|
update-go-deps:
|
|
for m in $$(go list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \
|
|
go get -d $$m; \
|
|
done
|
|
(cd pkg/client && go get -u ./...)
|
|
(cd pkg/apis/monitoring && go get -u ./...)
|
|
@echo "Don't forget to run 'make tidy'"
|
|
|
|
##############
|
|
# Generating #
|
|
##############
|
|
|
|
.PHONY: tidy
|
|
tidy:
|
|
go mod tidy -v
|
|
cd pkg/apis/monitoring && go mod tidy -v -modfile=go.mod -compat=1.18
|
|
cd pkg/client && go mod tidy -v -modfile=go.mod -compat=1.18
|
|
cd scripts && go mod tidy -v -modfile=go.mod -compat=1.18
|
|
|
|
.PHONY: generate
|
|
generate: k8s-gen generate-crds bundle.yaml example/mixin/alerts.yaml example/thanos/thanos.yaml example/admission-webhook example/alertmanager-crd-conversion generate-docs image-builder-version
|
|
|
|
# For now, the v1beta1 CRDs aren't part of the default bundle because they
|
|
# require to deploy/run the conversion webhook.
|
|
# They are provided in a separate directory
|
|
# (example/prometheus-operator-crd-full) and we generate jsonnet code that can
|
|
# be used to patch the "default" jsonnet CRD.
|
|
.PHONY: generate-crds
|
|
generate-crds: $(CONTROLLER_GEN_BINARY) $(GOJSONTOYAML_BINARY) $(TYPES_V1_TARGET) $(TYPES_V1ALPHA1_TARGET) $(TYPES_V1BETA1_TARGET)
|
|
cd pkg/apis/monitoring && $(CONTROLLER_GEN_BINARY) crd:crdVersions=v1 paths=./v1/. paths=./v1alpha1/. output:crd:dir=$(PWD)/example/prometheus-operator-crd/
|
|
VERSION=$(VERSION) ./scripts/generate/append-operator-version.sh
|
|
find example/prometheus-operator-crd/ -name '*.yaml' -print0 | xargs -0 -I{} sh -c '$(GOJSONTOYAML_BINARY) -yamltojson < "$$1" | jq > "$(PWD)/jsonnet/prometheus-operator/$$(basename $$1 | cut -d'_' -f2 | cut -d. -f1)-crd.json"' -- {}
|
|
cd pkg/apis/monitoring && $(CONTROLLER_GEN_BINARY) crd:crdVersions=v1 paths=./... output:crd:dir=$(PWD)/example/prometheus-operator-crd-full
|
|
echo "// Code generated using 'make generate-crds'. DO NOT EDIT." > $(PWD)/jsonnet/prometheus-operator/alertmanagerconfigs-v1beta1-crd.libsonnet
|
|
echo "{spec+: {versions+: $$($(GOJSONTOYAML_BINARY) -yamltojson < example/prometheus-operator-crd-full/monitoring.coreos.com_alertmanagerconfigs.yaml | jq '.spec.versions | map(select(.name == "v1beta1"))')}}" | $(JSONNETFMT_BINARY) - >> $(PWD)/jsonnet/prometheus-operator/alertmanagerconfigs-v1beta1-crd.libsonnet
|
|
|
|
.PHONY: generate-remote-write-certs
|
|
generate-remote-write-certs:
|
|
mkdir -p test/e2e/remote_write_certs && \
|
|
(cd scripts && GOOS=$(OS) GOARCH=$(ARCH) go run -v ./certs/.)
|
|
|
|
.PHONY: generate-docs
|
|
generate-docs: $(shell find Documentation -type f)
|
|
|
|
bundle.yaml: generate-crds $(shell find example/rbac/prometheus-operator/*.yaml -type f)
|
|
scripts/generate-bundle.sh
|
|
|
|
# stripped-down-crds.yaml is a version of the Prometheus Operator CRDs with all
|
|
# description fields being removed. It is meant as a workaround for the issue
|
|
# that `kubectl apply -f ...` might fail with the full version of the CRDs
|
|
# because of too long annotations field.
|
|
# See https://github.com/prometheus-operator/prometheus-operator/issues/4355
|
|
stripped-down-crds.yaml: $(shell find example/prometheus-operator-crd/*.yaml -type f) $(GOJSONTOYAML_BINARY)
|
|
: > $@
|
|
for f in example/prometheus-operator-crd/*.yaml; do echo '---' >> $@; $(GOJSONTOYAML_BINARY) -yamltojson < $$f | jq 'walk(if type == "object" then with_entries(if .value|type=="object" then . else select(.key | test("description") | not) end) else . end)' | $(GOJSONTOYAML_BINARY) >> $@; done
|
|
|
|
scripts/generate/vendor: $(JB_BINARY) $(shell find jsonnet/prometheus-operator -type f)
|
|
cd scripts/generate; $(JB_BINARY) install;
|
|
|
|
example/non-rbac/prometheus-operator.yaml: scripts/generate/vendor VERSION $(shell find jsonnet -type f)
|
|
scripts/generate/build-non-rbac-prometheus-operator.sh
|
|
|
|
example/mixin/alerts.yaml: $(JSONNET_BINARY) $(GOJSONTOYAML_BINARY)
|
|
-mkdir -p example/alerts
|
|
$(JSONNET_BINARY) jsonnet/mixin/alerts.jsonnet | $(GOJSONTOYAML_BINARY) > $@
|
|
|
|
RBAC_MANIFESTS = example/rbac/prometheus-operator/prometheus-operator-cluster-role.yaml example/rbac/prometheus-operator/prometheus-operator-cluster-role-binding.yaml example/rbac/prometheus-operator/prometheus-operator-service-account.yaml example/rbac/prometheus-operator/prometheus-operator-deployment.yaml
|
|
$(RBAC_MANIFESTS): scripts/generate/vendor VERSION $(shell find jsonnet -type f)
|
|
scripts/generate/build-rbac-prometheus-operator.sh
|
|
|
|
example/thanos/thanos.yaml: scripts/generate/vendor scripts/generate/thanos.jsonnet $(shell find jsonnet -type f)
|
|
scripts/generate/build-thanos-example.sh
|
|
|
|
example/admission-webhook: scripts/generate/vendor scripts/generate/admission-webhook.jsonnet $(shell find jsonnet -type f)
|
|
scripts/generate/build-admission-webhook-example.sh
|
|
|
|
example/alertmanager-crd-conversion: scripts/generate/vendor scripts/generate/conversion-webhook-patch-for-alermanagerconfig-crd.jsonnet $(shell find jsonnet -type f)
|
|
scripts/generate/build-conversion-webhook-patch-for-alermanagerconfig-crd.sh
|
|
|
|
FULLY_GENERATED_DOCS = Documentation/api.md Documentation/compatibility.md Documentation/operator.md
|
|
|
|
Documentation/operator.md: operator
|
|
$(MDOX_BINARY) fmt $@
|
|
|
|
Documentation/compatibility.md: pkg/operator/defaults.go
|
|
$(MDOX_BINARY) fmt $@
|
|
|
|
Documentation/api.md: $(TYPES_V1_TARGET) $(TYPES_V1ALPHA1_TARGET) $(TYPES_V1BETA1_TARGET)
|
|
$(API_DOC_GEN_BINARY) -api-dir "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/" -config "$(PWD)/scripts/docs/config.json" -template-dir "$(PWD)/scripts/docs/templates" -out-file "$(PWD)/Documentation/api.md"
|
|
|
|
##############
|
|
# Formatting #
|
|
##############
|
|
|
|
.PHONY: format
|
|
format: go-fmt jsonnet-fmt check-license shellcheck docs
|
|
|
|
.PHONY: go-fmt
|
|
go-fmt:
|
|
gofmt -s -w .
|
|
|
|
.PHONY: jsonnet-fmt
|
|
jsonnet-fmt: $(JSONNETFMT_BINARY)
|
|
find . -name *.jsonnet -or -name *.libsonnet -not -path "*/vendor/*" -print0 | xargs -0 $(JSONNETFMT_BINARY) -i
|
|
|
|
.PHONY: check-license
|
|
check-license:
|
|
./scripts/check_license.sh
|
|
|
|
.PHONY: shellcheck
|
|
shellcheck: $(SHELLCHECK_BINARY)
|
|
$(SHELLCHECK_BINARY) $(shell find . -type f -name "*.sh" -not -path "*/vendor/*")
|
|
|
|
.PHONY: check-metrics
|
|
check-metrics: $(PROMLINTER_BINARY)
|
|
$(PROMLINTER_BINARY) lint .
|
|
|
|
.PHONY: check-golang
|
|
check-golang: $(GOLANGCILINTER_BINARY)
|
|
$(GOLANGCILINTER_BINARY) run
|
|
|
|
.PHONY: fix-golang
|
|
fix-golang: $(GOLANGCILINTER_BINARY)
|
|
$(GOLANGCILINTER_BINARY) run --fix
|
|
|
|
MDOX_VALIDATE_CONFIG?=.mdox.validate.yaml
|
|
MD_FILES_TO_FORMAT=$(filter-out $(FULLY_GENERATED_DOCS), $(shell find Documentation -name "*.md")) $(filter-out ADOPTERS.md, $(shell ls *.md))
|
|
|
|
.PHONY: docs
|
|
docs: $(MDOX_BINARY)
|
|
@echo ">> formatting and local/remote link check"
|
|
GITHUB_TOKEN=$(GITHUB_TOKEN) $(MDOX_BINARY) fmt --soft-wraps -l --links.localize.address-regex="https://prometheus-operator.dev/.*" --links.validate.config-file=$(MDOX_VALIDATE_CONFIG) $(MD_FILES_TO_FORMAT)
|
|
|
|
.PHONY: check-docs
|
|
check-docs: $(MDOX_BINARY)
|
|
@echo ">> checking formatting and local/remote links"
|
|
GITHUB_TOKEN=$(GITHUB_TOKEN) $(MDOX_BINARY) fmt --soft-wraps --check -l --links.localize.address-regex="https://prometheus-operator.dev/.*" --links.validate.config-file=$(MDOX_VALIDATE_CONFIG) $(MD_FILES_TO_FORMAT)
|
|
|
|
###########
|
|
# Testing #
|
|
###########
|
|
|
|
.PHONY: test
|
|
test: test-unit test-long test-e2e
|
|
|
|
.PHONY: test-unit
|
|
test-unit:
|
|
go test -race $(TEST_RUN_ARGS) -short $(pkgs) -count=1 -v
|
|
|
|
.PHONY: test-long
|
|
test-long:
|
|
go test $(TEST_RUN_ARGS) $(pkgs) -count=1 -v
|
|
|
|
.PHONY: test-unit-update-golden
|
|
test-unit-update-golden:
|
|
./scripts/update-golden-files.sh
|
|
|
|
test/instrumented-sample-app/certs/cert.pem test/instrumented-sample-app/certs/key.pem:
|
|
cd test/instrumented-sample-app && make generate-certs
|
|
|
|
test/e2e/remote_write_certs/ca.key test/e2e/remote_write_certs/ca.crt test/e2e/remote_write_certs/client.key test/e2e/remote_write_certs/client.crt test/e2e/remote_write_certs/bad_ca.key test/e2e/remote_write_certs/bad_ca.crt test/e2e/remote_write_certs/bad_client.key test/e2e/remote_write_certs/bad_client.crt:
|
|
$(MAKE) generate-remote-write-certs
|
|
|
|
.PHONY: test-e2e
|
|
test-e2e: KUBECONFIG?=$(HOME)/.kube/config
|
|
test-e2e: test/instrumented-sample-app/certs/cert.pem test/instrumented-sample-app/certs/key.pem
|
|
go test -timeout 120m -v ./test/e2e/ $(TEST_RUN_ARGS) --kubeconfig=$(KUBECONFIG) --operator-image=$(IMAGE_OPERATOR):$(TAG) -count=1
|
|
|
|
.PHONY: test-e2e-alertmanager
|
|
test-e2e-alertmanager:
|
|
EXCLUDE_ALERTMANAGER_TESTS= EXCLUDE_PROMETHEUS_TESTS=exclude EXCLUDE_PROMETHEUS_ALL_NS_TESTS=exclude EXCLUDE_THANOSRULER_TESTS=exclude EXCLUDE_OPERATOR_UPGRADE_TESTS=exclude EXCLUDE_FEATURE_GATED_TESTS=exclude EXCLUDE_PROMETHEUS_UPGRADE_TESTS=exclude $(MAKE) test-e2e
|
|
|
|
.PHONY: test-e2e-prometheus
|
|
test-e2e-prometheus:
|
|
EXCLUDE_ALERTMANAGER_TESTS=exclude EXCLUDE_PROMETHEUS_TESTS= EXCLUDE_PROMETHEUS_ALL_NS_TESTS=exclude EXCLUDE_THANOSRULER_TESTS=exclude EXCLUDE_OPERATOR_UPGRADE_TESTS=exclude EXCLUDE_FEATURE_GATED_TESTS=exclude EXCLUDE_PROMETHEUS_UPGRADE_TESTS=exclude $(MAKE) test-e2e
|
|
|
|
.PHONY: test-e2e-prometheus-all-namespaces
|
|
test-e2e-prometheus-all-namespaces:
|
|
EXCLUDE_ALERTMANAGER_TESTS=exclude EXCLUDE_PROMETHEUS_TESTS=exclude EXCLUDE_PROMETHEUS_ALL_NS_TESTS= EXCLUDE_THANOSRULER_TESTS=exclude EXCLUDE_OPERATOR_UPGRADE_TESTS=exclude EXCLUDE_FEATURE_GATED_TESTS=exclude EXCLUDE_PROMETHEUS_UPGRADE_TESTS=exclude $(MAKE) test-e2e
|
|
|
|
.PHONY: test-e2e-thanos-ruler
|
|
test-e2e-thanos-ruler:
|
|
EXCLUDE_ALERTMANAGER_TESTS=exclude EXCLUDE_PROMETHEUS_TESTS=exclude EXCLUDE_PROMETHEUS_ALL_NS_TESTS=exclude EXCLUDE_THANOSRULER_TESTS= EXCLUDE_OPERATOR_UPGRADE_TESTS=exclude EXCLUDE_FEATURE_GATED_TESTS=exclude EXCLUDE_PROMETHEUS_UPGRADE_TESTS=exclude $(MAKE) test-e2e
|
|
|
|
.PHONY: test-e2e-operator-upgrade
|
|
test-e2e-operator-upgrade:
|
|
EXCLUDE_ALERTMANAGER_TESTS=exclude EXCLUDE_PROMETHEUS_TESTS=exclude EXCLUDE_PROMETHEUS_ALL_NS_TESTS=exclude EXCLUDE_THANOSRULER_TESTS=exclude EXCLUDE_OPERATOR_UPGRADE_TESTS= EXCLUDE_FEATURE_GATED_TESTS=exclude EXCLUDE_PROMETHEUS_UPGRADE_TESTS=exclude $(MAKE) test-e2e
|
|
|
|
.PHONY: test-e2e-prometheus-upgrade
|
|
test-e2e-prometheus-upgrade:
|
|
EXCLUDE_ALERTMANAGER_TESTS=exclude EXCLUDE_PROMETHEUS_TESTS=exclude EXCLUDE_PROMETHEUS_ALL_NS_TESTS=exclude EXCLUDE_THANOSRULER_TESTS=exclude EXCLUDE_OPERATOR_UPGRADE_TESTS=exclude EXCLUDE_FEATURE_GATED_TESTS=exclude EXCLUDE_PROMETHEUS_UPGRADE_TESTS= $(MAKE) test-e2e
|
|
|
|
.PHONY: test-e2e-feature-gates
|
|
test-e2e-feature-gates:
|
|
EXCLUDE_ALERTMANAGER_TESTS=exclude EXCLUDE_PROMETHEUS_TESTS=exclude EXCLUDE_PROMETHEUS_ALL_NS_TESTS=exclude EXCLUDE_THANOSRULER_TESTS=exclude EXCLUDE_OPERATOR_UPGRADE_TESTS=exclude EXCLUDE_FEATURE_GATED_TESTS= EXCLUDE_PROMETHEUS_UPGRADE_TESTS=exclude $(MAKE) test-e2e
|
|
|
|
.PHONY: test-e2e-images
|
|
test-e2e-images: image
|
|
ifeq (podman, $(CONTAINER_CLI))
|
|
podman save --quiet -o tmp/prometheus-operator.tar $(IMAGE_OPERATOR):$(TAG)
|
|
podman save --quiet -o tmp/prometheus-config-reloader.tar $(IMAGE_RELOADER):$(TAG)
|
|
podman save --quiet -o tmp/admission-webhook.tar $(IMAGE_WEBHOOK):$(TAG)
|
|
kind load image-archive -n $(KIND_CONTEXT) tmp/prometheus-operator.tar
|
|
kind load image-archive -n $(KIND_CONTEXT) tmp/prometheus-config-reloader.tar
|
|
kind load image-archive -n $(KIND_CONTEXT) tmp/admission-webhook.tar
|
|
else
|
|
kind load docker-image -n $(KIND_CONTEXT) $(IMAGE_OPERATOR):$(TAG)
|
|
kind load docker-image -n $(KIND_CONTEXT) $(IMAGE_RELOADER):$(TAG)
|
|
kind load docker-image -n $(KIND_CONTEXT) $(IMAGE_WEBHOOK):$(TAG)
|
|
endif
|
|
|
|
############
|
|
# Binaries #
|
|
############
|
|
|
|
$(TOOLS_BIN_DIR):
|
|
mkdir -p $(TOOLS_BIN_DIR)
|
|
|
|
$(TOOLING): $(TOOLS_BIN_DIR)
|
|
@echo Installing tools from scripts/tools.go
|
|
@cat scripts/tools.go | grep _ | awk -F'"' '{print $$2}' | GOBIN=$(TOOLS_BIN_DIR) xargs -tI % go install -mod=readonly -modfile=scripts/go.mod %
|
|
@GOBIN=$(TOOLS_BIN_DIR) go install $(GO_PKG)/cmd/po-docgen
|
|
@echo Downloading shellcheck
|
|
@cd $(TOOLS_BIN_DIR) && wget -qO- "https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.$(GOOS).x86_64.tar.xz" | tar -xJv --strip=1 shellcheck-stable/shellcheck
|
|
|
|
# generate k8s generator variable and target,
|
|
# i.e. if $(1)=informer-gen:
|
|
#
|
|
# INFORMER_GEN_BINARY=/home/user/go/bin/informer-gen
|
|
#
|
|
# /home/user/go/bin/informer-gen:
|
|
# go get -u -d k8s.io/code-generator/cmd/informer-gen
|
|
# cd /home/user/go/src/k8s.io/code-generator; git checkout release-1.14
|
|
# go install k8s.io/code-generator/cmd/informer-gen
|
|
#
|
|
define _K8S_GEN_VAR_TARGET_
|
|
$(shell echo $(1) | tr '[:lower:]' '[:upper:]' | tr '-' '_')_BINARY:=$(TOOLS_BIN_DIR)/$(1)
|
|
|
|
$(TOOLS_BIN_DIR)/$(1):
|
|
@GOBIN=$(TOOLS_BIN_DIR) go install -mod=readonly -modfile=scripts/go.mod k8s.io/code-generator/cmd/$(1)
|
|
|
|
endef
|
|
|
|
$(foreach binary,$(K8S_GEN_BINARIES),$(eval $(call _K8S_GEN_VAR_TARGET_,$(binary))))
|