1+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
2+ # https://github.com/open-telemetry/weaver #
3+ # These images are for invoking weaver #
4+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
5+
6+ # From where to resolve the containers (e.g. "otel/weaver").
7+ CONTAINER_REPOSITORY=docker.io
8+
9+ # Per container overrides for the repository resolution.
10+ WEAVER_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
11+ SEMCONVGEN_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
12+ OPA_CONTAINER_REPOSITORY=$(CONTAINER_REPOSITORY)
13+
14+ CHECK_TARGETS=install-tools markdownlint
15+
16+ # Versioned, non-qualified references to containers used in this Makefile.
17+ # These are parsed from dependencies.Dockerfile so dependabot will autoupdate
18+ # the versions of docker files we use.
19+ VERSIONED_WEAVER_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4=="weaver" {print $$2}')
20+ VERSIONED_SEMCONVGEN_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4=="semconvgen" {print $$2}')
21+ VERSIONED_OPA_CONTAINER_NO_REPO=$(shell cat dependencies.Dockerfile | awk '$$4=="opa" {print $$2}')
22+
23+ # Fully qualified references to containers used in this Makefile. These
24+ # include the container repository, so that the build will work with tools
25+ # like "podman" with a default "/etc/containers/registries.conf", where
26+ # a default respository of "docker.io" is not assumed. This is intended to
27+ # eliminate errors from podman such as:
28+ #
29+ # Error: short-name "otel/weaver:v1.2.3" did not resolve to an alias
30+ # and no unqualified-search registries are defined in "/etc/containers/registries.conf"
31+ WEAVER_CONTAINER=$(WEAVER_CONTAINER_REPOSITORY)/$(VERSIONED_WEAVER_CONTAINER_NO_REPO)
32+ SEMCONVGEN_CONTAINER=$(SEMCONVGEN_CONTAINER_REPOSITORY)/$(VERSIONED_SEMCONVGEN_CONTAINER_NO_REPO)
33+ OPA_CONTAINER=$(OPA_CONTAINER_REPOSITORY)/$(VERSIONED_OPA_CONTAINER_NO_REPO)
34+
35+ # Determine if "docker" is actually podman
36+ DOCKER_VERSION_OUTPUT := $(shell docker --version 2>&1)
37+ DOCKER_IS_PODMAN := $(shell echo $(DOCKER_VERSION_OUTPUT) | grep -c podman)
38+
39+ ifeq ($(DOCKER_IS_PODMAN),0)
40+ DOCKER_COMMAND := docker
41+ else
42+ DOCKER_COMMAND := podman
43+ endif
44+
45+ # Debug printing
46+ ifdef DEBUG
47+ $(info Docker version output: $(DOCKER_VERSION_OUTPUT))
48+ $(info Is Docker actually Podman? $(DOCKER_IS_PODMAN))
49+ $(info Using command: $(DOCKER_COMMAND))
50+ endif
51+
52+ DOCKER_RUN=$(DOCKER_COMMAND) run
53+ DOCKER_USER=$(shell id -u):$(shell id -g)
54+ DOCKER_USER_IS_HOST_USER_ARG=-u $(DOCKER_USER)
55+ ifeq ($(DOCKER_COMMAND),podman)
56+ # On podman, additional arguments are needed to make "-u" work
57+ # correctly with the host user ID and host group ID.
58+ #
59+ # Error: OCI runtime error: crun: setgroups: Invalid argument
60+ DOCKER_USER_IS_HOST_USER_ARG=--userns=keep-id -u $(DOCKER_USER)
61+ endif
62+
63+ # Generate attribute registry metadata for mdatagen.
64+ # Example uses:
65+ # make nginxplus-metadata-gen
66+ # make nginx-metadata-gen
67+ .PHONY: %-metadata-gen
68+ %-metadata-gen:
69+ $(DOCKER_RUN) --rm \
70+ $(DOCKER_USER_IS_HOST_USER_ARG) \
71+ --mount 'type=bind,source=$(PWD)/templates,target=/home/weaver/templates,readonly' \
72+ --mount 'type=bind,source=$(PWD)/catalog/$*,target=/home/weaver/source/,readonly' \
73+ --mount 'type=bind,source=$(PWD)/internal/collector,target=/home/weaver/target' \
74+ $(WEAVER_CONTAINER) registry generate \
75+ --registry=/home/weaver/source \
76+ --templates=/home/weaver/templates \
77+ metadata \
78+ /home/weaver/target/$*receiver
79+ cat $(PWD)/internal/collector/$*receiver/*_metadata.yaml > $(PWD)/internal/collector/$*receiver/metadata.yaml
80+ rm $(PWD)/internal/collector/$*receiver/*_metadata.yaml
81+ @echo "🗃️ Generating go files"
82+ @$(GOGEN) $(PWD)/internal/collector/$*receiver/...
0 commit comments