chore: "makefile help" output, but still support building based on arch for CI (#9579)

This commit is contained in:
Sebastian Spaink 2021-09-20 10:26:10 -07:00 committed by GitHub
parent b93f20068a
commit 82bdbce498
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 177 additions and 215 deletions

View File

@ -123,11 +123,11 @@ commands:
- when: - when:
condition: << parameters.release >> condition: << parameters.release >>
steps: steps:
- run: 'mips=1 mipsel=1 arm64=1 amd64=1 static=1 armel=1 armhf=1 s390x=1 ppc641e=1 i386=1 windows=1 darwin=1 make package' - run: 'make package'
- when: - when:
condition: << parameters.nightly >> condition: << parameters.nightly >>
steps: steps:
- run: 'mips=1 mipsel=1 arm64=1 amd64=1 static=1 armel=1 armhf=1 s390x=1 ppc641e=1 i386=1 windows=1 darwin=1 NIGHTLY=1 make package' - run: 'make package'
- run: 'make upload-nightly' - run: 'make upload-nightly'
- unless: - unless:
condition: condition:
@ -135,7 +135,7 @@ commands:
- << parameters.nightly >> - << parameters.nightly >>
- << parameters.release >> - << parameters.release >>
steps: steps:
- run: '<< parameters.type >>=1 make package' - run: 'make package include_packages="$(make << parameters.type >>)"'
- store_artifacts: - store_artifacts:
path: './build/dist' path: './build/dist'
destination: 'build/dist' destination: 'build/dist'
@ -215,11 +215,11 @@ jobs:
steps: steps:
- package-build: - package-build:
type: i386 type: i386
ppc641e-package: ppc64le-package:
executor: go-1_17 executor: go-1_16
steps: steps:
- package-build: - package-build:
type: ppc641e type: ppc64le
s390x-package: s390x-package:
executor: go-1_17 executor: go-1_17
steps: steps:
@ -391,7 +391,7 @@ workflows:
- 'i386-package': - 'i386-package':
requires: requires:
- 'test-awaiter' - 'test-awaiter'
- 'ppc641e-package': - 'ppc64le-package':
requires: requires:
- 'test-awaiter' - 'test-awaiter'
- 's390x-package': - 's390x-package':
@ -421,7 +421,7 @@ workflows:
- 'share-artifacts': - 'share-artifacts':
requires: requires:
- 'i386-package' - 'i386-package'
- 'ppc641e-package' - 'ppc64le-package'
- 's390x-package' - 's390x-package'
- 'armel-package' - 'armel-package'
- 'amd64-package' - 'amd64-package'

351
Makefile
View File

@ -80,9 +80,18 @@ help:
@echo ' lint-install - install linter' @echo ' lint-install - install linter'
@echo ' check-deps - check docs/LICENSE_OF_DEPENDENCIES.md' @echo ' check-deps - check docs/LICENSE_OF_DEPENDENCIES.md'
@echo ' clean - delete build artifacts' @echo ' clean - delete build artifacts'
@echo ' package - build all supported packages, override include_packages to only build a subset'
@echo ' e.g.: make package include_packages="amd64.deb"'
@echo '' @echo ''
@echo 'Package Targets:' @echo 'Possible values for include_packages variable'
@$(foreach dist,$(dists),echo " $(dist)";) @$(foreach package,$(include_packages),echo " $(package)";)
@echo ''
@echo 'Resulting package name format (where arch will be the arch of the package):'
@echo ' telegraf_$(deb_version)_arch.deb'
@echo ' telegraf-$(rpm_version).arch.rpm'
@echo ' telegraf-$(tar_version)_arch.tar.gz'
@echo ' telegraf-$(tar_version)_arch.zip'
.PHONY: deps .PHONY: deps
deps: deps:
@ -224,164 +233,118 @@ $(buildbin):
@mkdir -pv $(dir $@) @mkdir -pv $(dir $@)
go build -o $(dir $@) -ldflags "$(LDFLAGS)" ./cmd/telegraf go build -o $(dir $@) -ldflags "$(LDFLAGS)" ./cmd/telegraf
ifdef mips # Define packages Telegraf supports, organized by architecture with a rule to echo the list to limit include_packages
debs += telegraf_$(deb_version)_mips.deb # e.g. make package include_packages="$(make amd64)"
tars += telegraf-$(tar_version)_linux_mips.tar.gz mips += linux_mips.tar.gz mips.deb
endif .PHONY: mips
mips:
@ echo $(mips)
mipsel += mipsel.deb linux_mipsel.tar.gz
.PHONY: mipsel
mipsel:
@ echo $(mipsel)
arm64 += linux_arm64.tar.gz arm64.deb aarch64.rpm
.PHONY: arm64
arm64:
@ echo $(arm64)
amd64 += freebsd_amd64.tar.gz linux_amd64.tar.gz amd64.deb x86_64.rpm
.PHONY: amd64
amd64:
@ echo $(amd64)
static += static_linux_amd64.tar.gz
.PHONY: static
static:
@ echo $(static)
armel += linux_armel.tar.gz armel.rpm armel.deb
.PHONY: armel
armel:
@ echo $(armel)
armhf += linux_armhf.tar.gz freebsd_armv7.tar.gz armhf.deb armv6hl.rpm
.PHONY: armhf
armhf:
@ echo $(armhf)
s390x += linux_s390x.tar.gz s390x.deb s390x.rpm
.PHONY: s390x
s390x:
@ echo $(s390x)
ppc64le += linux_ppc64le.tar.gz ppc64le.rpm ppc64el.deb
.PHONY: ppc64le
ppc64le:
@ echo $(ppc64le)
i386 += freebsd_i386.tar.gz i386.deb linux_i386.tar.gzi386.rpm
.PHONY: i386
i386:
@ echo $(i386)
windows += windows_i386.zip windows_amd64.zip
.PHONY: windows
windows:
@ echo $(windows)
darwin += darwin_amd64.tar.gz
.PHONY: darwin
darwin:
@ echo $(darwin)
ifdef mipsel include_packages := $(mips) $(mipsel) $(arm64) $(amd64) $(static) $(armel) $(armhf) $(s390x) $(ppc64le) $(i386) $(windows) $(darwin)
debs += telegraf_$(deb_version)_mipsel.deb
tars += telegraf-$(tar_version)_linux_mipsel.tar.gz
endif
ifdef arm64
tars += telegraf-$(tar_version)_linux_arm64.tar.gz
debs += telegraf_$(deb_version)_arm64.deb
rpms += telegraf-$(rpm_version).aarch64.rpm
endif
ifdef amd64
tars += telegraf-$(tar_version)_freebsd_amd64.tar.gz
tars += telegraf-$(tar_version)_linux_amd64.tar.gz
debs += telegraf_$(deb_version)_amd64.deb
rpms += telegraf-$(rpm_version).x86_64.rpm
endif
ifdef static
tars += telegraf-$(tar_version)_static_linux_amd64.tar.gz
endif
ifdef armel
tars += telegraf-$(tar_version)_linux_armel.tar.gz
rpms += telegraf-$(rpm_version).armel.rpm
debs += telegraf_$(deb_version)_armel.deb
endif
ifdef armhf
tars += telegraf-$(tar_version)_linux_armhf.tar.gz
tars += telegraf-$(tar_version)_freebsd_armv7.tar.gz
debs += telegraf_$(deb_version)_armhf.deb
rpms += telegraf-$(rpm_version).armv6hl.rpm
endif
ifdef s390x
tars += telegraf-$(tar_version)_linux_s390x.tar.gz
debs += telegraf_$(deb_version)_s390x.deb
rpms += telegraf-$(rpm_version).s390x.rpm
endif
ifdef ppc641e
tars += telegraf-$(tar_version)_linux_ppc64le.tar.gz
rpms += telegraf-$(rpm_version).ppc64le.rpm
debs += telegraf_$(deb_version)_ppc64el.deb
endif
ifdef i386
tars += telegraf-$(tar_version)_freebsd_i386.tar.gz
debs += telegraf_$(deb_version)_i386.deb
tars += telegraf-$(tar_version)_linux_i386.tar.gz
rpms += telegraf-$(rpm_version).i386.rpm
endif
ifdef windows
zips += telegraf-$(tar_version)_windows_i386.zip
zips += telegraf-$(tar_version)_windows_amd64.zip
endif
ifdef darwin
tars += telegraf-$(tar_version)_darwin_amd64.tar.gz
endif
dists := $(debs) $(rpms) $(tars) $(zips)
.PHONY: package .PHONY: package
package: $(dists) package: $(include_packages)
rpm_amd64 := amd64 .PHONY: $(include_packages)
rpm_386 := i386 $(include_packages):
rpm_s390x := s390x
rpm_ppc64le := ppc64le
rpm_arm5 := armel
rpm_arm6 := armv6hl
rpm_arm647 := aarch64
rpm_arch = $(rpm_$(GOARCH)$(GOARM))
.PHONY: $(rpms)
$(rpms):
@$(MAKE) install @$(MAKE) install
@mkdir -p $(pkgdir) @mkdir -p $(pkgdir)
fpm --force \
--log info \
--architecture $(rpm_arch) \
--input-type dir \
--output-type rpm \
--vendor InfluxData \
--url https://github.com/influxdata/telegraf \
--license MIT \
--maintainer support@influxdb.com \
--config-files /etc/telegraf/telegraf.conf \
--config-files /etc/logrotate.d/telegraf \
--after-install scripts/rpm/post-install.sh \
--before-install scripts/rpm/pre-install.sh \
--after-remove scripts/rpm/post-remove.sh \
--description "Plugin-driven server agent for reporting metrics into InfluxDB." \
--depends coreutils \
--depends shadow-utils \
--rpm-posttrans scripts/rpm/post-install.sh \
--name telegraf \
--version $(version) \
--iteration $(rpm_iteration) \
--chdir $(DESTDIR) \
--package $(pkgdir)/$@
deb_amd64 := amd64 @if [ "$(suffix $@)" = ".rpm" ]; then \
deb_386 := i386 fpm --force \
deb_s390x := s390x --log info \
deb_ppc64le := ppc64el --architecture $(basename $@) \
deb_arm5 := armel --input-type dir \
deb_arm6 := armhf --output-type rpm \
deb_arm647 := arm64 --vendor InfluxData \
deb_mips := mips --url https://github.com/influxdata/telegraf \
deb_mipsle := mipsel --license MIT \
deb_arch = $(deb_$(GOARCH)$(GOARM)) --maintainer support@influxdb.com \
--config-files /etc/telegraf/telegraf.conf \
.PHONY: $(debs) --config-files /etc/logrotate.d/telegraf \
$(debs): --after-install scripts/rpm/post-install.sh \
@$(MAKE) install --before-install scripts/rpm/pre-install.sh \
@mkdir -pv $(pkgdir) --after-remove scripts/rpm/post-remove.sh \
fpm --force \ --description "Plugin-driven server agent for reporting metrics into InfluxDB." \
--log info \ --depends coreutils \
--architecture $(deb_arch) \ --depends shadow-utils \
--input-type dir \ --rpm-posttrans scripts/rpm/post-install.sh \
--output-type deb \ --name telegraf \
--vendor InfluxData \ --version $(version) \
--url https://github.com/influxdata/telegraf \ --iteration $(rpm_iteration) \
--license MIT \ --chdir $(DESTDIR) \
--maintainer support@influxdb.com \ --package $(pkgdir)/telegraf-$(rpm_version).$@ ;\
--config-files /etc/telegraf/telegraf.conf.sample \ elif [ "$(suffix $@)" = ".deb" ]; then \
--config-files /etc/logrotate.d/telegraf \ fpm --force \
--after-install scripts/deb/post-install.sh \ --log info \
--before-install scripts/deb/pre-install.sh \ --architecture $(basename $@) \
--after-remove scripts/deb/post-remove.sh \ --input-type dir \
--before-remove scripts/deb/pre-remove.sh \ --output-type deb \
--description "Plugin-driven server agent for reporting metrics into InfluxDB." \ --vendor InfluxData \
--name telegraf \ --url https://github.com/influxdata/telegraf \
--version $(version) \ --license MIT \
--iteration $(deb_iteration) \ --maintainer support@influxdb.com \
--chdir $(DESTDIR) \ --config-files /etc/telegraf/telegraf.conf.sample \
--package $(pkgdir)/$@ --config-files /etc/logrotate.d/telegraf \
--after-install scripts/deb/post-install.sh \
.PHONY: $(zips) --before-install scripts/deb/pre-install.sh \
$(zips): --after-remove scripts/deb/post-remove.sh \
@$(MAKE) install --before-remove scripts/deb/pre-remove.sh \
@mkdir -p $(pkgdir) --description "Plugin-driven server agent for reporting metrics into InfluxDB." \
(cd $(dir $(DESTDIR)) && zip -r - ./*) > $(pkgdir)/$@ --name telegraf \
--version $(version) \
.PHONY: $(tars) --iteration $(deb_iteration) \
$(tars): --chdir $(DESTDIR) \
@$(MAKE) install --package $(pkgdir)/telegraf_$(deb_version)_$@ ;\
@mkdir -p $(pkgdir) elif [ "$(suffix $@)" = ".zip" ]; then \
tar --owner 0 --group 0 -czvf $(pkgdir)/$@ -C $(dir $(DESTDIR)) . (cd $(dir $(DESTDIR)) && zip -r - ./*) > $(pkgdir)/telegraf-$(tar_version)_$@ ;\
elif [ "$(suffix $@)" = ".gz" ]; then \
tar --owner 0 --group 0 -czvf $(pkgdir)/telegraf-$(tar_version)_$@ -C $(dir $(DESTDIR)) . ;\
fi
.PHONY: upload-nightly .PHONY: upload-nightly
upload-nightly: upload-nightly:
@ -393,63 +356,63 @@ upload-nightly:
--include "*.zip" \ --include "*.zip" \
--acl public-read --acl public-read
%amd64.deb %x86_64.rpm %linux_amd64.tar.gz: export GOOS := linux amd64.deb x86_64.rpm linux_amd64.tar.gz: export GOOS := linux
%amd64.deb %x86_64.rpm %linux_amd64.tar.gz: export GOARCH := amd64 amd64.deb x86_64.rpm linux_amd64.tar.gz: export GOARCH := amd64
%static_linux_amd64.tar.gz: export cgo := -nocgo static_linux_amd64.tar.gz: export cgo := -nocgo
%static_linux_amd64.tar.gz: export CGO_ENABLED := 0 static_linux_amd64.tar.gz: export CGO_ENABLED := 0
%i386.deb %i386.rpm %linux_i386.tar.gz: export GOOS := linux i386.deb i386.rpm linux_i386.tar.gz: export GOOS := linux
%i386.deb %i386.rpm %linux_i386.tar.gz: export GOARCH := 386 i386.deb i386.rpm linux_i386.tar.gz: export GOARCH := 386
%armel.deb %armel.rpm %linux_armel.tar.gz: export GOOS := linux armel.deb armel.rpm linux_armel.tar.gz: export GOOS := linux
%armel.deb %armel.rpm %linux_armel.tar.gz: export GOARCH := arm armel.deb armel.rpm linux_armel.tar.gz: export GOARCH := arm
%armel.deb %armel.rpm %linux_armel.tar.gz: export GOARM := 5 armel.deb armel.rpm linux_armel.tar.gz: export GOARM := 5
%armhf.deb %armv6hl.rpm %linux_armhf.tar.gz: export GOOS := linux armhf.deb armv6hl.rpm linux_armhf.tar.gz: export GOOS := linux
%armhf.deb %armv6hl.rpm %linux_armhf.tar.gz: export GOARCH := arm armhf.deb armv6hl.rpm linux_armhf.tar.gz: export GOARCH := arm
%armhf.deb %armv6hl.rpm %linux_armhf.tar.gz: export GOARM := 6 armhf.deb armv6hl.rpm linux_armhf.tar.gz: export GOARM := 6
%arm64.deb %aarch64.rpm %linux_arm64.tar.gz: export GOOS := linux arm64.deb aarch64.rpm linux_arm64.tar.gz: export GOOS := linux
%arm64.deb %aarch64.rpm %linux_arm64.tar.gz: export GOARCH := arm64 arm64.deb aarch64.rpm linux_arm64.tar.gz: export GOARCH := arm64
%arm64.deb %aarch64.rpm %linux_arm64.tar.gz: export GOARM := 7 arm64.deb aarch64.rpm linux_arm64.tar.gz: export GOARM := 7
%mips.deb %linux_mips.tar.gz: export GOOS := linux mips.deb linux_mips.tar.gz: export GOOS := linux
%mips.deb %linux_mips.tar.gz: export GOARCH := mips mips.deb linux_mips.tar.gz: export GOARCH := mips
%mipsel.deb %linux_mipsel.tar.gz: export GOOS := linux mipsel.deb linux_mipsel.tar.gz: export GOOS := linux
%mipsel.deb %linux_mipsel.tar.gz: export GOARCH := mipsle mipsel.deb linux_mipsel.tar.gz: export GOARCH := mipsle
%s390x.deb %s390x.rpm %linux_s390x.tar.gz: export GOOS := linux s390x.deb s390x.rpm linux_s390x.tar.gz: export GOOS := linux
%s390x.deb %s390x.rpm %linux_s390x.tar.gz: export GOARCH := s390x s390x.deb s390x.rpm linux_s390x.tar.gz: export GOARCH := s390x
%ppc64el.deb %ppc64le.rpm %linux_ppc64le.tar.gz: export GOOS := linux ppc64el.deb ppc64le.rpm linux_ppc64le.tar.gz: export GOOS := linux
%ppc64el.deb %ppc64le.rpm %linux_ppc64le.tar.gz: export GOARCH := ppc64le ppc64el.deb ppc64le.rpm linux_ppc64le.tar.gz: export GOARCH := ppc64le
%freebsd_amd64.tar.gz: export GOOS := freebsd freebsd_amd64.tar.gz: export GOOS := freebsd
%freebsd_amd64.tar.gz: export GOARCH := amd64 freebsd_amd64.tar.gz: export GOARCH := amd64
%freebsd_i386.tar.gz: export GOOS := freebsd freebsd_i386.tar.gz: export GOOS := freebsd
%freebsd_i386.tar.gz: export GOARCH := 386 freebsd_i386.tar.gz: export GOARCH := 386
%freebsd_armv7.tar.gz: export GOOS := freebsd freebsd_armv7.tar.gz: export GOOS := freebsd
%freebsd_armv7.tar.gz: export GOARCH := arm freebsd_armv7.tar.gz: export GOARCH := arm
%freebsd_armv7.tar.gz: export GOARM := 7 freebsd_armv7.tar.gz: export GOARM := 7
%windows_amd64.zip: export GOOS := windows windows_amd64.zip: export GOOS := windows
%windows_amd64.zip: export GOARCH := amd64 windows_amd64.zip: export GOARCH := amd64
%darwin_amd64.tar.gz: export GOOS := darwin darwin_amd64.tar.gz: export GOOS := darwin
%darwin_amd64.tar.gz: export GOARCH := amd64 darwin_amd64.tar.gz: export GOARCH := amd64
%windows_i386.zip: export GOOS := windows windows_i386.zip: export GOOS := windows
%windows_i386.zip: export GOARCH := 386 windows_i386.zip: export GOARCH := 386
%windows_i386.zip %windows_amd64.zip: export prefix = windows_i386.zip windows_amd64.zip: export prefix =
%windows_i386.zip %windows_amd64.zip: export bindir = $(prefix) windows_i386.zip windows_amd64.zip: export bindir = $(prefix)
%windows_i386.zip %windows_amd64.zip: export sysconfdir = $(prefix) windows_i386.zip windows_amd64.zip: export sysconfdir = $(prefix)
%windows_i386.zip %windows_amd64.zip: export localstatedir = $(prefix) windows_i386.zip windows_amd64.zip: export localstatedir = $(prefix)
%windows_i386.zip %windows_amd64.zip: export EXEEXT := .exe windows_i386.zip windows_amd64.zip: export EXEEXT := .exe
%.deb: export pkg := deb %.deb: export pkg := deb
%.deb: export prefix := /usr %.deb: export prefix := /usr

View File

@ -1,5 +1,9 @@
# Packaging # Packaging
Building the packages for Telegraf is automated using [Make](https://en.wikipedia.org/wiki/Make_(software)). Just running `make` will build a Telegraf binary for the operating system and architecture you are using (if it is supported). If you need to build a different package then you can run `make package` which will build all the supported packages. You will most likely only want a subset, you can define a subset of packages to be built by overriding the `include_packages` variable like so `make package include_packages="amd64.deb"`. You can also build all packages for a specific architecture like so `make package include_packages="$(make amd64)"`.
The packaging steps require certain tools to be setup before hand to work. These dependencies are listed in the ci-1.16.docker file which you can find in the scripts directory. Therefore it is recommended to use Docker to build the artifacts, see more details below.
## Package using Docker ## Package using Docker
This packaging method uses the CI images, and is very similar to how the This packaging method uses the CI images, and is very similar to how the
@ -18,20 +22,15 @@ docker run -ti quay.io/influxdb/telegraf-ci:1.9.7 /bin/bash
``` ```
From within the container: From within the container:
```
go get -d github.com/influxdata/telegraf
cd /go/src/github.com/influxdata/telegraf
# Use tag of Telegraf version you would like to build 1. `go get -d github.com/influxdata/telegraf`
git checkout release-1.10 2. `cd /go/src/github.com/influxdata/telegraf`
git reset --hard 1.10.2 3. `git checkout release-1.10`
make deps * Replace tag `release-1.10` with the version of Telegraf you would like to build
4. `git reset --hard 1.10.2`
# To build packages run: 5. `make deps`
6. `make package include_packages="amd64.deb"`
``` * Change `include_packages` to change what package you want, run `make help` to see possible values
make package amd64=1
```
From the host system, copy the build artifacts out of the container: From the host system, copy the build artifacts out of the container:
``` ```