Files
sdkman-cli/srv/scripts/gvm
Marco Vermeulen e36a4e095b Merge pull request #31 from pledbrook/add-current-cmd
Add 'current' command to show version in use.
2012-10-14 10:29:00 -07:00

250 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
GVM_VERSION="0.4"
echo "Groovy enVironment Manager $GVM_VERSION"
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, selfupdate 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_candidate_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"
curl -L "$DOWNLOAD_URL" > "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip"
else
echo ""
echo "Found a previously downloaded $CANDIDATE $VERSION archive."
echo "Not downloading it again..."
fi
echo ""
}
function server_down {
echo "------------------------------------------"
echo " This is serious! Service is down! "
echo " Please notify: @gvmtool immediately! "
echo "------------------------------------------"
exit 0
}
#
# Various sanity checks and default settings
#
if [ ! $(which curl) ]; then
echo "Please install curl through your package manager before using this tool."
exit 0
fi
if [ ! "$GVM_SERVICE" ]; then
GVM_SERVICE="http://localhost:8080"
fi
if [ ! "$GVM_DIR" ]; then
GVM_DIR="$HOME/.gvm"
fi
if [ ! -d "$GVM_DIR" ]; then
mkdir "$GVM_DIR"
fi
BROADCAST=$(curl -s "$GVM_SERVICE/app/alive/$GVM_VERSION")
if [ "$BROADCAST" ]; then
echo "$BROADCAST"
else
server_down
fi
if [ "$1" == "help" -o -z "$1" ]; then
help
exit 0
fi
if [ "$1" != "install" -a "$1" != "use" -a "$1" != "uninstall" -a "$1" != "list" -a "$1" != "current" -a "$1" != "help" -a "$1" != "selfupdate" ]; then
echo -e "\nInvalid command: $1"
help
exit 0
fi
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
#
# Command functions
#
function gvm-install {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_candidate_version "$2"
check_installed
download "$CANDIDATE" "$VERSION"
echo "Installing: $CANDIDATE $VERSION"
mkdir -p "$GVM_DIR/$CANDIDATE"
unzip -q "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip" -d "/tmp/"
mv "/tmp/$CANDIDATE-$VERSION" "$GVM_DIR/$CANDIDATE/$VERSION"
echo "Done installing!"
echo ""
echo "Start using $CANDIDATE $VERSION by issuing the following command:"
echo " gvm use $CANDIDATE $VERSION"
}
function gvm-use {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_candidate_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"
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-selfupdate {
mkdir -p "$GVM_DIR/bin"
curl -s "$GVM_SERVICE/res/init?platform=$PLATFORM" > "$GVM_DIR/bin/gvm-init.sh"
curl -s "$GVM_SERVICE/res/gvm" > "$GVM_DIR/bin/gvm"
chmod +x "$GVM_DIR/bin/gvm-init.sh"
chmod +x "$GVM_DIR/bin/gvm"
echo ""
echo "Successfully upgraded GVM."
echo ""
}
# Main command
gvm-"$1" "$2" "$3"