#!/bin/bash _init() { # Save release LDFLAGS LDFLAGS=$(go run buildscripts/gen-ldflags.go) # Extract release tag release_tag=$(echo $LDFLAGS | awk {'print $4'} | cut -f2 -d=) # Verify release tag. if [ -z "$release_tag" ]; then echo "Release tag cannot be empty. Please check return value of \`go run buildscripts/gen-ldflags.go\`" exit 1; fi # Extract release string. release_str=$(echo $MINIO_RELEASE | tr '[:upper:]' '[:lower:]') # Verify release string. if [ -z "$release_str" ]; then echo "Release string cannot be empty. Please set \`MINIO_RELEASE\` env variable." exit 1; fi # List of supported architectures SUPPORTED_OSARCH='linux/386 linux/amd64 linux/arm windows/386 windows/amd64 darwin/amd64' ## System binaries CP=`which cp` SHASUM=`which shasum` GZIP=`which gzip` ZIP=`which zip` SED=`which sed` TAR=`which tar` } go_build() { local osarch=$1 os=$(echo $osarch | cut -f1 -d'/') arch=$(echo $osarch | cut -f2 -d'/') package=$(go list -f '{{.ImportPath}}') echo -n "-->" printf "%15s:%s\n" "${osarch}" "${package}" # Release binary name release_bin="$release_str/$os-$arch/$(basename $package).$release_tag" # Release binary downloadable name release_real_bin="$release_str/$os-$arch/$(basename $package)" # Release shasum name release_shasum="$release_str/$os-$arch/$(basename $package).shasum" # Release zip file. release_real_zip="$(basename $package).zip" release_real_tgz="$(basename $package).tgz" # Go build to build the binary. GOOS=$os GOARCH=$arch go build --ldflags "${LDFLAGS}" -o $release_bin # Create copy if [ $os == "windows" ]; then $CP -p $release_bin ${release_real_bin}.exe else $CP -p $release_bin $release_real_bin fi # Calculate shasum shasum_str=$(${SHASUM} ${release_bin}) echo ${shasum_str} | $SED "s/$release_str\/$os-$arch\///g" > $release_shasum # Create a compressed file. if [ $os == "windows" ]; then cd "$release_str/$os-$arch" $ZIP -r $release_real_zip $(basename $package).exe cd - elif [ $os == "darwin" ]; then cd "$release_str/$os-$arch" $ZIP -r $release_real_zip $(basename $package) cd - elif [ $os == "linux" ]; then cd "$release_str/$os-$arch" $TAR -czf $release_real_tgz $(basename $package) cd - else echo "$os operating system is not supported." exit 1 fi } main() { # Build releases. echo "Executing $release_str builds for OS: ${SUPPORTED_OSARCH}" echo "Choose an OS Arch from the below" for osarch in ${SUPPORTED_OSARCH}; do echo ${osarch} done read -p "If you want to build for all, Just press Enter: " chosen_osarch if [ "$chosen_osarch" = "" ]; then for each_osarch in ${SUPPORTED_OSARCH}; do go_build ${each_osarch} done else go_build ${chosen_osarch} fi } # Run main. _init && main