diff options
Diffstat (limited to 'src/go/plugin/go.d/hack/go-build.sh')
-rwxr-xr-x | src/go/plugin/go.d/hack/go-build.sh | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/go/plugin/go.d/hack/go-build.sh b/src/go/plugin/go.d/hack/go-build.sh new file mode 100755 index 00000000..0b451f9c --- /dev/null +++ b/src/go/plugin/go.d/hack/go-build.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash + +# SPDX-License-Identifier: GPL-3.0-or-later + +set -e + +PLATFORMS=( + darwin/amd64 + darwin/arm64 + freebsd/386 + freebsd/amd64 + freebsd/arm + freebsd/arm64 + linux/386 + linux/amd64 + linux/arm + linux/arm64 + linux/ppc64 + linux/ppc64le + linux/mips + linux/mipsle + linux/mips64 + linux/mips64le +) + +getos() { + local IFS=/ && read -ra array <<<"$1" && echo "${array[0]}" +} + +getarch() { + local IFS=/ && read -ra array <<<"$1" && echo "${array[1]}" +} + +WHICH="$1" + +VERSION="${TRAVIS_TAG:-$(git describe --tags --always --dirty)}" + +GOLDFLAGS=${GLDFLAGS:-} +GOLDFLAGS="$GOLDFLAGS -w -s -X github.com/netdata/netdata/go/plugins/pkg/buildinfo.Version=$VERSION" + +build() { + echo "Building ${GOOS}/${GOARCH}" + CGO_ENABLED=0 GOOS="$1" GOARCH="$2" go build -ldflags "${GOLDFLAGS}" -o "$3" "github.com/netdata/netdata/go/plugins/cmd/godplugin" +} + +create_config_archives() { + mkdir -p bin + tar -zcvf "bin/config.tar.gz" -C config . + tar -zcvf "bin/go.d.plugin-config-${VERSION}.tar.gz" -C config . +} + +create_vendor_archives() { + mkdir -p bin + go mod vendor + tar -zc --transform "s:^:go.d.plugin-${VERSION#v}/:" -f "bin/vendor.tar.gz" vendor + tar -zc --transform "s:^:go.d.plugin-${VERSION#v}/:" -f "bin/go.d.plugin-vendor-${VERSION}.tar.gz" vendor +} + +build_all_platforms() { + for PLATFORM in "${PLATFORMS[@]}"; do + GOOS=$(getos "$PLATFORM") + GOARCH=$(getarch "$PLATFORM") + FILE="bin/go.d.plugin-${VERSION}.${GOOS}-${GOARCH}" + + build "$GOOS" "$GOARCH" "$FILE" + + ARCHIVE="${FILE}.tar.gz" + tar -C bin -cvzf "${ARCHIVE}" "${FILE/bin\//}" + rm "${FILE}" + done +} + +build_specific_platform() { + GOOS=$(getos "$1") + GOARCH=$(getarch "$1") + : "${GOARCH:=amd64}" + + build "$GOOS" "$GOARCH" bin/godplugin +} + +build_current_platform() { + eval "$(go env | grep -e "GOHOSTOS" -e "GOHOSTARCH")" + GOOS=${GOOS:-$GOHOSTOS} + GOARCH=${GOARCH:-$GOHOSTARCH} + + build "$GOOS" "$GOARCH" bin/godplugin +} + +if [[ "$WHICH" == "configs" ]]; then + echo "Creating config archives for version: $VERSION" + create_config_archives + exit 0 +fi + +if [[ "$WHICH" == "vendor" ]]; then + echo "Creating vendor archives for version: $VERSION" + create_vendor_archives + exit 0 +fi + +echo "Building binaries for version: $VERSION" + +if [[ "$WHICH" == "all" ]]; then + build_all_platforms +elif [[ -n "$WHICH" ]]; then + build_specific_platform "$WHICH" +else + build_current_platform +fi |