Files
sdkman-cli/srv/scripts/gvm
2012-11-01 17:18:37 +00:00

299 lines
6.7 KiB
Bash
Executable File

#!/bin/bash
GVM_VERSION="0.8.2"
PLATFORM=$(uname)
#
# function definitions
#
function help {
CANDIDATES=$(curl -s "$GVM_SERVICE/candidates")
echo ""
echo "Usage: gvm <command> <candidate> [version]"
echo ""
echo " command : install, uninstall, list, use, current, version, selfupdate, broadcast or help"
echo " candidate : $CANDIDATES"
echo " version : optional, defaults to latest stable if not provided"
echo ""
echo "eg: gvm install grails 2.1.0"
}
function check_candidate_present {
if [ -z "$1" ]; then
echo -e "\nNo candidate provided."
help
exit 0
fi
}
function check_version_present {
if [ -z "$1" ]; then
echo -e "\nNo candidate version provided."
help
exit 0
fi
}
function determine_version {
if [ -z "$1" ]; then
VERSION=$(curl -s "$GVM_SERVICE/candidates/$CANDIDATE/default")
else
VERSION_VALID=$(curl -s "$GVM_SERVICE/candidates/$CANDIDATE/$1")
if [ $VERSION_VALID == 'valid' ]; then
VERSION="$1"
else
echo ""
echo "Stop! $1 is not a valid $CANDIDATE version."
exit 0
fi
fi
}
function check_installed {
if [ -d "$GVM_DIR/$CANDIDATE/$VERSION" ]; then
echo ""
echo "Stop! $CANDIDATE $VERSION is already installed."
exit 0
fi
}
function check_not_installed {
if [ ! -d "$GVM_DIR/$CANDIDATE/$VERSION" ]; then
echo ""
echo "Stop! $CANDIDATE $VERSION is not installed."
exit 0
fi
}
function build_version_csv {
CANDIDATE="$1"
CSV=""
for version in $(ls -1 "$GVM_DIR/$CANDIDATE"); do
if [ $version != 'current' ]; then
CSV="$version,$CSV"
fi
done
CSV=${CSV%?}
}
function determine_current_version {
CANDIDATE="$1"
CURRENT=$(readlink "$GVM_DIR/$CANDIDATE/current" | sed -e "s_$GVM_DIR/$CANDIDATE/__g")
}
function download {
CANDIDATE="$1"
VERSION="$2"
mkdir -p "$GVM_DIR/archives"
if [ ! -f "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip" ]; then
echo ""
echo "Downloading: $CANDIDATE $VERSION"
echo ""
DOWNLOAD_URL="$GVM_SERVICE/download/$CANDIDATE/$VERSION?platform=$PLATFORM"
ZIP_ARCHIVE="$GVM_DIR/archives/$CANDIDATE-$VERSION.zip"
curl -L "$DOWNLOAD_URL" > "$ZIP_ARCHIVE"
validate_zip "$ZIP_ARCHIVE"
else
echo ""
echo "Found a previously downloaded $CANDIDATE $VERSION archive. Not downloading it again..."
validate_zip "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip"
fi
echo ""
}
function validate_zip {
ZIP_ARCHIVE="$1"
ZIP_OK=$(zip -T "$ZIP_ARCHIVE" | grep 'OK')
if [ -z "$ZIP_OK" ]; then
rm "$ZIP_ARCHIVE"
echo ""
echo "Stop! The archive was corrupt and has been removed! Please try installing again."
exit 0
fi
}
function no_connection {
echo " "
echo "---------------------------------------------------------"
echo " "
echo "The GVM service is down or the internet is not reachable!"
echo " If the problem persists please notify: @gvmtool "
echo " "
echo "---------------------------------------------------------"
exit 0
}
function default_environment_variables {
if [ ! "$GVM_SERVICE" ]; then
GVM_SERVICE="http://localhost:8080"
fi
if [ ! "$GVM_DIR" ]; then
GVM_DIR="$HOME/.gvm"
fi
}
function server_broadcast {
BROADCAST_LIVE=$(curl -s "$GVM_SERVICE/broadcast/$GVM_VERSION")
if [ ! "$BROADCAST_LIVE" ]; then
no_connection
exit 0
fi
}
function display_broadcast {
COMMAND="$1"
BROADCAST_FILE="$GVM_DIR/var/broadcast"
if [ -f "$BROADCAST_FILE" ]; then
BROADCAST_HIST=$(cat "$BROADCAST_FILE")
fi
UPGRADE_NOTICE=$(echo "$BROADCAST_LIVE" | grep 'Your version of GVM is out of date!')
if [[ "$UPGRADE_NOTICE" && "$COMMAND" != 'selfupdate' ]]; then
echo "$BROADCAST_LIVE"
exit 0
fi
if [[ "$BROADCAST_LIVE" != "$BROADCAST_HIST" && "$COMMAND" != 'broadcast' ]]; then
mkdir -p "$GVM_DIR/var"
echo "$BROADCAST_LIVE" > "$BROADCAST_FILE"
echo "$BROADCAST_LIVE"
fi
if [ "$1" == "help" -o -z "$1" ]; then
help
exit 0
fi
}
#
# Various sanity checks and default settings
#
default_environment_variables
mkdir -p "$GVM_DIR"
server_broadcast
display_broadcast "$1"
#
# Command functions
#
function gvm-install {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_version "$2"
check_installed
download "$CANDIDATE" "$VERSION"
echo "Installing: $CANDIDATE $VERSION"
mkdir -p "$GVM_DIR/$CANDIDATE"
unzip -oq "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip" -d "/tmp/"
mv "/tmp/$CANDIDATE-$VERSION" "$GVM_DIR/$CANDIDATE/$VERSION"
echo "Done installing!"
echo ""
echo -n "Do you want to use $CANDIDATE $VERSION now? (Y/n): "
read USE
if [[ -z "$USE" || "$USE" == "y" || "$USE" == "Y" ]]; then
gvm use "$CANDIDATE" "$VERSION"
fi
}
function gvm-use {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_version "$2"
check_not_installed
if [ -L "$GVM_DIR/$CANDIDATE/current" ]; then
unlink "$GVM_DIR/$CANDIDATE/current"
fi
ln -s "$GVM_DIR/$CANDIDATE/$VERSION" "$GVM_DIR/$CANDIDATE/current"
echo ""
echo Using "$CANDIDATE" version "$VERSION"
}
function gvm-current {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_current_version "$CANDIDATE"
if [ -n "$CURRENT" ]; then
echo Using "$CANDIDATE" version "$CURRENT"
else
echo Not using any version of "$CANDIDATE"
fi
}
function gvm-list {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
build_version_csv "$CANDIDATE"
determine_current_version "$CANDIDATE"
FRAGMENT=$(curl -s "$GVM_SERVICE/candidates/$CANDIDATE/list?platform=$PLATFORM&current=$CURRENT&installed=$CSV")
echo "$FRAGMENT"
}
function gvm-uninstall {
CANDIDATE="$1"
VERSION="$2"
check_candidate_present "$CANDIDATE"
check_version_present "$VERSION"
CURRENT=$(readlink "$GVM_DIR/$CANDIDATE/current" | sed -e "s_$GVM_DIR/$CANDIDATE/__g")
if [ -h "$GVM_DIR/$CANDIDATE/current" -a "$VERSION" == "$CURRENT" ]; then
echo ""
echo "Unselecting $CANDIDATE $VERSION..."
unlink "$GVM_DIR/$CANDIDATE/current"
fi
echo ""
if [ -d "$GVM_DIR/$CANDIDATE/$VERSION" ]; then
echo "Uninstalling $CANDIDATE $VERSION..."
rm -rf "$GVM_DIR/$CANDIDATE/$VERSION"
else
echo "$CANDIDATE $VERSION is not installed."
fi
}
function gvm-version {
echo "Groovy enVironment Manager $GVM_VERSION"
}
function gvm-broadcast {
if [ "$BROADCAST_HIST" ]; then
echo "$BROADCAST_HIST"
else
echo "$BROADCAST_LIVE"
fi
}
function gvm-selfupdate {
curl -s "$GVM_SERVICE/selfupdate" | bash
}
# INSERT NEW COMMANDS BEFORE HERE
# Check whether the command exists
CMD_TYPE=`type -t gvm-"$1"`
if [ -z $CMD_TYPE ]; then
echo -e "\nInvalid command: $1"
help
exit 0
fi
# Check whether the candidate exists
CANDIDATE_VALID=$(curl -s "$GVM_SERVICE/candidates/$2")
if [ "$CANDIDATE_VALID" == 'invalid' ]; then
echo -e "\nStop! $2 is not a valid candidate."
exit 0
fi
# Main command
gvm-"$1" "$2" "$3"