mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-20 17:49:10 +00:00
107 lines
1.8 KiB
Bash
Executable File
107 lines
1.8 KiB
Bash
Executable File
#!/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
|
|
|
|
usage() {
|
|
echo "Usage: -o file"
|
|
exit 1
|
|
}
|
|
|
|
[ $# = 0 ] && usage
|
|
|
|
while [ $# -gt 1 ]
|
|
do
|
|
flag="$1"
|
|
case "$flag" in
|
|
-o)
|
|
out="$2"
|
|
mkdir -p "$(dirname $2)"
|
|
shift
|
|
;;
|
|
--package)
|
|
package="$2"
|
|
shift
|
|
;;
|
|
--ldflags)
|
|
ldflags="$2"
|
|
shift
|
|
;;
|
|
--clone-path)
|
|
clonepath="$2"
|
|
shift
|
|
;;
|
|
--clone)
|
|
clone="$2"
|
|
shift
|
|
;;
|
|
--commit)
|
|
commit="$2"
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Unknown option $1"
|
|
exit 1
|
|
esac
|
|
shift
|
|
done
|
|
|
|
[ $# -gt 0 ] && usage
|
|
[ -z "$out" ] && usage
|
|
|
|
[ -z "$package" ] && package=$(basename "$out")
|
|
|
|
dir="$GOPATH/src/$package"
|
|
|
|
if [ -z "$clone" ]
|
|
then
|
|
mkdir -p "$dir"
|
|
cd "$dir"
|
|
# untar input
|
|
tar xf -
|
|
else
|
|
mkdir -p "$GOPATH/src/$clonepath"
|
|
cd "$GOPATH/src/$clonepath"
|
|
git clone "$clone" .
|
|
[ ! -z "$commit" ] && git checkout "$commit"
|
|
mkdir -p "$dir"
|
|
cd "$dir"
|
|
fi
|
|
|
|
cd "$dir"
|
|
|
|
# Use '-mod=vendor' for builds which have switched to go modules
|
|
[ -f go.mod ] && MOD_ARG="-mod=vendor"
|
|
|
|
# lint before building
|
|
>&2 echo "gofmt..."
|
|
test -z $(gofmt -s -l .| grep -v .pb. | grep -v vendor/ | tee /dev/stderr)
|
|
|
|
>&2 echo "govet..."
|
|
test -z $(GOOS=linux go vet $MOD_ARG -printf=false . 2>&1 | grep -v "^#" | grep -v vendor/ | tee /dev/stderr)
|
|
|
|
>&2 echo "golint..."
|
|
golangci-lint run ./... >&2
|
|
|
|
>&2 echo "ineffassign..."
|
|
test -z $(ineffassign ./... | tee /dev/stderr)
|
|
|
|
>&2 echo "go build..."
|
|
|
|
if [ "$GOOS" = "darwin" -o "$GOOS" = "windows" ]
|
|
then
|
|
if [ -z "$ldflags" ]
|
|
then
|
|
go build $MOD_ARG -o $out "$package"
|
|
else
|
|
go build $MOD_ARG -o $out -ldflags "${ldflags}" "$package"
|
|
fi
|
|
else
|
|
go build $MOD_ARG -o $out -buildmode pie -ldflags "-linkmode=external -s -w ${ldflags} -extldflags \"-static-pie\"" "$package"
|
|
fi
|
|
|
|
tar cf - $out
|