git-bonsai 0.3.0

Command-line tool to clean the branches of your git garden
Documentation
#!/bin/bash
set -euo pipefail

init_system() {
    ARCH=$(uname -m)

    local out
    out=$(uname)

    case "$out" in
    Linux)
        OS_NAME=linux
        EXE_NAME=$APP_NAME
        ;;
    Darwin)
        OS_NAME=macos
        EXE_NAME=$APP_NAME
        ;;
    MINGW*|MSYS*)
        OS_NAME=windows
        EXE_NAME=$APP_NAME.exe
        ;;
    *)
        echo "error: unknown OS. uname printed '$out'"
        exit 1
        ;;
    esac
}

init_checksum_cmd() {
    CHECKSUM_CMD=$(which sha512sum 2> /dev/null || true)
    if [ -n "$CHECKSUM_CMD" ] ; then
        return
    fi
    local openssl_cmd=$(which openssl 2> /dev/null || true)
    if [ -n "$openssl_cmd" ] ; then
        CHECKSUM_CMD="$openssl_cmd sha512 -r"
        return
    fi
    die "Neither sha512sum nor openssl are installed, can't compute sha512 sum"
}

cd $(dirname $0)/..

APP_NAME=git-bonsai
DATA_FILES="README.md CHANGELOG.md LICENSE"

init_system
init_checksum_cmd
echo "Checksum command: $CHECKSUM_CMD"

define_version() {
    local describe=$(git describe)
    echo "git describe: $describe"
    case "$describe" in
        *-*-g*)
            echo "Building a snapshot"
            VERSION=${describe//-*/}+$(git show --no-patch --format=%cd-%h --date=format:%Y%m%dT%H%M%S)
            ;;
        *)
            echo "Building from a tag"
            VERSION=$describe
            ;;
    esac
    echo "VERSION=$VERSION"
}

define_version

ARTIFACTS_DIR=$PWD/artifacts
ARCHIVE_DIR=$APP_NAME-$VERSION
ARCHIVE_NAME=$APP_NAME-$VERSION-$ARCH-$OS_NAME.tar.bz2

rm -rf $ARTIFACTS_DIR
mkdir -p $ARTIFACTS_DIR/$ARCHIVE_DIR

echo "Copying and stripping binary"
cp target/release/$EXE_NAME $ARTIFACTS_DIR/$ARCHIVE_DIR
strip $ARTIFACTS_DIR/$ARCHIVE_DIR/$EXE_NAME

echo "Copying data files"
cp $DATA_FILES $ARTIFACTS_DIR/$ARCHIVE_DIR

echo "Creating archive $ARTIFACTS_DIR/$ARCHIVE_NAME"
cd $ARTIFACTS_DIR
tar -cjvf $ARCHIVE_NAME $ARCHIVE_DIR

echo "Computing checksum"
$CHECKSUM_CMD $ARCHIVE_NAME