From 2cf9d76d9b5bfae020971b2a42be4ba0a8df0eb5 Mon Sep 17 00:00:00 2001 From: Petter Rasmussen Date: Sat, 18 Jul 2015 16:48:40 +0200 Subject: Update release scripts - Move scripts into _release folder - Include crosscrompile script - Minor adjustments --- .gitignore | 2 +- _release/build-all.sh | 44 ++++++++++++++++++++++++++++ _release/crosscompile.bash | 73 ++++++++++++++++++++++++++++++++++++++++++++++ _release/upload.sh | 22 ++++++++++++++ build-all.sh | 47 ----------------------------- upload.sh | 22 -------------- 6 files changed, 140 insertions(+), 70 deletions(-) create mode 100755 _release/build-all.sh create mode 100644 _release/crosscompile.bash create mode 100755 _release/upload.sh delete mode 100755 build-all.sh delete mode 100755 upload.sh diff --git a/.gitignore b/.gitignore index 769fd25..6b18ed8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Ignore bin folder and drive binary -bin/ +_release/bin drive # vim files diff --git a/_release/build-all.sh b/_release/build-all.sh new file mode 100755 index 0000000..414ae18 --- /dev/null +++ b/_release/build-all.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Load crosscompile environment +source _release/crosscompile.bash + +APP_NAME="drive" +PLATFORMS="darwin/386 darwin/amd64 freebsd/386 freebsd/amd64 linux/386 linux/amd64 linux/arm linux/rpi windows/386 windows/amd64" +BIN_PATH="_release/bin" + +# Initialize bin dir +mkdir -p $BIN_PATH +rm $BIN_PATH/* + + +# Build binary for each platform in parallel +for PLATFORM in $PLATFORMS; do + GOOS=${PLATFORM%/*} + GOARCH=${PLATFORM#*/} + BIN_NAME="${APP_NAME}-${GOOS/darwin/osx}-${GOARCH/amd64/x64}" + + if [ $GOOS == "windows" ]; then + BIN_NAME="${BIN_NAME}.exe" + fi + + # Raspberrypi seems to need arm5 binaries + if [ $GOARCH == "rpi" ]; then + export GOARM=5 + GOARCH="arm" + else + unset GOARM + fi + + BUILD_CMD="go-${GOOS}-${GOARCH} build -ldflags '-w' -o ${BIN_PATH}/${BIN_NAME} $APP_NAME.go" + + echo "Building $BIN_NAME" + $BUILD_CMD & +done + +# Wait for builds to complete +for job in $(jobs -p); do + wait $job +done + +echo "All done" diff --git a/_release/crosscompile.bash b/_release/crosscompile.bash new file mode 100644 index 0000000..ef38522 --- /dev/null +++ b/_release/crosscompile.bash @@ -0,0 +1,73 @@ +#!/bin/bash +# Copyright 2012 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# support functions for go cross compilation + +type setopt >/dev/null 2>&1 && setopt shwordsplit +PLATFORMS="darwin/386 darwin/amd64 freebsd/386 freebsd/amd64 freebsd/arm linux/386 linux/amd64 linux/arm windows/386 windows/amd64 openbsd/386 openbsd/amd64" + +function go-alias { + GOOS=${1%/*} + GOARCH=${1#*/} + eval "function go-${GOOS}-${GOARCH} { ( GOOS=${GOOS} GOARCH=${GOARCH} go \"\$@\" ) }" +} + +function go-crosscompile-build { + GOOS=${1%/*} + GOARCH=${1#*/} + cd $(go env GOROOT)/src ; GOOS=${GOOS} GOARCH=${GOARCH} ./make.bash --no-clean 2>&1 +} + +function go-crosscompile-build-all { + FAILURES="" + for PLATFORM in $PLATFORMS; do + CMD="go-crosscompile-build ${PLATFORM}" + echo "$CMD" + $CMD || FAILURES="$FAILURES $PLATFORM" + done + if [ "$FAILURES" != "" ]; then + echo "*** go-crosscompile-build-all FAILED on $FAILURES ***" + return 1 + fi +} + +function go-all { + FAILURES="" + for PLATFORM in $PLATFORMS; do + GOOS=${PLATFORM%/*} + GOARCH=${PLATFORM#*/} + CMD="go-${GOOS}-${GOARCH} $@" + echo "$CMD" + $CMD || FAILURES="$FAILURES $PLATFORM" + done + if [ "$FAILURES" != "" ]; then + echo "*** go-all FAILED on $FAILURES ***" + return 1 + fi +} + +function go-build-all { + FAILURES="" + for PLATFORM in $PLATFORMS; do + GOOS=${PLATFORM%/*} + GOARCH=${PLATFORM#*/} + SRCFILENAME=`echo $@ | sed 's/\.go//'` + CURDIRNAME=${PWD##*/} + OUTPUT=${SRCFILENAME:-$CURDIRNAME} # if no src file given, use current dir name + CMD="go-${GOOS}-${GOARCH} build -o $OUTPUT-${GOOS}-${GOARCH} $@" + echo "$CMD" + $CMD || FAILURES="$FAILURES $PLATFORM" + done + if [ "$FAILURES" != "" ]; then + echo "*** go-build-all FAILED on $FAILURES ***" + return 1 + fi +} + +for PLATFORM in $PLATFORMS; do + go-alias $PLATFORM +done + +unset -f go-alias diff --git a/_release/upload.sh b/_release/upload.sh new file mode 100755 index 0000000..ec66841 --- /dev/null +++ b/_release/upload.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Markdown helpers +HEADER='### Downloads' +ROW_TEMPLATE='- [{{name}}]({{url}})' + +# Grab application version +VERSION=$(_release/bin/drive-osx-x64 --version | awk '{print $2}' | sed -e 's/v//') + +# Print markdown header +echo "$HEADER" + +for bin_path in _release/bin/drive-*; do + # Upload file + URL=$(drive upload --file $bin_path --share | awk '/https/ {print $9}') + + # Render markdown row and print to screen + NAME="$(basename $bin_path) v${VERSION}" + ROW=${ROW_TEMPLATE//"{{name}}"/$NAME} + ROW=${ROW//"{{url}}"/$URL} + echo "$ROW" +done diff --git a/build-all.sh b/build-all.sh deleted file mode 100755 index bffb11f..0000000 --- a/build-all.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -if [ -z "$1" ]; then - echo "Usage: $0 " - exit 1 -fi - -# Load crosscompile environment -source /Users/pii/scripts/golang-crosscompile/crosscompile.bash - -PLATFORMS="darwin/386 darwin/amd64 freebsd/386 freebsd/amd64 linux/386 linux/amd64 linux/arm linux/rpi windows/386 windows/amd64" -APP_NAME=$1 - -# Remove old binaries -rm bin/* - - -# Build binary for each platform in parallel -for PLATFORM in $PLATFORMS; do - GOOS=${PLATFORM%/*} - GOARCH=${PLATFORM#*/} - BIN_NAME="${APP_NAME}-$GOOS-$GOARCH" - - if [ $GOOS == "windows" ]; then - BIN_NAME="${BIN_NAME}.exe" - fi - - # Raspberrypi seems to need arm5 binaries - if [ $GOARCH == "rpi" ]; then - export GOARM=5 - GOARCH="arm" - else - unset GOARM - fi - - BUILD_CMD="go-${GOOS}-${GOARCH} build -ldflags "-w" -o bin/${BIN_NAME} $APP_NAME.go" - - echo "Building $BIN_NAME" - $BUILD_CMD & -done - -# Wait for builds to complete -for job in $(jobs -p); do - wait $job -done - -echo "All done" diff --git a/upload.sh b/upload.sh deleted file mode 100755 index 365ca36..0000000 --- a/upload.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# Markdown helpers -HEADER='### Downloads' -ROW_TEMPLATE='- [{{name}}]({{url}})' - -# Grab application version -VERSION=$(bin/drive-darwin-amd64 --version | awk '{print $2}' | sed -e 's/v//') - -# Print markdown header -echo "$HEADER" - -for bin_path in bin/drive-*; do - # Upload file - URL=$(drive upload --file $bin_path --share | awk '/https/ {print $9}') - - # Render markdown row and print to screen - NAME="$(basename $bin_path) v${VERSION}" - ROW=${ROW_TEMPLATE//"{{name}}"/$NAME} - ROW=${ROW//"{{url}}"/$URL} - echo "$ROW" -done -- cgit v1.2.3