mirror of
https://github.com/sdkman/sdkman-cli.git
synced 2026-02-01 02:03:18 -05:00
It was frustrating to see the gvm version every time I ran a command, so I have removed the relevant echo and moved it into a separate 'version' command. I also decided to change the logic for determining whether the given command is valid or not. The original check was already unwieldy and getting more so, so the script now checks the given command against all the functions starting with 'gvm-<cmd>'. If the function exists, so does the command.
275 lines
6.0 KiB
Bash
Executable File
275 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
GVM_VERSION="0.8"
|
|
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 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"
|
|
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 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
|
|
|
|
#
|
|
# 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 -oq "$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"
|
|
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¤t=$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-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 ""
|
|
}
|
|
|
|
# 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"
|