|
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# WARN: non hermetic build (people must run this script inside docker to
|
|
# produce deterministic binaries).
|
|
|
|
# Get the version from the environment, or try to figure it out.
|
|
if [ -z $VERSION ]; then
|
|
VERSION=$(awk -F\" 'TMCoreSemVer =/ { print $2; exit }' < version/version.go)
|
|
fi
|
|
if [ -z "$VERSION" ]; then
|
|
echo "Please specify a version."
|
|
exit 1
|
|
fi
|
|
echo "==> Building version $VERSION..."
|
|
|
|
# Delete the old dir
|
|
echo "==> Removing old directory..."
|
|
rm -rf build/pkg
|
|
mkdir -p build/pkg
|
|
|
|
# Get the git commit
|
|
GIT_COMMIT="$(git rev-parse --short=8 HEAD)"
|
|
GIT_IMPORT="github.com/tendermint/tendermint/version"
|
|
|
|
# Determine the arch/os combos we're building for
|
|
XC_ARCH=${XC_ARCH:-"386 amd64 arm"}
|
|
XC_OS=${XC_OS:-"solaris darwin freebsd linux windows"}
|
|
XC_EXCLUDE=${XC_EXCLUDE:-" darwin/arm solaris/amd64 solaris/386 solaris/arm freebsd/amd64 windows/arm "}
|
|
|
|
# Make sure build tools are available.
|
|
make tools
|
|
|
|
# Build!
|
|
# ldflags: -s Omit the symbol table and debug information.
|
|
# -w Omit the DWARF symbol table.
|
|
echo "==> Building..."
|
|
IFS=' ' read -ra arch_list <<< "$XC_ARCH"
|
|
IFS=' ' read -ra os_list <<< "$XC_OS"
|
|
for arch in "${arch_list[@]}"; do
|
|
for os in "${os_list[@]}"; do
|
|
if [[ "$XC_EXCLUDE" != *" $os/$arch "* ]]; then
|
|
echo "--> $os/$arch"
|
|
GOOS=${os} GOARCH=${arch} go build -ldflags "-s -w -X ${GIT_IMPORT}.GitCommit=${GIT_COMMIT}" -tags="${BUILD_TAGS}" -o "build/pkg/${os}_${arch}/tendermint" ./cmd/tendermint
|
|
fi
|
|
done
|
|
done
|
|
|
|
# Zip all the files.
|
|
echo "==> Packaging..."
|
|
for PLATFORM in $(find ./build/pkg -mindepth 1 -maxdepth 1 -type d); do
|
|
OSARCH=$(basename "${PLATFORM}")
|
|
echo "--> ${OSARCH}"
|
|
|
|
pushd "$PLATFORM" >/dev/null 2>&1
|
|
zip "../${OSARCH}.zip" ./*
|
|
popd >/dev/null 2>&1
|
|
done
|
|
|
|
# Add "tendermint" and $VERSION prefix to package name.
|
|
rm -rf ./build/dist
|
|
mkdir -p ./build/dist
|
|
for FILENAME in $(find ./build/pkg -mindepth 1 -maxdepth 1 -type f); do
|
|
FILENAME=$(basename "$FILENAME")
|
|
cp "./build/pkg/${FILENAME}" "./build/dist/tendermint_${VERSION}_${FILENAME}"
|
|
done
|
|
|
|
# Make the checksums.
|
|
pushd ./build/dist
|
|
shasum -a256 ./* > "./tendermint_${VERSION}_SHA256SUMS"
|
|
popd
|
|
|
|
# Done
|
|
echo
|
|
echo "==> Results:"
|
|
ls -hl ./build/dist
|
|
|
|
exit 0
|