github.com/influxdata/telegraf@v1.30.3/Makefile (about) 1 ifneq (,$(filter $(OS),Windows_NT Windows)) 2 EXEEXT=.exe 3 endif 4 5 cat := $(if $(filter $(OS),sh.exe),type,cat) 6 next_version := $(shell $(cat) build_version.txt) 7 tag := $(shell git describe --exact-match --tags 2>/dev/null) 8 9 branch := $(shell git rev-parse --abbrev-ref HEAD) 10 commit := $(shell git rev-parse --short=8 HEAD) 11 12 ifdef NIGHTLY 13 version := $(next_version) 14 rpm_version := nightly 15 rpm_iteration := 0 16 deb_version := nightly 17 deb_iteration := 0 18 tar_version := nightly 19 else ifeq ($(tag),) 20 version := $(next_version) 21 rpm_version := $(version)~$(commit)-0 22 rpm_iteration := 0 23 deb_version := $(version)~$(commit)-0 24 deb_iteration := 0 25 tar_version := $(version)~$(commit) 26 else ifneq ($(findstring -rc,$(tag)),) 27 version := $(word 1,$(subst -, ,$(tag))) 28 version := $(version:v%=%) 29 rc := $(word 2,$(subst -, ,$(tag))) 30 rpm_version := $(version)-0.$(rc) 31 rpm_iteration := 0.$(subst rc,,$(rc)) 32 deb_version := $(version)~$(rc)-1 33 deb_iteration := 0 34 tar_version := $(version)~$(rc) 35 else 36 version := $(tag:v%=%) 37 rpm_version := $(version)-1 38 rpm_iteration := 1 39 deb_version := $(version)-1 40 deb_iteration := 1 41 tar_version := $(version) 42 endif 43 44 MAKEFLAGS += --no-print-directory 45 GOOS ?= $(shell go env GOOS) 46 GOARCH ?= $(shell go env GOARCH) 47 HOSTGO := env -u GOOS -u GOARCH -u GOARM -- go 48 INTERNAL_PKG=github.com/influxdata/telegraf/internal 49 LDFLAGS := $(LDFLAGS) -X $(INTERNAL_PKG).Commit=$(commit) -X $(INTERNAL_PKG).Branch=$(branch) 50 ifneq ($(tag),) 51 LDFLAGS += -X $(INTERNAL_PKG).Version=$(version) 52 else 53 LDFLAGS += -X $(INTERNAL_PKG).Version=$(version)-$(commit) 54 endif 55 56 # Go built-in race detector works only for 64 bits architectures. 57 ifneq ($(GOARCH), 386) 58 race_detector := -race 59 endif 60 61 62 GOFILES ?= $(shell git ls-files '*.go') 63 GOFMT ?= $(shell gofmt -l -s $(filter-out plugins/parsers/influx/machine.go, $(GOFILES))) 64 65 prefix ?= /usr/local 66 bindir ?= $(prefix)/bin 67 sysconfdir ?= $(prefix)/etc 68 localstatedir ?= $(prefix)/var 69 pkgdir ?= build/dist 70 71 .PHONY: all 72 all: deps docs telegraf 73 74 .PHONY: help 75 help: 76 @echo 'Targets:' 77 @echo ' all - download dependencies and compile telegraf binary' 78 @echo ' config - generate the config from current repo state' 79 @echo ' deps - download dependencies' 80 @echo ' docs - embed sample-configurations into READMEs' 81 @echo ' telegraf - compile telegraf binary' 82 @echo ' test - run short unit tests' 83 @echo ' fmt - format source files' 84 @echo ' tidy - tidy go modules' 85 @echo ' lint - run linter' 86 @echo ' lint-branch - run linter on changes in current branch since master' 87 @echo ' lint-install - install linter' 88 @echo ' check-deps - check docs/LICENSE_OF_DEPENDENCIES.md' 89 @echo ' clean - delete build artifacts' 90 @echo ' package - build all supported packages, override include_packages to only build a subset' 91 @echo ' e.g.: make package include_packages="amd64.deb"' 92 @echo '' 93 @echo 'Possible values for include_packages variable' 94 @$(foreach package,$(include_packages),echo " $(package)";) 95 @echo '' 96 @echo 'Resulting package name format (where arch will be the arch of the package):' 97 @echo ' telegraf_$(deb_version)_arch.deb' 98 @echo ' telegraf-$(rpm_version).arch.rpm' 99 @echo ' telegraf-$(tar_version)_arch.tar.gz' 100 @echo ' telegraf-$(tar_version)_arch.zip' 101 102 103 .PHONY: deps 104 deps: 105 go mod download -x 106 107 .PHONY: version 108 version: 109 @echo $(version)-$(commit) 110 111 build_tools: 112 $(HOSTGO) build -o ./tools/custom_builder/custom_builder$(EXEEXT) ./tools/custom_builder 113 $(HOSTGO) build -o ./tools/license_checker/license_checker$(EXEEXT) ./tools/license_checker 114 $(HOSTGO) build -o ./tools/readme_config_includer/generator$(EXEEXT) ./tools/readme_config_includer/generator.go 115 $(HOSTGO) build -o ./tools/config_includer/generator$(EXEEXT) ./tools/config_includer/generator.go 116 $(HOSTGO) build -o ./tools/readme_linter/readme_linter$(EXEEXT) ./tools/readme_linter 117 118 embed_readme_%: 119 go generate -run="tools/config_includer/generator" ./plugins/$*/... 120 go generate -run="tools/readme_config_includer/generator" ./plugins/$*/... 121 122 .PHONY: config 123 config: 124 @echo "generating default config" 125 go run ./cmd/telegraf config > etc/telegraf.conf 126 127 .PHONY: docs 128 docs: build_tools embed_readme_inputs embed_readme_outputs embed_readme_processors embed_readme_aggregators embed_readme_secretstores 129 130 .PHONY: build 131 build: 132 CGO_ENABLED=0 go build -tags "$(BUILDTAGS)" -ldflags "$(LDFLAGS)" ./cmd/telegraf 133 134 .PHONY: telegraf 135 telegraf: build 136 137 # Used by dockerfile builds 138 .PHONY: go-install 139 go-install: 140 go install -mod=mod -ldflags "-w -s $(LDFLAGS)" ./cmd/telegraf 141 142 .PHONY: test 143 test: 144 go test -short $(race_detector) ./... 145 146 .PHONY: test-integration 147 test-integration: 148 go test -run Integration $(race_detector) ./... 149 150 .PHONY: fmt 151 fmt: 152 @gofmt -s -w $(filter-out plugins/parsers/influx/machine.go, $(GOFILES)) 153 154 .PHONY: fmtcheck 155 fmtcheck: 156 @if [ ! -z "$(GOFMT)" ]; then \ 157 echo "[ERROR] gofmt has found errors in the following files:" ; \ 158 echo "$(GOFMT)" ; \ 159 echo "" ;\ 160 echo "Run make fmt to fix them." ; \ 161 exit 1 ;\ 162 fi 163 164 .PHONY: vet 165 vet: 166 @echo 'go vet $$(go list ./... | grep -v ./plugins/parsers/influx)' 167 @go vet $$(go list ./... | grep -v ./plugins/parsers/influx) ; if [ $$? -ne 0 ]; then \ 168 echo ""; \ 169 echo "go vet has found suspicious constructs. Please remediate any reported errors"; \ 170 echo "to fix them before submitting code for review."; \ 171 exit 1; \ 172 fi 173 174 .PHONY: lint-install 175 lint-install: 176 @echo "Installing golangci-lint" 177 go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.58.0 178 179 @echo "Installing markdownlint" 180 npm install -g markdownlint-cli 181 182 .PHONY: lint 183 lint: 184 @which golangci-lint >/dev/null 2>&1 || { \ 185 echo "golangci-lint not found, please run: make lint-install"; \ 186 exit 1; \ 187 } 188 golangci-lint run 189 190 @which markdownlint >/dev/null 2>&1 || { \ 191 echo "markdownlint not found, please run: make lint-install"; \ 192 exit 1; \ 193 } 194 markdownlint . 195 196 .PHONY: lint-branch 197 lint-branch: 198 @which golangci-lint >/dev/null 2>&1 || { \ 199 echo "golangci-lint not found, please run: make lint-install"; \ 200 exit 1; \ 201 } 202 golangci-lint run 203 204 .PHONY: tidy 205 tidy: 206 go mod verify 207 go mod tidy 208 @if ! git diff --quiet go.mod go.sum; then \ 209 echo "please run go mod tidy and check in changes, you might have to use the same version of Go as the CI"; \ 210 exit 1; \ 211 fi 212 213 .PHONY: check 214 check: fmtcheck vet 215 216 .PHONY: test-all 217 test-all: fmtcheck vet 218 go test $(race_detector) ./... 219 220 .PHONY: check-deps 221 check-deps: 222 ./scripts/check-deps.sh 223 224 .PHONY: clean 225 clean: 226 rm -f telegraf 227 rm -f telegraf.exe 228 rm -f etc/telegraf.conf 229 rm -rf build 230 rm -rf cmd/telegraf/resource.syso 231 rm -rf cmd/telegraf/versioninfo.json 232 rm -rf tools/config_includer/generator 233 rm -rf tools/config_includer/generator.exe 234 rm -rf tools/custom_builder/custom_builder 235 rm -rf tools/custom_builder/custom_builder.exe 236 rm -rf tools/license_checker/license_checker 237 rm -rf tools/license_checker/license_checker.exe 238 rm -rf tools/package_incus_test/package_incus_test 239 rm -rf tools/package_incus_test/package_incus_test.exe 240 rm -rf tools/readme_config_includer/generator 241 rm -rf tools/readme_config_includer/generator.exe 242 rm -rf tools/readme_linter/readme_linter 243 rm -rf tools/readme_linter/readme_linter.exe 244 245 .PHONY: docker-image 246 docker-image: 247 docker build -f scripts/buster.docker -t "telegraf:$(commit)" . 248 249 plugins/parsers/influx/machine.go: plugins/parsers/influx/machine.go.rl 250 ragel -Z -G2 $^ -o $@ 251 252 .PHONY: ci 253 ci: 254 docker build -t quay.io/influxdb/telegraf-ci:1.22.3 - < scripts/ci.docker 255 docker push quay.io/influxdb/telegraf-ci:1.22.3 256 257 .PHONY: install 258 install: $(buildbin) 259 @mkdir -pv $(DESTDIR)$(bindir) 260 @mkdir -pv $(DESTDIR)$(sysconfdir) 261 @mkdir -pv $(DESTDIR)$(localstatedir) 262 @if [ $(GOOS) != "windows" ]; then mkdir -pv $(DESTDIR)$(sysconfdir)/logrotate.d; fi 263 @if [ $(GOOS) != "windows" ]; then mkdir -pv $(DESTDIR)$(localstatedir)/log/telegraf; fi 264 @if [ $(GOOS) != "windows" ]; then mkdir -pv $(DESTDIR)$(sysconfdir)/telegraf/telegraf.d; fi 265 @cp -fv $(buildbin) $(DESTDIR)$(bindir) 266 @if [ $(GOOS) != "windows" ]; then cp -fv etc/telegraf.conf $(DESTDIR)$(sysconfdir)/telegraf/telegraf.conf$(conf_suffix); fi 267 @if [ $(GOOS) != "windows" ]; then cp -fv etc/logrotate.d/telegraf $(DESTDIR)$(sysconfdir)/logrotate.d; fi 268 @if [ $(GOOS) = "windows" ]; then cp -fv etc/telegraf.conf $(DESTDIR)/telegraf.conf; fi 269 @if [ $(GOOS) = "linux" ]; then mkdir -pv $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi 270 @if [ $(GOOS) = "linux" ]; then cp -fv scripts/telegraf.service $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi 271 @if [ $(GOOS) = "linux" ]; then cp -fv scripts/init.sh $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi 272 273 # Telegraf build per platform. This improves package performance by sharing 274 # the bin between deb/rpm/tar packages over building directly into the package 275 # directory. 276 .PHONY: $(buildbin) 277 $(buildbin): 278 echo $(GOOS) 279 @mkdir -pv $(dir $@) 280 CGO_ENABLED=0 go build -o $(dir $@) -tags "$(BUILDTAGS)" -ldflags "$(LDFLAGS)" ./cmd/telegraf 281 282 # Define packages Telegraf supports, organized by architecture with a rule to echo the list to limit include_packages 283 # e.g. make package include_packages="$(make amd64)" 284 mips += linux_mips.tar.gz mips.deb 285 .PHONY: mips 286 mips: 287 @ echo $(mips) 288 mipsel += mipsel.deb linux_mipsel.tar.gz 289 .PHONY: mipsel 290 mipsel: 291 @ echo $(mipsel) 292 loong64 += linux_loong64.tar.gz loong64.deb loong64.rpm 293 .PHONY: loong64 294 loong64: 295 @ echo $(loong64) 296 arm64 += linux_arm64.tar.gz arm64.deb aarch64.rpm 297 .PHONY: arm64 298 arm64: 299 @ echo $(arm64) 300 amd64 += freebsd_amd64.tar.gz linux_amd64.tar.gz amd64.deb x86_64.rpm 301 .PHONY: amd64 302 amd64: 303 @ echo $(amd64) 304 armel += linux_armel.tar.gz armel.rpm armel.deb 305 .PHONY: armel 306 armel: 307 @ echo $(armel) 308 armhf += linux_armhf.tar.gz freebsd_armv7.tar.gz armhf.deb armv6hl.rpm 309 .PHONY: armhf 310 armhf: 311 @ echo $(armhf) 312 s390x += linux_s390x.tar.gz s390x.deb s390x.rpm 313 .PHONY: riscv64 314 riscv64: 315 @ echo $(riscv64) 316 riscv64 += linux_riscv64.tar.gz riscv64.rpm riscv64.deb 317 .PHONY: s390x 318 s390x: 319 @ echo $(s390x) 320 ppc64le += linux_ppc64le.tar.gz ppc64le.rpm ppc64el.deb 321 .PHONY: ppc64le 322 ppc64le: 323 @ echo $(ppc64le) 324 i386 += freebsd_i386.tar.gz i386.deb linux_i386.tar.gz i386.rpm 325 .PHONY: i386 326 i386: 327 @ echo $(i386) 328 windows += windows_i386.zip windows_amd64.zip windows_arm64.zip 329 .PHONY: windows 330 windows: 331 @ echo $(windows) 332 darwin-amd64 += darwin_amd64.tar.gz 333 .PHONY: darwin-amd64 334 darwin-amd64: 335 @ echo $(darwin-amd64) 336 337 darwin-arm64 += darwin_arm64.tar.gz 338 .PHONY: darwin-arm64 339 darwin-arm64: 340 @ echo $(darwin-arm64) 341 342 include_packages := $(mips) $(mipsel) $(arm64) $(amd64) $(armel) $(armhf) $(riscv64) $(loong64) $(s390x) $(ppc64le) $(i386) $(windows) $(darwin-amd64) $(darwin-arm64) 343 344 .PHONY: package 345 package: docs config $(include_packages) 346 347 .PHONY: $(include_packages) 348 $(include_packages): 349 if [ "$(suffix $@)" = ".zip" ]; then go generate cmd/telegraf/telegraf_windows.go; fi 350 351 @$(MAKE) install 352 @mkdir -p $(pkgdir) 353 354 @if [ "$(suffix $@)" = ".rpm" ]; then \ 355 echo "# DO NOT EDIT OR REMOVE" > $(DESTDIR)$(sysconfdir)/telegraf/telegraf.d/.ignore; \ 356 echo "# This file prevents the rpm from changing permissions on this directory" >> $(DESTDIR)$(sysconfdir)/telegraf/telegraf.d/.ignore; \ 357 fpm --force \ 358 --log info \ 359 --architecture $(basename $@) \ 360 --input-type dir \ 361 --output-type rpm \ 362 --vendor InfluxData \ 363 --url https://github.com/influxdata/telegraf \ 364 --license MIT \ 365 --maintainer support@influxdb.com \ 366 --config-files /etc/telegraf/telegraf.conf \ 367 --config-files /etc/telegraf/telegraf.d/.ignore \ 368 --config-files /etc/logrotate.d/telegraf \ 369 --after-install scripts/rpm/post-install.sh \ 370 --before-install scripts/rpm/pre-install.sh \ 371 --after-remove scripts/rpm/post-remove.sh \ 372 --description "Plugin-driven server agent for reporting metrics into InfluxDB." \ 373 --depends coreutils \ 374 --rpm-digest sha256 \ 375 --rpm-posttrans scripts/rpm/post-install.sh \ 376 --rpm-os ${GOOS} \ 377 --rpm-tag "Requires(pre): /usr/sbin/useradd" \ 378 --name telegraf \ 379 --version $(version) \ 380 --iteration $(rpm_iteration) \ 381 --chdir $(DESTDIR) \ 382 --package $(pkgdir)/telegraf-$(rpm_version).$@ ;\ 383 elif [ "$(suffix $@)" = ".deb" ]; then \ 384 fpm --force \ 385 --log info \ 386 --architecture $(basename $@) \ 387 --input-type dir \ 388 --output-type deb \ 389 --vendor InfluxData \ 390 --url https://github.com/influxdata/telegraf \ 391 --license MIT \ 392 --maintainer support@influxdb.com \ 393 --config-files /etc/telegraf/telegraf.conf.sample \ 394 --config-files /etc/logrotate.d/telegraf \ 395 --after-install scripts/deb/post-install.sh \ 396 --before-install scripts/deb/pre-install.sh \ 397 --after-remove scripts/deb/post-remove.sh \ 398 --before-remove scripts/deb/pre-remove.sh \ 399 --description "Plugin-driven server agent for reporting metrics into InfluxDB." \ 400 --name telegraf \ 401 --version $(version) \ 402 --iteration $(deb_iteration) \ 403 --chdir $(DESTDIR) \ 404 --package $(pkgdir)/telegraf_$(deb_version)_$@ ;\ 405 elif [ "$(suffix $@)" = ".zip" ]; then \ 406 (cd $(dir $(DESTDIR)) && zip -r - ./*) > $(pkgdir)/telegraf-$(tar_version)_$@ ;\ 407 elif [ "$(suffix $@)" = ".gz" ]; then \ 408 tar --owner 0 --group 0 -czvf $(pkgdir)/telegraf-$(tar_version)_$@ -C $(dir $(DESTDIR)) . ;\ 409 fi 410 411 amd64.deb x86_64.rpm linux_amd64.tar.gz: export GOOS := linux 412 amd64.deb x86_64.rpm linux_amd64.tar.gz: export GOARCH := amd64 413 414 i386.deb i386.rpm linux_i386.tar.gz: export GOOS := linux 415 i386.deb i386.rpm linux_i386.tar.gz: export GOARCH := 386 416 417 armel.deb armel.rpm linux_armel.tar.gz: export GOOS := linux 418 armel.deb armel.rpm linux_armel.tar.gz: export GOARCH := arm 419 armel.deb armel.rpm linux_armel.tar.gz: export GOARM := 5 420 421 armhf.deb armv6hl.rpm linux_armhf.tar.gz: export GOOS := linux 422 armhf.deb armv6hl.rpm linux_armhf.tar.gz: export GOARCH := arm 423 armhf.deb armv6hl.rpm linux_armhf.tar.gz: export GOARM := 6 424 425 arm64.deb aarch64.rpm linux_arm64.tar.gz: export GOOS := linux 426 arm64.deb aarch64.rpm linux_arm64.tar.gz: export GOARCH := arm64 427 arm64.deb aarch64.rpm linux_arm64.tar.gz: export GOARM := 7 428 429 mips.deb linux_mips.tar.gz: export GOOS := linux 430 mips.deb linux_mips.tar.gz: export GOARCH := mips 431 432 mipsel.deb linux_mipsel.tar.gz: export GOOS := linux 433 mipsel.deb linux_mipsel.tar.gz: export GOARCH := mipsle 434 435 riscv64.deb riscv64.rpm linux_riscv64.tar.gz: export GOOS := linux 436 riscv64.deb riscv64.rpm linux_riscv64.tar.gz: export GOARCH := riscv64 437 438 loong64.deb loong64.rpm linux_loong64.tar.gz: export GOOS := linux 439 loong64.deb loong64.rpm linux_loong64.tar.gz: export GOARCH := loong64 440 441 s390x.deb s390x.rpm linux_s390x.tar.gz: export GOOS := linux 442 s390x.deb s390x.rpm linux_s390x.tar.gz: export GOARCH := s390x 443 444 ppc64el.deb ppc64le.rpm linux_ppc64le.tar.gz: export GOOS := linux 445 ppc64el.deb ppc64le.rpm linux_ppc64le.tar.gz: export GOARCH := ppc64le 446 447 freebsd_amd64.tar.gz: export GOOS := freebsd 448 freebsd_amd64.tar.gz: export GOARCH := amd64 449 450 freebsd_i386.tar.gz: export GOOS := freebsd 451 freebsd_i386.tar.gz: export GOARCH := 386 452 453 freebsd_armv7.tar.gz: export GOOS := freebsd 454 freebsd_armv7.tar.gz: export GOARCH := arm 455 freebsd_armv7.tar.gz: export GOARM := 7 456 457 windows_amd64.zip: export GOOS := windows 458 windows_amd64.zip: export GOARCH := amd64 459 460 windows_arm64.zip: export GOOS := windows 461 windows_arm64.zip: export GOARCH := arm64 462 463 darwin_amd64.tar.gz: export GOOS := darwin 464 darwin_amd64.tar.gz: export GOARCH := amd64 465 466 darwin_arm64.tar.gz: export GOOS := darwin 467 darwin_arm64.tar.gz: export GOARCH := arm64 468 469 windows_i386.zip: export GOOS := windows 470 windows_i386.zip: export GOARCH := 386 471 472 windows_i386.zip windows_amd64.zip windows_arm64.zip: export prefix = 473 windows_i386.zip windows_amd64.zip windows_arm64.zip: export bindir = $(prefix) 474 windows_i386.zip windows_amd64.zip windows_arm64.zip: export sysconfdir = $(prefix) 475 windows_i386.zip windows_amd64.zip windows_arm64.zip: export localstatedir = $(prefix) 476 windows_i386.zip windows_amd64.zip windows_arm64.zip: export EXEEXT := .exe 477 478 %.deb: export pkg := deb 479 %.deb: export prefix := /usr 480 %.deb: export conf_suffix := .sample 481 %.deb: export sysconfdir := /etc 482 %.deb: export localstatedir := /var 483 %.rpm: export pkg := rpm 484 %.rpm: export prefix := /usr 485 %.rpm: export sysconfdir := /etc 486 %.rpm: export localstatedir := /var 487 %.tar.gz: export pkg := tar 488 %.tar.gz: export prefix := /usr 489 %.tar.gz: export sysconfdir := /etc 490 %.tar.gz: export localstatedir := /var 491 %.zip: export pkg := zip 492 %.zip: export prefix := / 493 494 %.deb %.rpm %.tar.gz %.zip: export DESTDIR = build/$(GOOS)-$(GOARCH)$(GOARM)-$(pkg)/telegraf-$(version) 495 %.deb %.rpm %.tar.gz %.zip: export buildbin = build/$(GOOS)-$(GOARCH)$(GOARM)/telegraf$(EXEEXT) 496 %.deb %.rpm %.tar.gz %.zip: export LDFLAGS = -w -s