95 lines
3.8 KiB
Bash
95 lines
3.8 KiB
Bash
|
#!/bin/bash
|
||
|
NVM_VERSION=`curl -Ls -w %{url_effective} -o /dev/null https://github.com/nvm-sh/nvm/releases/latest | rev | cut -d '/' -f 1 | rev`
|
||
|
|
||
|
# Exit if any command fails
|
||
|
set -e
|
||
|
|
||
|
# Include useful functions
|
||
|
. "$(dirname "$0")/includes.sh"
|
||
|
|
||
|
# Load NVM
|
||
|
if [ -n "$NVM_DIR" ]; then
|
||
|
# The --no-use option ensures loading NVM doesn't switch the current version.
|
||
|
if [ -f "$NVM_DIR/nvm.sh" ]; then
|
||
|
. "$NVM_DIR/nvm.sh" --no-use
|
||
|
elif command_exists "brew" && [ -f "$(brew --prefix nvm)/nvm.sh" ]; then
|
||
|
# use homebrew if that's how nvm was installed
|
||
|
. "$(brew --prefix nvm)/nvm.sh" --no-use
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Change to the expected directory
|
||
|
cd "$(dirname "$0")/../.."
|
||
|
|
||
|
# Check if nvm is installed
|
||
|
if [ "$TRAVIS" != "true" ] && ! command_exists "nvm"; then
|
||
|
if ask "$(error_message "NVM isn't installed, would you like to download and install it automatically?")" Y; then
|
||
|
# The .bash_profile file needs to exist for NVM to install
|
||
|
if [ ! -e ~/.bash_profile ]; then
|
||
|
touch ~/.bash_profile
|
||
|
fi
|
||
|
|
||
|
echo -en $(status_message "Installing NVM..." )
|
||
|
download "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash >/dev/null 2>&1
|
||
|
echo ' done!'
|
||
|
|
||
|
echo -e $(warning_message "NVM was updated, please run this command to reload it:" )
|
||
|
echo -e $(warning_message "$(action_format ". \$HOME/.nvm/nvm.sh")" )
|
||
|
echo -e $(warning_message "After that, re-run the setup script to continue." )
|
||
|
else
|
||
|
echo -e $(error_message "")
|
||
|
echo -e $(error_message "Please install NVM manually, then re-run the setup script to continue.")
|
||
|
echo -e $(error_message "NVM installation instructions can be found here: $(action_format "https://github.com/nvm-sh/nvm")")
|
||
|
fi
|
||
|
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Check if the current nvm version is up to date.
|
||
|
if [ "$TRAVIS" != "true" ] && [ $NVM_VERSION != "v$(nvm --version)" ]; then
|
||
|
echo -en $(status_message "Updating NVM..." )
|
||
|
download "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash >/dev/null 2>&1
|
||
|
echo ' done!'
|
||
|
|
||
|
echo -e $(warning_message "NVM was updated, please run this command to reload it:" )
|
||
|
echo -e $(warning_message "$(action_format ". \$HOME/.nvm/nvm.sh")" )
|
||
|
echo -e $(warning_message "After that, re-run the setup script to continue." )
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Check if the current node version is up to date.
|
||
|
if [ "$TRAVIS" != "true" ] && [ "$(nvm current)" != "$(nvm version-remote --lts)" ]; then
|
||
|
echo -e $(warning_message "Node version does not match the latest long term support version. Please run this command to install and use it:" )
|
||
|
echo -e $(warning_message "$(action_format "nvm install")" )
|
||
|
echo -e $(warning_message "After that, re-run the setup script to continue." )
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Install/update packages
|
||
|
echo -e $(status_message "Installing and updating NPM packages..." )
|
||
|
npm install
|
||
|
|
||
|
# Make sure npm is up-to-date
|
||
|
npm install npm -g
|
||
|
|
||
|
# There was a bug in NPM that caused changes in package-lock.json. Handle that.
|
||
|
if [ "$TRAVIS" != "true" ] && ! git diff --no-ext-diff --exit-code package-lock.json >/dev/null; then
|
||
|
if ask "$(warning_message "Your package-lock.json changed, which may mean there's an issue with your NPM cache. Would you like to try and automatically clean it up?" )" N 10; then
|
||
|
rm -rf node_modules/
|
||
|
npm cache clean --force >/dev/null 2>&1
|
||
|
git checkout package-lock.json
|
||
|
|
||
|
echo -e $(status_message "Reinstalling NPM packages..." )
|
||
|
npm install
|
||
|
|
||
|
# Check that it's cleaned up now.
|
||
|
if git diff --no-ext-diff --exit-code package-lock.json >/dev/null; then
|
||
|
echo -e $(warning_message "Confirmed that the NPM cache is cleaned up." )
|
||
|
else
|
||
|
echo -e $(error_message "We were unable to clean the NPM cache, please manually review the changes to package-lock.json. Continuing with the setup process..." )
|
||
|
fi
|
||
|
else
|
||
|
echo -e $(warning_message "Please manually review the changes to package-lock.json. Continuing with the setup process..." )
|
||
|
fi
|
||
|
fi
|