Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/tools/make/packaging.mk
4095 views
# Makefile.packaging adds release-packaging-specific targets.

PARENT_MAKEFILE := $(firstword $(MAKEFILE_LIST))

.PHONY: dist clean-dist
dist: dist-agent-binaries dist-agent-flow-binaries dist-agentctl-binaries dist-agent-packages dist-agent-flow-packages dist-agent-installer dist-agent-flow-installer

clean-dist:
	rm -rf dist dist.temp

# Used for passing through environment variables to sub-makes.
#
# NOTE(rfratto): This *must* use `=` instead of `:=` so it's expanded at
# reference time. Earlier iterations of this file had each target explicitly
# list these, but it's too easy to forget to set on so this is used to ensure
# everything needed is always passed through.
PACKAGING_VARS = RELEASE_BUILD=1 GO_TAGS="$(GO_TAGS)" GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM)

#
# agent release binaries
#

dist-agent-binaries: dist/grafana-agent-linux-amd64       \
                     dist/grafana-agent-linux-arm64       \
                     dist/grafana-agent-linux-ppc64le     \
                     dist/grafana-agent-linux-s390x       \
                     dist/grafana-agent-darwin-amd64      \
                     dist/grafana-agent-darwin-arm64      \
                     dist/grafana-agent-windows-amd64.exe \
                     dist/grafana-agent-freebsd-amd64

dist/grafana-agent-linux-amd64: GO_TAGS += builtinassets promtail_journal_enabled
dist/grafana-agent-linux-amd64: GOOS    := linux
dist/grafana-agent-linux-amd64: GOARCH  := amd64
dist/grafana-agent-linux-amd64: generate-ui
	$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

dist/grafana-agent-linux-arm64: GO_TAGS += builtinassets promtail_journal_enabled
dist/grafana-agent-linux-arm64: GOOS    := linux
dist/grafana-agent-linux-arm64: GOARCH  := arm64
dist/grafana-agent-linux-arm64: generate-ui
	$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

dist/grafana-agent-linux-ppc64le: GO_TAGS += builtinassets promtail_journal_enabled
dist/grafana-agent-linux-ppc64le: GOOS    := linux
dist/grafana-agent-linux-ppc64le: GOARCH  := ppc64le
dist/grafana-agent-linux-ppc64le: generate-ui
	$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

dist/grafana-agent-linux-s390x: GO_TAGS += builtinassets promtail_journal_enabled
dist/grafana-agent-linux-s390x: GOOS    := linux
dist/grafana-agent-linux-s390x: GOARCH  := ppc64le
dist/grafana-agent-linux-s390x: generate-ui
	$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

dist/grafana-agent-darwin-amd64: GO_TAGS += builtinassets
dist/grafana-agent-darwin-amd64: GOOS    := darwin
dist/grafana-agent-darwin-amd64: GOARCH  := amd64
dist/grafana-agent-darwin-amd64: generate-ui
	$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

dist/grafana-agent-darwin-arm64: GO_TAGS += builtinassets
dist/grafana-agent-darwin-arm64: GOOS    := darwin
dist/grafana-agent-darwin-arm64: GOARCH  := arm64
dist/grafana-agent-darwin-arm64: generate-ui
	$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

dist/grafana-agent-windows-amd64.exe: GO_TAGS += builtinassets
dist/grafana-agent-windows-amd64.exe: GOOS    := windows
dist/grafana-agent-windows-amd64.exe: GOARCH  := amd64
dist/grafana-agent-windows-amd64.exe: generate-ui
	$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

dist/grafana-agent-freebsd-amd64: GO_TAGS += builtinassets
dist/grafana-agent-freebsd-amd64: GOOS    := freebsd
dist/grafana-agent-freebsd-amd64: GOARCH  := amd64
dist/grafana-agent-freebsd-amd64: generate-ui
	$(PACKAGING_VARS) AGEAGENT_BINARYNT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent

#
# agentctl release binaries.
#

dist-agentctl-binaries: dist/grafana-agentctl-linux-amd64       \
                        dist/grafana-agentctl-linux-arm64       \
                        dist/grafana-agentctl-linux-ppc64le     \
                        dist/grafana-agentctl-linux-s390x       \
                        dist/grafana-agentctl-darwin-amd64      \
                        dist/grafana-agentctl-darwin-arm64      \
                        dist/grafana-agentctl-windows-amd64.exe \
                        dist/grafana-agentctl-freebsd-amd64

dist/grafana-agentctl-linux-amd64: GOOS    := linux
dist/grafana-agentctl-linux-amd64: GOARCH  := amd64
dist/grafana-agentctl-linux-amd64:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

dist/grafana-agentctl-linux-arm64: GOOS   := linux
dist/grafana-agentctl-linux-arm64: GOARCH := arm64
dist/grafana-agentctl-linux-arm64:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

dist/grafana-agentctl-linux-ppc64le: GOOS   := linux
dist/grafana-agentctl-linux-ppc64le: GOARCH := ppc64le
dist/grafana-agentctl-linux-ppc64le:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

dist/grafana-agentctl-linux-s390x: GOOS   := linux
dist/grafana-agentctl-linux-s390x: GOARCH := s390x
dist/grafana-agentctl-linux-s390x:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

dist/grafana-agentctl-darwin-amd64: GOOS   := darwin
dist/grafana-agentctl-darwin-amd64: GOARCH := amd64
dist/grafana-agentctl-darwin-amd64:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

dist/grafana-agentctl-darwin-arm64: GOOS   := darwin
dist/grafana-agentctl-darwin-arm64: GOARCH := arm64
dist/grafana-agentctl-darwin-arm64:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

dist/grafana-agentctl-windows-amd64.exe: GOOS   := windows
dist/grafana-agentctl-windows-amd64.exe: GOARCH := amd64
dist/grafana-agentctl-windows-amd64.exe:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

dist/grafana-agentctl-freebsd-amd64: GOOS    := freebsd
dist/grafana-agentctl-freebsd-amd64: GOARCH  := amd64
dist/grafana-agentctl-freebsd-amd64:
	$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl

#
# agent-flow release binaries
#
# agent-flow release binaries are intermediate build assets used for producing
# Flow-specific system packages. As such, they are built in a dist.temp
# directory instead of the normal dist directory.
#
# Only targets needed for system packages are used here.
#

dist-agent-flow-binaries: dist.temp/grafana-agent-flow-linux-amd64       \
                          dist.temp/grafana-agent-flow-linux-arm64       \
                          dist.temp/grafana-agent-flow-linux-ppc64le     \
                          dist.temp/grafana-agent-flow-linux-s390x       \
                          dist.temp/grafana-agent-flow-windows-amd64.exe

dist.temp/grafana-agent-flow-linux-amd64: GO_TAGS += builtinassets promtail_journal_enabled
dist.temp/grafana-agent-flow-linux-amd64: GOOS    := linux
dist.temp/grafana-agent-flow-linux-amd64: GOARCH  := amd64
dist.temp/grafana-agent-flow-linux-amd64: generate-ui
	$(PACKAGING_VARS) FLOW_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent-flow

dist.temp/grafana-agent-flow-linux-arm64: GO_TAGS += builtinassets promtail_journal_enabled
dist.temp/grafana-agent-flow-linux-arm64: GOOS    := linux
dist.temp/grafana-agent-flow-linux-arm64: GOARCH  := arm64
dist.temp/grafana-agent-flow-linux-arm64: generate-ui
	$(PACKAGING_VARS) FLOW_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent-flow

dist.temp/grafana-agent-flow-linux-ppc64le: GO_TAGS += builtinassets promtail_journal_enabled
dist.temp/grafana-agent-flow-linux-ppc64le: GOOS    := linux
dist.temp/grafana-agent-flow-linux-ppc64le: GOARCH  := ppc64le
dist.temp/grafana-agent-flow-linux-ppc64le: generate-ui
	$(PACKAGING_VARS) FLOW_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent-flow

dist.temp/grafana-agent-flow-linux-s390x: GO_TAGS += builtinassets promtail_journal_enabled
dist.temp/grafana-agent-flow-linux-s390x: GOOS    := linux
dist.temp/grafana-agent-flow-linux-s390x: GOARCH  := ppc64le
dist.temp/grafana-agent-flow-linux-s390x: generate-ui
	$(PACKAGING_VARS) FLOW_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent-flow

dist.temp/grafana-agent-flow-windows-amd64.exe: GO_TAGS += builtinassets
dist.temp/grafana-agent-flow-windows-amd64.exe: GOOS    := windows
dist.temp/grafana-agent-flow-windows-amd64.exe: GOARCH  := amd64
dist.temp/grafana-agent-flow-windows-amd64.exe: generate-ui
	$(PACKAGING_VARS) FLOW_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent-flow

#
# agent-service release binaries.
#
# agent-service release binaries are intermediate build assets used for
# producing Flow-specific system packages. As such, they are built in a
# dist.temp directory instead of the normal dist directory.
#
# Only targets needed for system packages are used here.
#

dist-agent-service-binaries: dist.temp/grafana-agent-service-windows-amd64.exe

dist.temp/grafana-agent-service-windows-amd64.exe: GO_TAGS += builtinassets
dist.temp/grafana-agent-service-windows-amd64.exe: GOOS    := windows
dist.temp/grafana-agent-service-windows-amd64.exe: GOARCH  := amd64
dist.temp/grafana-agent-service-windows-amd64.exe: generate-ui
	$(PACKAGING_VARS) SERVICE_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent-service


#
# DEB and RPM grafana-agent packages.
#

AGENT_ENVIRONMENT_FILE_rpm := /etc/sysconfig/grafana-agent
AGENT_ENVIRONMENT_FILE_deb := /etc/default/grafana-agent

# generate_agent_fpm(deb|rpm, package arch, agent arch, output file)
define generate_agent_fpm =
	fpm -s dir -v $(AGENT_PACKAGE_VERSION) -a $(2) \
		-n grafana-agent --iteration $(AGENT_PACKAGE_RELEASE) -f \
		--log error \
		--license "Apache 2.0" \
		--vendor "Grafana Labs" \
		--url "https://github.com/grafana/agent" \
		-t $(1) \
		--after-install packaging/grafana-agent/$(1)/control/postinst \
		--before-remove packaging/grafana-agent/$(1)/control/prerm \
		--config-files /etc/grafana-agent.yaml \
		--config-files $(AGENT_ENVIRONMENT_FILE_$(1)) \
		--rpm-rpmbuild-define "_build_id_links none" \
		--package $(4) \
			dist/grafana-agent-linux-$(3)=/usr/bin/grafana-agent \
			dist/grafana-agentctl-linux-$(3)=/usr/bin/grafana-agentctl \
			packaging/grafana-agent/grafana-agent.yaml=/etc/grafana-agent.yaml \
			packaging/grafana-agent/environment-file=$(AGENT_ENVIRONMENT_FILE_$(1)) \
			packaging/grafana-agent/$(1)/grafana-agent.service=/usr/lib/systemd/system/grafana-agent.service
endef

AGENT_PACKAGE_VERSION := $(patsubst v%,%,$(VERSION))
AGENT_PACKAGE_RELEASE := 1
AGENT_PACKAGE_PREFIX  := dist/grafana-agent-$(AGENT_PACKAGE_VERSION)-$(AGENT_PACKAGE_RELEASE)

.PHONY: dist-agent-packages
dist-agent-packages: dist-agent-packages-amd64   \
                     dist-agent-packages-arm64   \
                     dist-agent-packages-ppc64le \
                     dist-agent-packages-s390x

.PHONY: dist-agent-packages-amd64
dist-agent-packages-amd64: dist/grafana-agent-linux-amd64 dist/grafana-agentctl-linux-amd64
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_agent_fpm,deb,amd64,amd64,$(AGENT_PACKAGE_PREFIX).amd64.deb)
	$(call generate_agent_fpm,rpm,x86_64,amd64,$(AGENT_PACKAGE_PREFIX).amd64.rpm)
endif

.PHONY: dist-agent-packages-arm64
dist-agent-packages-arm64: dist/grafana-agent-linux-arm64 dist/grafana-agentctl-linux-arm64
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_agent_fpm,deb,arm64,arm64,$(AGENT_PACKAGE_PREFIX).arm64.deb)
	$(call generate_agent_fpm,rpm,aarch64,arm64,$(AGENT_PACKAGE_PREFIX).arm64.rpm)
endif

.PHONY: dist-agent-packages-ppc64le
dist-agent-packages-ppc64le: dist/grafana-agent-linux-ppc64le dist/grafana-agentctl-linux-ppc64le
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_agent_fpm,deb,ppc64el,ppc64le,$(AGENT_PACKAGE_PREFIX).ppc64el.deb)
	$(call generate_agent_fpm,rpm,ppc64le,ppc64le,$(AGENT_PACKAGE_PREFIX).ppc64le.rpm)
endif

.PHONY: dist-agent-packages-s390x
dist-agent-packages-s390x: dist/grafana-agent-linux-s390x dist/grafana-agentctl-linux-s390x
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_agent_fpm,deb,s390x,s390x,$(AGENT_PACKAGE_PREFIX).s390x.deb)
	$(call generate_agent_fpm,rpm,s390x,s390x,$(AGENT_PACKAGE_PREFIX).s390x.rpm)
endif

#
# DEB and RPM grafana-agent-flow packages.
#

FLOW_ENVIRONMENT_FILE_rpm := /etc/sysconfig/grafana-agent-flow
FLOW_ENVIRONMENT_FILE_deb := /etc/default/grafana-agent-flow

# generate_flow_fpm(deb|rpm, package arch, agent arch, output file)
define generate_flow_fpm =
	fpm -s dir -v $(FLOW_PACKAGE_VERSION) -a $(2) \
		-n grafana-agent-flow --iteration $(FLOW_PACKAGE_RELEASE) -f \
		--log error \
		--license "Apache 2.0" \
		--vendor "Grafana Labs" \
		--url "https://github.com/grafana/agent" \
		-t $(1) \
		--after-install packaging/grafana-agent-flow/$(1)/control/postinst \
		--before-remove packaging/grafana-agent-flow/$(1)/control/prerm \
		--config-files /etc/grafana-agent-flow.river \
		--config-files $(FLOW_ENVIRONMENT_FILE_$(1)) \
		--rpm-rpmbuild-define "_build_id_links none" \
		--package $(4) \
			dist.temp/grafana-agent-flow-linux-$(3)=/usr/bin/grafana-agent-flow \
			packaging/grafana-agent-flow/grafana-agent-flow.river=/etc/grafana-agent-flow.river \
			packaging/grafana-agent-flow/environment-file=$(FLOW_ENVIRONMENT_FILE_$(1)) \
			packaging/grafana-agent-flow/$(1)/grafana-agent-flow.service=/usr/lib/systemd/system/grafana-agent-flow.service
endef

FLOW_PACKAGE_VERSION := $(patsubst v%,%,$(VERSION))
FLOW_PACKAGE_RELEASE := 1
FLOW_PACKAGE_PREFIX  := dist/grafana-agent-flow-$(AGENT_PACKAGE_VERSION)-$(AGENT_PACKAGE_RELEASE)

.PHONY: dist-agent-flow-packages
dist-agent-flow-packages: dist-agent-flow-packages-amd64   \
                          dist-agent-flow-packages-arm64   \
                          dist-agent-flow-packages-ppc64le \
                          dist-agent-flow-packages-s390x

.PHONY: dist-agent-flow-packages-amd64
dist-agent-flow-packages-amd64: dist.temp/grafana-agent-flow-linux-amd64
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_flow_fpm,deb,amd64,amd64,$(FLOW_PACKAGE_PREFIX).amd64.deb)
	$(call generate_flow_fpm,rpm,x86_64,amd64,$(FLOW_PACKAGE_PREFIX).amd64.rpm)
endif

.PHONY: dist-agent-flow-packages-arm64
dist-agent-flow-packages-arm64: dist.temp/grafana-agent-flow-linux-arm64
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_flow_fpm,deb,arm64,arm64,$(FLOW_PACKAGE_PREFIX).arm64.deb)
	$(call generate_flow_fpm,rpm,aarch64,arm64,$(FLOW_PACKAGE_PREFIX).arm64.rpm)
endif

.PHONY: dist-agent-flow-packages-ppc64le
dist-agent-flow-packages-ppc64le: dist.temp/grafana-agent-flow-linux-ppc64le
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_flow_fpm,deb,ppc64el,ppc64le,$(FLOW_PACKAGE_PREFIX).ppc64el.deb)
	$(call generate_flow_fpm,rpm,ppc64le,ppc64le,$(FLOW_PACKAGE_PREFIX).ppc64le.rpm)
endif

.PHONY: dist-agent-flow-packages-s390x
dist-agent-flow-packages-s390x: dist.temp/grafana-agent-flow-linux-s390x
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	$(call generate_flow_fpm,deb,s390x,s390x,$(FLOW_PACKAGE_PREFIX).s390x.deb)
	$(call generate_flow_fpm,rpm,s390x,s390x,$(FLOW_PACKAGE_PREFIX).s390x.rpm)
endif

#
# Windows installer
#

# TODO(rfratto): update the install_script.nsis so we don't need to copy assets
# over into the packaging/windows folder.
.PHONY: dist-agent-installer
dist-agent-installer: dist/grafana-agent-windows-amd64.exe
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	cp ./dist/grafana-agent-windows-amd64.exe ./packaging/grafana-agent/windows
	cp LICENSE ./packaging/grafana-agent/windows
	makensis -V4 -DVERSION=$(VERSION) -DOUT="../../../dist/grafana-agent-installer.exe" ./packaging/grafana-agent/windows/install_script.nsis
endif

.PHONY: dist-agent-flow-installer
dist-agent-flow-installer: dist.temp/grafana-agent-flow-windows-amd64.exe dist.temp/grafana-agent-service-windows-amd64.exe
ifeq ($(USE_CONTAINER),1)
	$(RERUN_IN_CONTAINER)
else
	makensis -V4 -DVERSION=$(VERSION) -DOUT="../../../dist/grafana-agent-flow-installer.exe" ./packaging/grafana-agent-flow/windows/install_script.nsis
endif