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:
condition: << parameters.release >>
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:
condition: << parameters.nightly >>
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'
- unless:
condition:
@ -135,7 +135,7 @@ commands:
- << parameters.nightly >>
- << parameters.release >>
steps:
- run: '<< parameters.type >>=1 make package'
- run: 'make package include_packages="$(make << parameters.type >>)"'
- store_artifacts:
path: './build/dist'
destination: 'build/dist'
@ -215,11 +215,11 @@ jobs:
steps:
- package-build:
type: i386
ppc641e-package:
executor: go-1_17
ppc64le-package:
executor: go-1_16
steps:
- package-build:
type: ppc641e
type: ppc64le
s390x-package:
executor: go-1_17
steps:
@ -391,7 +391,7 @@ workflows:
- 'i386-package':
requires:
- 'test-awaiter'
- 'ppc641e-package':
- 'ppc64le-package':
requires:
- 'test-awaiter'
- 's390x-package':
@ -421,7 +421,7 @@ workflows:
- 'share-artifacts':
requires:
- 'i386-package'
- 'ppc641e-package'
- 'ppc64le-package'
- 's390x-package'
- 'armel-package'
- 'amd64-package'

351
Makefile
View File

@ -80,9 +80,18 @@ help:
@echo ' lint-install - install linter'
@echo ' check-deps - check docs/LICENSE_OF_DEPENDENCIES.md'
@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 'Package Targets:'
@$(foreach dist,$(dists),echo " $(dist)";)
@echo 'Possible values for include_packages variable'
@$(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
deps:
@ -224,164 +233,118 @@ $(buildbin):
@mkdir -pv $(dir $@)
go build -o $(dir $@) -ldflags "$(LDFLAGS)" ./cmd/telegraf
ifdef mips
debs += telegraf_$(deb_version)_mips.deb
tars += telegraf-$(tar_version)_linux_mips.tar.gz
endif
# Define packages Telegraf supports, organized by architecture with a rule to echo the list to limit include_packages
# e.g. make package include_packages="$(make amd64)"
mips += linux_mips.tar.gz mips.deb
.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
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)
include_packages := $(mips) $(mipsel) $(arm64) $(amd64) $(static) $(armel) $(armhf) $(s390x) $(ppc64le) $(i386) $(windows) $(darwin)
.PHONY: package
package: $(dists)
package: $(include_packages)
rpm_amd64 := amd64
rpm_386 := i386
rpm_s390x := s390x
rpm_ppc64le := ppc64le
rpm_arm5 := armel
rpm_arm6 := armv6hl
rpm_arm647 := aarch64
rpm_arch = $(rpm_$(GOARCH)$(GOARM))
.PHONY: $(rpms)
$(rpms):
.PHONY: $(include_packages)
$(include_packages):
@$(MAKE) install
@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
deb_386 := i386
deb_s390x := s390x
deb_ppc64le := ppc64el
deb_arm5 := armel
deb_arm6 := armhf
deb_arm647 := arm64
deb_mips := mips
deb_mipsle := mipsel
deb_arch = $(deb_$(GOARCH)$(GOARM))
.PHONY: $(debs)
$(debs):
@$(MAKE) install
@mkdir -pv $(pkgdir)
fpm --force \
--log info \
--architecture $(deb_arch) \
--input-type dir \
--output-type deb \
--vendor InfluxData \
--url https://github.com/influxdata/telegraf \
--license MIT \
--maintainer support@influxdb.com \
--config-files /etc/telegraf/telegraf.conf.sample \
--config-files /etc/logrotate.d/telegraf \
--after-install scripts/deb/post-install.sh \
--before-install scripts/deb/pre-install.sh \
--after-remove scripts/deb/post-remove.sh \
--before-remove scripts/deb/pre-remove.sh \
--description "Plugin-driven server agent for reporting metrics into InfluxDB." \
--name telegraf \
--version $(version) \
--iteration $(deb_iteration) \
--chdir $(DESTDIR) \
--package $(pkgdir)/$@
.PHONY: $(zips)
$(zips):
@$(MAKE) install
@mkdir -p $(pkgdir)
(cd $(dir $(DESTDIR)) && zip -r - ./*) > $(pkgdir)/$@
.PHONY: $(tars)
$(tars):
@$(MAKE) install
@mkdir -p $(pkgdir)
tar --owner 0 --group 0 -czvf $(pkgdir)/$@ -C $(dir $(DESTDIR)) .
@if [ "$(suffix $@)" = ".rpm" ]; then \
fpm --force \
--log info \
--architecture $(basename $@) \
--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)/telegraf-$(rpm_version).$@ ;\
elif [ "$(suffix $@)" = ".deb" ]; then \
fpm --force \
--log info \
--architecture $(basename $@) \
--input-type dir \
--output-type deb \
--vendor InfluxData \
--url https://github.com/influxdata/telegraf \
--license MIT \
--maintainer support@influxdb.com \
--config-files /etc/telegraf/telegraf.conf.sample \
--config-files /etc/logrotate.d/telegraf \
--after-install scripts/deb/post-install.sh \
--before-install scripts/deb/pre-install.sh \
--after-remove scripts/deb/post-remove.sh \
--before-remove scripts/deb/pre-remove.sh \
--description "Plugin-driven server agent for reporting metrics into InfluxDB." \
--name telegraf \
--version $(version) \
--iteration $(deb_iteration) \
--chdir $(DESTDIR) \
--package $(pkgdir)/telegraf_$(deb_version)_$@ ;\
elif [ "$(suffix $@)" = ".zip" ]; then \
(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
upload-nightly:
@ -393,63 +356,63 @@ upload-nightly:
--include "*.zip" \
--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 GOARCH := amd64
amd64.deb x86_64.rpm linux_amd64.tar.gz: export GOOS := linux
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_ENABLED := 0
static_linux_amd64.tar.gz: export cgo := -nocgo
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 GOARCH := 386
i386.deb i386.rpm linux_i386.tar.gz: export GOOS := linux
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 GOARCH := arm
%armel.deb %armel.rpm %linux_armel.tar.gz: export GOARM := 5
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 GOARM := 5
%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 GOARM := 6
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 GOARM := 6
%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 GOARM := 7
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 GOARM := 7
%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 GOOS := linux
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 GOARCH := mipsle
mipsel.deb linux_mipsel.tar.gz: export GOOS := linux
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 GOARCH := s390x
s390x.deb s390x.rpm linux_s390x.tar.gz: export GOOS := linux
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 GOARCH := ppc64le
ppc64el.deb ppc64le.rpm linux_ppc64le.tar.gz: export GOOS := linux
ppc64el.deb ppc64le.rpm linux_ppc64le.tar.gz: export GOARCH := ppc64le
%freebsd_amd64.tar.gz: export GOOS := freebsd
%freebsd_amd64.tar.gz: export GOARCH := amd64
freebsd_amd64.tar.gz: export GOOS := freebsd
freebsd_amd64.tar.gz: export GOARCH := amd64
%freebsd_i386.tar.gz: export GOOS := freebsd
%freebsd_i386.tar.gz: export GOARCH := 386
freebsd_i386.tar.gz: export GOOS := freebsd
freebsd_i386.tar.gz: export GOARCH := 386
%freebsd_armv7.tar.gz: export GOOS := freebsd
%freebsd_armv7.tar.gz: export GOARCH := arm
%freebsd_armv7.tar.gz: export GOARM := 7
freebsd_armv7.tar.gz: export GOOS := freebsd
freebsd_armv7.tar.gz: export GOARCH := arm
freebsd_armv7.tar.gz: export GOARM := 7
%windows_amd64.zip: export GOOS := windows
%windows_amd64.zip: export GOARCH := amd64
windows_amd64.zip: export GOOS := windows
windows_amd64.zip: export GOARCH := amd64
%darwin_amd64.tar.gz: export GOOS := darwin
%darwin_amd64.tar.gz: export GOARCH := amd64
darwin_amd64.tar.gz: export GOOS := darwin
darwin_amd64.tar.gz: export GOARCH := amd64
%windows_i386.zip: export GOOS := windows
%windows_i386.zip: export GOARCH := 386
windows_i386.zip: export GOOS := windows
windows_i386.zip: export GOARCH := 386
%windows_i386.zip %windows_amd64.zip: export 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 localstatedir = $(prefix)
%windows_i386.zip %windows_amd64.zip: export EXEEXT := .exe
windows_i386.zip windows_amd64.zip: export 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 localstatedir = $(prefix)
windows_i386.zip windows_amd64.zip: export EXEEXT := .exe
%.deb: export pkg := deb
%.deb: export prefix := /usr

View File

@ -1,5 +1,9 @@
# 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
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:
```
go get -d github.com/influxdata/telegraf
cd /go/src/github.com/influxdata/telegraf
# Use tag of Telegraf version you would like to build
git checkout release-1.10
git reset --hard 1.10.2
make deps
# To build packages run:
```
make package amd64=1
```
1. `go get -d github.com/influxdata/telegraf`
2. `cd /go/src/github.com/influxdata/telegraf`
3. `git checkout release-1.10`
* Replace tag `release-1.10` with the version of Telegraf you would like to build
4. `git reset --hard 1.10.2`
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
From the host system, copy the build artifacts out of the container:
```