From 540f363ead88e0b01bd6d770dd3317b5e28ed197 Mon Sep 17 00:00:00 2001
From: Angus Lees <gus@inodes.org>
Date: Fri, 19 May 2017 09:44:43 +1000
Subject: [PATCH] travis.yml: Build linux release builds using a musl/C++
 toolchain

---
 .travis.yml | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 Makefile    |  6 ++--
 2 files changed, 89 insertions(+), 6 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 37c95494..f76ff21a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,13 +4,96 @@ go:
   - 1.7
   - 1.8
 
+os:
+  - linux
+  - osx
+
+matrix:
+  include:
+    - env: TARGET=x86_64-linux-musl
+      os: linux
+      go: 1.8
+
+addons:
+  apt:
+    packages:
+      # Most of these are musl-cross dependencies
+      - wget
+      - patch
+      - git-core
+      - gcc
+      - g++
+      - make
+      - gawk
+      - bzip2
+      - gzip
+      - xz-utils
+      - ca-certificates
+      - libgmp-dev
+      - libmpfr-dev
+      - libmpc-dev
+
+before_install:
+  - set -e
+  - |
+    if [ -n "$TARGET" -a ! -d "$HOME/cross/$TARGET/bin" ]; then
+      pushd /tmp
+      git clone --depth=1 https://github.com/GregorR/musl-cross.git
+      cd musl-cross
+      echo CC_BASE_PREFIX=$HOME/cross >> ./config.sh
+      if ! ./build.sh > build.log; then
+        tail -100 build.log
+        exit 1
+      fi
+      popd
+    fi
+  - PATH=$PATH:$HOME/cross/$TARGET/bin
+  - |
+    if [ -n "$TARGET" ]; then
+      export CC="$TARGET-gcc"
+      export CXX="$TARGET-g++"
+      export GO_LDFLAGS='-linkmode external -extldflags=-static'
+    fi
+
 install:
-  - go build -i .
+  - go build -i -ldflags "$GO_LDFLAGS" .
 
 script:
-  - make test vet
+  - make VERSION=${TRAVIS_TAG:-build-$TRAVIS_BUILD_ID}
+  - make test
+  - make vet
+  - "ldd ./kubecfg || :"
+  - ./kubecfg help
+  - ./kubecfg version
+
+after_script: set +e
+
+before_deploy:
+  - cp kubecfg $TARGET-kubecfg
+  - strip $TARGET-kubecfg && ./$TARGET-kubecfg version
+  - "size $TARGET-kubecfg || :"
+
+deploy:
+  api_key:
+    secure: "T/LpWZSgeqWBgY3mUNeej55n8TbZZM7UgrHl7pej1CE2cs6YGcfyog3peiXvCcVF9NhGsm6eTXZQeFxsuWgMbWYeqlBnMkHNPPqdNpeRFgY0TkFZXHZLexfqTo2MLgrZiJ+bZl8wZnTTXukieGeLE37ugkBJyceLyfqIaxwRlpDzKPn8XtIqOMOwMq0aeUA8wjSSpuWkuwlGWKwJtI48BNExZZ1FRpPHQdAZjX6zEPT2SuRaACZdoX+3k/Fr91H6O9TplE4q5eCpEdd3y7BGGtMm3WA70SxYIZPGzfwaALGja5BapZr9Eui6ppyPGesQ8zV+zNtOsnK5Phj3QUj8M+v4BmJbxbPyhAIWmFiDlutgwZUkXI+R+SXONy1/LTuLLNSJ9WPQsC9gL09FGQmg+X0s7VpJVWxD8FScY0DJ4/bNLgeWnzwT2YTsduDktqevMpetxJWZGVQx3EN595JJKlZGtE8PouzVm7sRQEfe3Jd0XIcPfj5AV5trEBDjgHZSnU4qa9G9RdUZfswVp+R7SEwoTwEIEyOpFAwi9Qg5wkCAZFU2+86LQOLYH0Pm38//RxSXJEF1abkEb0Y/awz6KKlGBK3z1VSXvK3LQ8r9SwF2h15rD74O1mGM8Mjbs+mJXPxKpCq+BslskRYur3F8tRx45pwr8Ly9dppZd2rrswI="
+  file: $TARGET-kubecfg
+  on:
+    condition: $TARGET = x86_64-linux-musl
+    tags: true
+  provider: releases
+  skip_cleanup: true
 
 cache:
   directories:
-    - $GOPATH/src
     - $GOPATH/pkg
+    - $HOME/cross
+
+branches:
+  only:
+    - master
+    # release tags
+    - /^v\d+\.\d+\.\d+.*$/
+
+notifications:
+  email:
+    on_success: never
diff --git a/Makefile b/Makefile
index c1853c5a..4f36f1fd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = dev-$(shell date +%FT%T%z)
 
 GO = go
-GO_FLAGS = -ldflags="-X main.version=$(VERSION)"
+GO_FLAGS = -ldflags="-X main.version=$(VERSION) $(GO_LDFLAGS)"
 GOFMT = gofmt
 
 # TODO: Simplify this once ./... ignores ./vendor
@@ -13,10 +13,10 @@ kubecfg:
 	$(GO) build $(GO_FLAGS) .
 
 test:
-	$(GO) test $(GO_PACKAGES)
+	$(GO) test $(GO_FLAGS) $(GO_PACKAGES)
 
 vet:
-	$(GO) vet $(GO_PACKAGES)
+	$(GO) vet $(GO_FLAGS) $(GO_PACKAGES)
 
 fmt:
 	$(GOFMT) -s -w $(shell $(GO) list -f '{{.Dir}}' $(GO_PACKAGES))
-- 
GitLab