#!/bin/sh # This is designed to compile a single package to a single binary # so it makes some assumptions about things to simplify config # to output a single binary (in a tarball) just use -o file set -e proc usage { echo "Usage: -o file" exit 1 } test $Argc = 0 && usage while [ $# -gt 1 ] { setvar flag = "$1" case (flag) { -o { setvar out = "$2" mkdir -p $(dirname $2) shift } --package { setvar package = "$2" shift } --ldflags { setvar ldflags = "$2" shift } * { echo "Unknown option $1" exit 1 } } shift } test $Argc -gt 0 && usage test -z $out && usage test -z $package && setvar package = $(basename "$out") setvar dir = ""$GOPATH/src/$package"" mkdir -p $dir # untar input tar xf - -C $dir cd $dir # lint before building >&2 echo "gofmt...>&2 echo "gofmt..." test -z $(gofmt -s -l .| grep -v .pb. | grep -v vendor/ | tee /dev/stderr) >&2 echo "govet...>&2 echo "govet..." test -z $(GOOS=linux go tool vet -printf=false . 2>&1 | grep -v vendor/ | tee /dev/stderr) >&2 echo "golint...>&2 echo "golint..." test -z $(find . -type f -name "*.go" -not -path "*/vendor/*" -not -name "*.pb.*" -exec golint {} \; | tee /dev/stderr) >&2 echo "ineffassign...>&2 echo "ineffassign..." test -z $(find . -type f -name "*.go" -not -path "*/vendor/*" -not -name "*.pb.*" -exec ineffassign {} \; | tee /dev/stderr) >&2 echo "go build...>&2 echo "go build..." if test $GOOS = "darwin" { if test -z $ldflags { go build -o $out $package } else { go build -o $out -ldflags ${ldflags} $package } } else { go build -o $out -buildmode pie -ldflags "-s -w ${ldflags} -extldflags \"-static\"" $package } tar cf - $out