#!/bin/bash # # for windows and Mac check the README # BIN_NAME=acme-downloader PATH=$PATH:$(go env GOPATH)/bin GOPATH=$(go env GOPATH) PROG_VERSION="1.0" BUILDTIME=$(date -u '+%Y-%m-%d_%H:%M:%S') export BIN_NAME PATH GOPATH PROG_VERSION BUILDTIME REPO_DIR=$(dirname $0) if [ "$REPO_DIR" = '.' ]; then REPO_DIR=`pwd` fi ln -sf "$REPO_DIR" "${GOPATH}/src/" REPO_NAME=$(basename "$REPO_DIR") cd "${GOPATH}/src/$REPO_NAME" usage() { echo "Usage: $(basename $0)" echo " -h | --help [Print this help and exit]" echo " --os=OS (Compile binary for this OS)" echo " --arch=ARCH (Compile binary for this architecture)" echo "" echo " Below is a list of supported combinations (1st column: OS / 2nd column: Arch):" go tool dist list|awk -F'/' '{printf "OS: "$1"\011=> Arch: "$2"\n"}' exit } OPTS=$(getopt -o "h" --longoptions "help,platform:,arch:" -- "$@") eval set -- "$OPTS" while true; do case "$1" in -h | --help) usage ;; --platform) shift PLATFORM="$1" ;; --arch) shift ARCH="$1" ;; --) shift break ;; esac shift done if [ -z $PLATFORM -o -z $ARCH ]; then echo -e "\nYou need to supply platform and architecture\n" usage fi if [ "$PLATFORM" == "windows" ]; then $BIN_NAME = "${BIN_NAME}.exe" fi EXECUTABLE_PATH="${GOPATH}/bin/${PLATFORM}_${ARCH}/${BIN_NAME}" run_upx() { if ! which upx &>/dev/null; then echo "please download upx here https://github.com/upx/upx/releases" echo "and store the executable within your \$PATH" exit fi upx --brute "$EXECUTABLE_PATH" } # env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -X main.appVersion=${PROG_VERSION} -X main.buildTime=${BUILDTIME}" . env GOOS=$PLATFORM GOARCH=$ARCH go get -ldflags "-s -w -X main.appVersion=${PROG_VERSION} -X main.buildTime=${BUILDTIME}" . if [ $? -gt 0 ]; then echo -e "\nthere was an error while compiling the code\n" exit fi while true; do echo -e "\nUPX degrades performances but in the case of acme-downloader it is not noticeable" echo -e "UPX may or may not work for a specific platform (I haven't tried them)\n" read -p "Do you wish to run upx against ${BIN_NAME}? (y/n) " yn case $yn in [Yy]*) echo "" run_upx break ;; [Nn]*) break ;; *) echo "Please answer Y|y or N|n." ;; esac done echo -e "\nthe binary was compiled and it is avilable as:\n - \"$EXECUTABLE_PATH\"\n"