Skip to content

Commit

Permalink
Update install and selfupdate to modular rework.
Browse files Browse the repository at this point in the history
  • Loading branch information
marc0der committed Dec 20, 2012
1 parent 24318d0 commit 3522106
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 110 deletions.
14 changes: 3 additions & 11 deletions src/main/resources/scripts/gvm-init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,9 @@ VERTX_HOME="${GVM_DIR}/vert.x/current"
export PATH="${GROOVY_HOME}/bin:${GRAILS_HOME}/bin:${GRIFFON_HOME}/bin:${GRADLE_HOME}/bin:${VERTX_HOME}/bin:$PATH"

# Source gvm module scripts.
source "${GVM_DIR}/bin/gvm-common.sh"
source "${GVM_DIR}/bin/gvm-broadcast.sh"
source "${GVM_DIR}/bin/gvm-current.sh"
source "${GVM_DIR}/bin/gvm-default.sh"
source "${GVM_DIR}/bin/gvm-install.sh"
source "${GVM_DIR}/bin/gvm-list.sh"
source "${GVM_DIR}/bin/gvm-selfupdate.sh"
source "${GVM_DIR}/bin/gvm-uninstall.sh"
source "${GVM_DIR}/bin/gvm-use.sh"
source "${GVM_DIR}/bin/gvm-version.sh"
source "${GVM_DIR}/bin/gvm-main.sh"
for f in $(find "${GVM_DIR}/src" -type f -name 'gvm-*'); do
source "${f}"
done

# Source extension files prefixed with 'sourced-' and found in the ext/ folder
# Use this if extensions are written with the functional approach and want
Expand Down
6 changes: 4 additions & 2 deletions src/main/resources/scripts/gvm-main.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@ function gvm {
# NOTE Internal commands use underscores rather than hyphens,
# hence the name conversion as the first step here.
CONVERTED_CMD_NAME=`echo "$1" | tr '-' '_'`

CMD_FOUND=""
if [[ -f "${GVM_DIR}/bin/gvm-$1.sh" ]]; then
CMD_FOUND="${GVM_DIR}/bin/gvm-$1.sh"
CMD_TARGET="${GVM_DIR}/src/gvm-$1.sh"
if [[ -f "${CMD_TARGET}" ]]; then
CMD_FOUND="${CMD_TARGET}"
fi

# ...no command provided
Expand Down
153 changes: 98 additions & 55 deletions src/main/resources/scripts/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,33 @@
# limitations under the License.
#

# Global variables
GVM_SERVICE="@GVM_SERVICE@"
PLATFORM=$(uname)
GVM_VERSION="@GVM_VERSION@"
GVM_PLATFORM=$(uname)
GVM_DIR="$HOME/.gvm"

# Local variables
gvm_bin_folder="${GVM_DIR}/bin"
gvm_src_folder="${GVM_DIR}/src"
gvm_tmp_folder="${GVM_DIR}/tmp"
gvm_stage_folder="${gvm_tmp_folder}/stage"
gvm_zip_file="${gvm_tmp_folder}/res-${GVM_VERSION}.zip"
gvm_ext_folder="${GVM_DIR}/ext"
gvm_etc_folder="${GVM_DIR}/ext"
gvm_config_file="${gvm_ext_folder}/config"
gvm_bash_profile="${HOME}/.bash_profile"
gvm_profile="${HOME}/.profile"
gvm_bashrc="${HOME}/.bashrc"
gvm_zshrc="${HOME}/.zshrc"
gvm_init_snippet=$( cat << EOF
#THIS MUST BE AT THE END OF THE FILE FOR GVM TO WORK!!!
[[ -s "${GVM_DIR}/bin/gvm-init.sh" && ! \$(which gvm-init.sh) ]] && source "${GVM_DIR}/bin/gvm-init.sh"
EOF
)



echo ' '
echo 'Thanks for using '
echo ' '
Expand All @@ -35,6 +58,9 @@ echo ' '
echo ' Will now attempt installing...'
echo ' '


# Sanity checks

echo "Looking for a previous installation of GVM..."
if [ -d "${GVM_DIR}" ]; then
echo "GVM found."
Expand Down Expand Up @@ -116,86 +142,103 @@ if [ -z $(which curl) ]; then
fi

echo "Installing gvm scripts..."
BIN_FOLDER="${GVM_DIR}/bin"
TMP_ZIP="/tmp/res.zip"
mkdir -p "${BIN_FOLDER}"
curl -s "${GVM_SERVICE}/res?platform=${PLATFORM}" > "${TMP_ZIP}"
unzip -qo "${TMP_ZIP}" -d "${BIN_FOLDER}"
rm "${TMP_ZIP}"
chmod +x "${BIN_FOLDER}"/*

mkdir -p "${GVM_DIR}/ext"

mkdir -p "${GVM_DIR}/etc"
CONFIG_FILE="${GVM_DIR}/etc/config"
if [[ ! -f "${CONFIG_FILE}" ]]; then
echo "isolated_mode=0" > "${CONFIG_FILE}"
fi

echo "Creating candidate directories..."

# Create directory structure

echo "Create distribution directories..."
mkdir -p "${gvm_bin_folder}"
mkdir -p "${gvm_src_folder}"
mkdir -p "${gvm_tmp_folder}"
mkdir -p "${gvm_stage_folder}"
mkdir -p "${gvm_ext_folder}"

echo "Create candidate directories..."
mkdir -p "${GVM_DIR}/groovy"
mkdir -p "${GVM_DIR}/grails"
mkdir -p "${GVM_DIR}/griffon"
mkdir -p "${GVM_DIR}/gradle"
mkdir -p "${GVM_DIR}/vert.x"

echo "Attempting to update bash profile..."
SNIPPET=$( cat << EOF
#THIS MUST BE AT THE END OF THE FILE FOR GVM TO WORK!!!
[[ -s "${GVM_DIR}/bin/gvm-init.sh" && ! \$(which gvm-init.sh) ]] && source "${GVM_DIR}/bin/gvm-init.sh"
EOF
)
echo "Download script archive..."
curl -s "${GVM_SERVICE}/res?platform=${GVM_PLATFORM}" > "${gvm_zip_file}"

echo "Extract script archive..."
unzip -qo "${gvm_zip_file}" -d "${gvm_stage_folder}"

echo "Install scripts..."
mv "${gvm_stage_folder}/gvm-init.sh" "${gvm_bin_folder}"
mv "${gvm_stage_folder}"/gvm-* "${gvm_src_folder}"

BASH_PROFILE="$HOME/.bash_profile"
PROFILE="$HOME/.profile"
BASHRC="$HOME/.bashrc"
ZSHRC="$HOME/.zshrc"
echo "Make init script executable..."
chmod +x "${gvm_bin_folder}/gvm-init.sh"

if [ ! -f "${BASH_PROFILE}" -a ! -f "${PROFILE}" ]; then
echo "#!/bin/bash" > "${BASH_PROFILE}"
echo "${SNIPPET}" >> "${BASH_PROFILE}"
echo "Created and initialised ${BASH_PROFILE}"
echo "Prime config file..."
if [[ ! -f "${gvm_config_file}" ]]; then
echo "isolated_mode=1" > "${gvm_config_file}"
fi

echo "Attempt update of bash profiles..."
if [ ! -f "${gvm_bash_profile}" -a ! -f "${gvm_profile}" ]; then
echo "#!/bin/bash" > "${gvm_bash_profile}"
echo "${gvm_init_snippet}" >> "${gvm_bash_profile}"
echo "Created and initialised ${gvm_bash_profile}"
else
if [ -f "${BASH_PROFILE}" ]; then
if [[ -z `grep 'gvm-init.sh' "${BASH_PROFILE}"` ]]; then
echo -e "\n${SNIPPET}" >> "${BASH_PROFILE}"
echo "Updated existing ${BASH_PROFILE}"
if [ -f "${gvm_bash_profile}" ]; then
if [[ -z `grep 'gvm-init.sh' "${gvm_bash_profile}"` ]]; then
echo -e "\n${gvm_init_snippet}" >> "${gvm_bash_profile}"
echo "Updated existing ${gvm_bash_profile}"
fi
fi

if [ -f "${PROFILE}" ]; then
if [[ -z `grep 'gvm-init.sh' "${PROFILE}"` ]]; then
echo -e "\n${SNIPPET}" >> "${PROFILE}"
echo "Updated existing ${PROFILE}"
if [ -f "${gvm_profile}" ]; then
if [[ -z `grep 'gvm-init.sh' "${gvm_profile}"` ]]; then
echo -e "\n${gvm_init_snippet}" >> "${gvm_profile}"
echo "Updated existing ${gvm_profile}"
fi
fi
fi

if [ ! -f "${BASHRC}" ]; then
echo "#!/bin/bash" > "${BASHRC}"
echo "${SNIPPET}" >> "${BASHRC}"
echo "Created and initialised ${BASHRC}"
if [ ! -f "${gvm_bashrc}" ]; then
echo "#!/bin/bash" > "${gvm_bashrc}"
echo "${gvm_init_snippet}" >> "${gvm_bashrc}"
echo "Created and initialised ${gvm_bashrc}"
else
if [[ -z `grep 'gvm-init.sh' "${BASHRC}"` ]]; then
echo -e "\n${SNIPPET}" >> "${BASHRC}"
echo "Updated existing ${BASHRC}"
if [[ -z `grep 'gvm-init.sh' "${gvm_bashrc}"` ]]; then
echo -e "\n${gvm_init_snippet}" >> "${gvm_bashrc}"
echo "Updated existing ${gvm_bashrc}"
fi
fi

if [ ! -f "${ZSHRC}" ]; then
echo "${SNIPPET}" >> "${ZSHRC}"
echo "Created and initialised ${ZSHRC}"
echo "Attempt update of zsh profiles..."
if [ ! -f "${gvm_zshrc}" ]; then
echo "${gvm_init_snippet}" >> "${gvm_zshrc}"
echo "Created and initialised ${gvm_zshrc}"
else
if [[ -z `grep 'gvm-init.sh' "${ZSHRC}"` ]]; then
echo -e "\n${SNIPPET}" >> "${ZSHRC}"
echo "Updated existing ${ZSHRC}"
if [[ -z `grep 'gvm-init.sh' "${gvm_zshrc}"` ]]; then
echo -e "\n${gvm_init_snippet}" >> "${gvm_zshrc}"
echo "Updated existing ${gvm_zshrc}"
fi
fi

echo "All done!"
echo "Clean up local variables..."
unset gvm_bin_folder
unset gvm_src_folder
unset gvm_tmp_folder
unset gvm_stage_folder
unset gvm_zip_file
unset gvm_ext_folder
unset gvm_etc_folder
unset gvm_config_file
unset gvm_bash_profile
unset gvm_profile
unset gvm_bashrc
unset gvm_zshrc
unset gvm_init_snippet


echo -e "\n\n\nAll done!\n\n"

echo ""
echo ""
echo "Please open a new terminal, or run the following in the existing one:"
echo ""
echo " source \"${GVM_DIR}/bin/gvm-init.sh\""
Expand Down
53 changes: 35 additions & 18 deletions src/main/resources/scripts/selfupdate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,40 +16,57 @@
#

echo ""
echo "Updating gvm scripts..."
TMP_ZIP="/tmp/res-$(printf %05d $RANDOM).zip"

PLATFORM=$(uname)
echo "Updating gvm..."

GVM_VERSION="@GVM_VERSION@"
if [ -z "${GVM_DIR}" ]; then
GVM_DIR="$HOME/.gvm"
fi

gvm_platform=$(uname)
gvm_bin_folder="${GVM_DIR}/bin"
gvm_tmp_zip="${GVM_DIR}/tmp/res-${GVM_VERSION}.zip"
gvm_stage_folder="${GVM_DIR}/tmp/stage"
gvm_src_folder="${GVM_DIR}/src"

echo "Refresh directory structure..."
mkdir -p "${GVM_DIR}/bin"
mkdir -p "${GVM_DIR}/ext"
mkdir -p "${GVM_DIR}/etc"
mkdir -p "${GVM_DIR}/src"
mkdir -p "${GVM_DIR}/var"
mkdir -p "${GVM_DIR}/tmp"

mkdir -p "${GVM_DIR}/groovy"
mkdir -p "${GVM_DIR}/groovy"
mkdir -p "${GVM_DIR}/grails"
mkdir -p "${GVM_DIR}/gradle"
mkdir -p "${GVM_DIR}/griffon"
mkdir -p "${GVM_DIR}/grails"
mkdir -p "${GVM_DIR}/vert.x"

echo "Prime the config file..."
gvm_config_file="${GVM_DIR}/etc/config"
echo "isolated_mode=1" > "${gvm_config_file}"

echo "Download new scripts to: ${gvm_tmp_zip}"
curl -s "${GVM_SERVICE}/res?platform=${gvm_platform}" > "${gvm_tmp_zip}"

echo "Unziping scripts to: ${gvm_stage_folder}"
unzip -qo "${gvm_tmp_zip}" -d "${gvm_stage_folder}"

CONFIG_FILE="${GVM_DIR}/etc/config"
echo "isolated_mode=1" > "${CONFIG_FILE}"
echo "Moving gvm-init file to bin folder..."
mv -v "${gvm_stage_folder}/gvm-init.sh" "${gvm_bin_folder}"

BIN_FOLDER="${GVM_DIR}/bin"
mkdir -p "${BIN_FOLDER}"
echo "Download new scripts to: ${TMP_ZIP}"
curl -s "${GVM_SERVICE}/res?platform=${PLATFORM}" > "${TMP_ZIP}"
echo "Changing file permissions for init script..."
chmod +x "${gvm_bin_folder}/gvm-init.sh"

echo "Unziping scripts to: ${BIN_FOLDER}"
unzip -qo "${TMP_ZIP}" -d "${BIN_FOLDER}"
echo "Move remaining module scripts to src folder: ${gvm_src_folder}"
mv -v "${gvm_stage_folder}"/gvm-* "${gvm_src_folder}"

echo "Cleaning up ${TMP_ZIP}"
rm "${TMP_ZIP}"
echo "Clean up staging folder..."
rm -rf "${gvm_stage_folder}"

echo "Changing file permissions in: ${BIN_FOLDER}"
chmod +x "${BIN_FOLDER}"/*
echo "Clean up local variables..."
unset gvm_platform gvm_bin_folder gvm_tmp_zip gvm_stage_folder gvm_src_folder

echo ""
echo ""
Expand Down
8 changes: 5 additions & 3 deletions src/test/cucumber/gvm/upgrade.feature
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ Feature: Upgrade
Scenario: Upgrade an outdated installation
Given an initialised system
When I enter "gvm selfupdate"
Then I see "Updating gvm scripts..."
Then I see "Successfully upgraded GVM."
Then the gvm scripts are up to date
Then I see "Updating gvm..."
And the gvm init script is placed in the bin folder
And the gvm module scripts are placed in the src folder
And the staging folder is cleaned up
And I see "Successfully upgraded GVM."

Scenario: Upgrade an installation without configuration
Given an initialised system
Expand Down
19 changes: 13 additions & 6 deletions src/test/resources/gvm/env.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ serviceUrlEnv = "http://localhost:8080"

gvmDir = new File("${gvmDirEnv}")
binDir = new File("${gvmDirEnv}/bin")
srcDir = new File("${gvmDirEnv}/src")
varDir = new File("${gvmDirEnv}/var")
envDir = new File("${gvmDirEnv}/etc")

broadcastFile = new File("${gvmDirEnv}/var/broadcast")

server = null
Expand All @@ -21,15 +23,20 @@ Before(){
cleanUp()
server = startServer()
binDir.mkdirs()
srcDir.mkdirs()
varDir.mkdirs()
envDir.mkdirs()

// Copy the scripts into the gvm bin directory.
for (f in baseDir.listFiles()) {
if (!f.directory) {
new File(binDir, f.name) << f.text
}
}
// Copy the init script into the gvm bin folder
def initScript = new File(binDir, 'gvm-init.sh') << new File(baseDir, 'gvm-init.sh').text
initScript.executable = true

// Copy all modular scripts into the gvm bin folder
for (f in baseDir.listFiles()){
if(!(f.name in ['selfupdate.sh', 'install.sh', 'gvm-init.sh'])){
new File(srcDir, f.name) << f.text
}
}
}

After(){
Expand Down
Loading

0 comments on commit 3522106

Please sign in to comment.