summaryrefslogtreecommitdiffstats
path: root/src/go/plugin/go.d/hack/go-build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/go/plugin/go.d/hack/go-build.sh')
-rwxr-xr-xsrc/go/plugin/go.d/hack/go-build.sh109
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